后台:自动开服
This commit is contained in:
@@ -5,7 +5,7 @@ import { nowSeconds, getTimeFun, getSeconds } from '../pubUtils/timeUtil';
|
||||
import { getTodayGuildActivity, gameData } from '../pubUtils/data';
|
||||
import { pvpSeasonEnd } from './pvpService';
|
||||
import { getAllOnlineRoles, getAllServers, delGuildActivityRank } from './redisService';
|
||||
import { GUILD_ACTIVITY_TYPE, REFRESH_TIME, SEND_NAME, SERVER_OPEN_TIME, COUNTER, AUCTION_TIME, GM_MAIL_TYPE, SERVER_STATUS } from '../consts';
|
||||
import { GUILD_ACTIVITY_TYPE, REFRESH_TIME, SEND_NAME, SERVER_OPEN_TIME, COUNTER, AUCTION_TIME, GM_MAIL_TYPE, SERVER_STATUS, SERVER_TIMER } from '../consts';
|
||||
import { RoleModel } from '../db/Role';
|
||||
import { pinus } from 'pinus';
|
||||
import { indexOf } from 'underscore';
|
||||
@@ -19,7 +19,7 @@ import { dispatch } from '../pubUtils/dispatcher';
|
||||
import { Rank } from './rankService';
|
||||
import { checkTask } from './taskService';
|
||||
import { everydayRefresh } from './connectorService';
|
||||
import { initMarquee } from './gmService';
|
||||
import { createNewServer, initMarquee } from './gmService';
|
||||
import moment = require('moment');
|
||||
import { CounterModel } from '../db/Counter';
|
||||
import { reportOneOnline } from './authenticateService';
|
||||
@@ -30,6 +30,7 @@ import { Maintenance, ServerlistModel, ServerlistType, ServerlistUpdate } from '
|
||||
import { getWorldChannelSid } from './chatService';
|
||||
import { createMarqueeMsg, pushMarqueeMsg } from './sysChatService';
|
||||
import { RegionModel, RegionType } from '../db/Region';
|
||||
import { CreateServerParam } from '../domain/backEndField/params';
|
||||
|
||||
const PER_SECOND = 1 * 1000;
|
||||
const PER_DAY = 24 * 60 * 60;
|
||||
@@ -79,6 +80,9 @@ export async function init() {
|
||||
|
||||
// 维护信息
|
||||
await initMaintenance();
|
||||
|
||||
// 自动开服
|
||||
await initAutoCreateServer();
|
||||
}
|
||||
|
||||
// —————————————— PVP 及赛季相关 —————————————— //
|
||||
@@ -415,8 +419,6 @@ let maintenInfos = new Map<string, { servers: ServerlistType[], maintenance: Mai
|
||||
export async function initMaintenance(servers?: ServerlistType[]) {
|
||||
if(!servers) servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
|
||||
|
||||
console.log('#### initMaintenance', servers)
|
||||
|
||||
for(let server of servers) {
|
||||
let { maintenance } = server;
|
||||
if(maintenance && maintenance.isOpen) {
|
||||
@@ -532,7 +534,42 @@ export async function stopMaintenance(batchCode: string, serverIds: number[]) {
|
||||
|
||||
// —————————————— 维护 end —————————————— //
|
||||
// —————————————— 自动开服 —————————————— //
|
||||
async function initAutoCreateServer(region?: RegionType) {
|
||||
export async function initAutoCreateServer(region?: RegionType) {
|
||||
if(!region) region = await RegionModel.findRegionByEnv(pinus.app.get('env'));
|
||||
if(region && region.stategy) {
|
||||
for(let timer of region.stategy.timers) {
|
||||
setStategyTimer(timer, region)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setStategyTimer(timerId: number, region: RegionType) {
|
||||
if(scheduledJobs[`autoServer${timerId}`]) scheduledJobs[`autoServer${timerId}`].cancel();
|
||||
let cron = '';
|
||||
switch(timerId) {
|
||||
case SERVER_TIMER.FIVE_HALF:
|
||||
cron = '0 30 5 * * *'; break;
|
||||
case SERVER_TIMER.TEN_HALF:
|
||||
cron = '0 30 10 * * *'; break;
|
||||
case SERVER_TIMER.FIFTEEN_HALF:
|
||||
cron = '0 19 16 * * *'; break;
|
||||
case SERVER_TIMER.NINETEEN_HALF:
|
||||
cron = '0 30 19 * * *'; break;
|
||||
}
|
||||
if(cron) {
|
||||
scheduleJob(`autoServer${timerId}`, cron, () => {
|
||||
autoCreateServerSchedule(region);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async function autoCreateServerSchedule(region: RegionType) {
|
||||
console.log('******* createNewServer *******')
|
||||
let latestServer = await ServerlistModel.findByServerId(region.latestServerUniqId);
|
||||
if(!latestServer || latestServer.playerCnt >= region.stategy.maxPlayerCnt) {
|
||||
let params = new CreateServerParam();
|
||||
params.setByRegionStategy(region, nowSeconds())
|
||||
await createNewServer(region, (latestServer?.serverId||0) + 1, params);
|
||||
}
|
||||
}
|
||||
// —————————————— 自动开服 end —————————————— //
|
||||
Reference in New Issue
Block a user