diff --git a/game-server/app/servers/gm/handler/gmServerHandler.ts b/game-server/app/servers/gm/handler/gmServerHandler.ts index 1cadd7109..f4e3fcc4b 100644 --- a/game-server/app/servers/gm/handler/gmServerHandler.ts +++ b/game-server/app/servers/gm/handler/gmServerHandler.ts @@ -66,8 +66,13 @@ export class GmHandler { if(!id || !isNumber(startTime) || !isNumber(endTime)) return resResult(STATUS.WRONG_PARMS); if(endTime < nowSeconds()) return resResult(STATUS.WRONG_PARMS, '结束时间不能比现在早'); const uid = session.get('uid'); + let server = await ServerlistModel.findByServerId(id); + if(server && server.maintenance) { + await pinus.app.rpc.systimer.systimerRemote.stopMaintenance.broadcast(server.maintenance.batchCode, [server.id]); + } + let newMaintenance: Maintenance = { batchCode: genCode(10), startTime, endTime, hasNotify, isOpen: true } - let server = await ServerlistModel.updateByServerId(id, { maintenance: newMaintenance }); + server = await ServerlistModel.updateByServerId(id, { maintenance: newMaintenance }); await pinus.app.rpc.systimer.systimerRemote.initMaintenance.broadcast([server]); return resResult(STATUS.SUCCESS,); @@ -81,7 +86,24 @@ export class GmHandler { const uid = session.get('uid'); let newMaintenance: Maintenance = { batchCode: genCode(10), startTime, endTime, hasNotify, isOpen: true } let servers = await ServerlistModel.findByEnv(this.app.get('env')); - await ServerlistModel.updateByServerIds(servers.map(server => server.id), { maintenance: newMaintenance }); + let serverIdsOfBatchCode = new Map(); + let serverIds: number[] = []; + for(let server of servers) { + if(server.maintenance) { + let { batchCode } = server.maintenance; + if(!serverIdsOfBatchCode.has(batchCode)) { + serverIdsOfBatchCode.set(batchCode, []); + } + serverIdsOfBatchCode.get(batchCode).push(server.id); + } + serverIds.push(server.id); + } + for(let [ batchCode, serverIds ] of serverIdsOfBatchCode) { + await pinus.app.rpc.systimer.systimerRemote.stopMaintenance.broadcast(batchCode, serverIds); + } + + await ServerlistModel.updateByServerIds(serverIds, { maintenance: newMaintenance }); + servers = await ServerlistModel.findByEnv(this.app.get('env')); await pinus.app.rpc.systimer.systimerRemote.initMaintenance.broadcast(servers); return resResult(STATUS.SUCCESS,); @@ -104,6 +126,33 @@ export class GmHandler { return resResult(STATUS.SUCCESS,); } + // 大区一起结束维护 + async stopRegionMaintenance(msg: {}, session: BackendSession) { + const { } = msg; + const uid = session.get('uid'); + let servers = await ServerlistModel.findByEnv(this.app.get('env')); + let serverIdsOfBatchCode = new Map(); + let serverIds: number[] = []; + for(let server of servers) { + if(server.maintenance) { + let { batchCode } = server.maintenance; + if(!serverIdsOfBatchCode.has(batchCode)) { + serverIdsOfBatchCode.set(batchCode, []); + } + serverIdsOfBatchCode.get(batchCode).push(server.id); + serverIds.push(server.id); + } + } + + for(let [ batchCode, serverIds ] of serverIdsOfBatchCode) { + await pinus.app.rpc.systimer.systimerRemote.stopMaintenance.broadcast(batchCode, serverIds); + } + // 更新serverlist上的status + await ServerlistModel.updateByServerIds(serverIds, { 'maintenance.isOpen': false } as ServerlistUpdate); + + return resResult(STATUS.SUCCESS,); + } + async sendMarquee(msg: { code: string }, session: BackendSession) { const { code } = msg; let marquee = await MarqueeModel.findByCode(code); diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index 1b21c061f..326df08c5 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -442,8 +442,8 @@ async function setMaintenance(batchCode: string) { let now = nowSeconds(); // 发送消息 - if(maintenance.hasNotify && now < maintenance.startTime) { - if(now > maintenance.startTime - 5 * 60) { + if(maintenance.hasNotify && now < maintenance.startTime) { // 提前5分钟发通知 + if(now > maintenance.startTime - 5 * 60) { maintenanceNotifySchedule(batchCode); } else { scheduleJob(`maintenNotify${batchCode}`, (maintenance.startTime - 5 * 60) * 1000, () => { diff --git a/shared/resource/jsons/dic_api.json b/shared/resource/jsons/dic_api.json index 0f5f60821..78fd67e51 100644 --- a/shared/resource/jsons/dic_api.json +++ b/shared/resource/jsons/dic_api.json @@ -754,5 +754,19 @@ "name": "获取玩家日志列表", "module": "log", "type": "find" + }, + { + "id": 109, + "api": "gm.gmServerHandler.stopRegionMaintenance", + "name": "结束大区维护", + "module": "server", + "type": "update" + }, + { + "id": 110, + "api": "gm.gmHandler.taflus", + "name": "数数上报", + "module": "server", + "type": "update" } ] \ No newline at end of file