From e13725eb784cc93a4f36989284b7e53dbfb8e18f Mon Sep 17 00:00:00 2001 From: luying Date: Fri, 14 Jan 2022 17:11:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=EF=BC=9A=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/gm/handler/gmServerHandler.ts | 53 ++++++++++++++++++- game-server/app/services/timeTaskService.ts | 4 +- shared/resource/jsons/dic_api.json | 14 +++++ 3 files changed, 67 insertions(+), 4 deletions(-) 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