From 90472aff3af3a9bec09a4d97e668869630f30916 Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Tue, 14 Sep 2021 21:05:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20connectorRemote=20?= =?UTF-8?q?=E4=B8=AD=E9=83=A8=E5=88=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/connector/filter/global.ts | 6 ++--- .../servers/connector/handler/entryHandler.ts | 8 +++++-- .../connector/remote/connectorRemote.ts | 24 +++---------------- .../app/servers/gm/handler/gmHandler.ts | 5 +--- game-server/app/services/connectorService.ts | 18 ++++++++++++-- game-server/app/services/gmService.ts | 6 +---- 6 files changed, 29 insertions(+), 38 deletions(-) diff --git a/game-server/app/servers/connector/filter/global.ts b/game-server/app/servers/connector/filter/global.ts index 8ac521a04..00a1f20a9 100644 --- a/game-server/app/servers/connector/filter/global.ts +++ b/game-server/app/servers/connector/filter/global.ts @@ -21,10 +21,8 @@ Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, se session.push('teamCode', () => {}); - let connectorServers = pinus.app.getServersByType('connector'); - let { id } = connectorServers[0]; - let maintenServers = await pinus.app.rpc.connector.connectorRemote.getServerMainten.toServer(id); - if(maintenServers.indexOf(serverId) != -1) { // 该服务器维护 + const maintenServers = this.app.get('maintenServers'); + if(maintenServers && maintenServers.indexOf(serverId) != -1) { // 该服务器维护 let isWhiteList = await checkWhiteListWithUid(uid); if(isWhiteList) return next(null); diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 68778a075..c0daac241 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -19,7 +19,7 @@ import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leav import { reportOneOnline, savePlayTime } from '../../../services/authenticateService'; import { Rank } from '../../../services/rankService'; import { checkTaskWithRole, } from '../../../services/taskService'; -import { pushData, everydayRefresh } from '../../../services/connectorService'; +import { pushData, everydayRefresh, kickUser } from '../../../services/connectorService'; import { pick } from 'lodash'; import { setComBtlOnUserLeave } from '../../../services/comBattleService'; @@ -56,7 +56,11 @@ export class EntryHandler { let connect = await getRoleOnlineInfo(role.roleId); if (connect.isOnline) { // 多地登陆踢下线 - await self.app.rpc.connector.connectorRemote.remoteLogin.toServer(connect.sid, role.roleId); + if (connect.sid = self.app.getServerId()) { + await kickUser(self.app, `${user.uid}`); + } else { + await self.app.rpc.connector.connectorRemote.remoteLogin.toServer(connect.sid, role.roleId); + } } let serverName = this.app.getServerId(); await roleLogin(role.roleId, user.userCode, serverName, user.pkgName); // 保存在线用户 diff --git a/game-server/app/servers/connector/remote/connectorRemote.ts b/game-server/app/servers/connector/remote/connectorRemote.ts index aff31f17d..1ededc798 100644 --- a/game-server/app/servers/connector/remote/connectorRemote.ts +++ b/game-server/app/servers/connector/remote/connectorRemote.ts @@ -3,6 +3,7 @@ import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { reloadResources } from '../../../pubUtils/data'; import { UserGuildType } from '../../../db/UserGuild'; +import { kickUser } from '../../../services/connectorService'; export default function (app: Application) { new HandlerService(app, {}); return new ConnectorRemote(app); @@ -12,31 +13,11 @@ export class ConnectorRemote { constructor(private app: Application) { this.app = app; - this.channelService = app.get('channelService'); } - private channelService: ChannelService; private maintenServers: number[] = []; // 维护中的服务器 public async remoteLogin(uid: string) { - let sessionService = this.app.get('sessionService'); - let sessions = sessionService.getByUid(uid); - if (!!sessions) { - sessions.forEach(session => { - let roleId = session.get('roleId'); - let sid = session.get('sid'); - let uids = [{ uid: roleId, sid }]; - this.channelService.pushMessageByUids('onRemoteLogin', resResult(STATUS.LOGIN_ERR), uids); - }); - } - await sessionService.akick(uid); - } - - public async pushMessage(uid: string, route: string, data: any) { - let sid = pinus.app.getServerId(); - if (!!sid) { - let uids = [{ uid, sid }]; - this.channelService.pushMessageByUids(route, resResult(STATUS.SUCCESS, { mails: data }), uids); - } + await kickUser(this.app, uid); } public async setOtherUserGuildSession(params: { roleId: string, userGuild: UserGuildType}[]) { @@ -63,6 +44,7 @@ export class ConnectorRemote { } public setServerMainten(maintenServers: number[]) { + this.app.set('maintenServers', maintenServers); return this.maintenServers = maintenServers; } diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index 07731cb50..45c50c917 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -210,10 +210,7 @@ export class GmHandler { } async setMaintenance() { - let connectorServers = pinus.app.getServersByType('connector'); - for (let { id } of connectorServers) { - pinus.app.rpc.connector.connectorRemote.setServerMainten.toServer(id, [1]); - } + pinus.app.rpc.connector.connectorRemote.setServerMainten.broadcast([1]); return resResult(STATUS.SUCCESS); } diff --git a/game-server/app/services/connectorService.ts b/game-server/app/services/connectorService.ts index 7483f9655..af12025c8 100644 --- a/game-server/app/services/connectorService.ts +++ b/game-server/app/services/connectorService.ts @@ -6,7 +6,7 @@ import { recentGuildMsgs, recentPrivateChatInfos, recentSysMsgs, recentWorldMsgs import { getCurTask } from './taskService'; import { RoleType } from '../db/Role'; -import { FrontendOrBackendSession, pinus } from 'pinus'; +import { Application, FrontendOrBackendSession, pinus } from 'pinus'; import { resResult } from '../pubUtils/util'; import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE } from '../consts'; import { getAllShopList } from './shopService'; @@ -243,4 +243,18 @@ export async function everydayRefresh() { } }, PUSH_INTERVAL) setMedianCe(); -} \ No newline at end of file +} + +export async function kickUser(app: Application, uid: string) { + let sessionService = app.get('sessionService'); + let sessions = sessionService.getByUid(uid); + if (!!sessions) { + sessions.forEach(session => { + let roleId = session.get('roleId'); + let sid = session.get('sid'); + let uids = [{ uid: roleId, sid }]; + app.get('channelService').pushMessageByUids('onRemoteLogin', resResult(STATUS.LOGIN_ERR), uids); + }); + } + await sessionService.akick(uid); +} diff --git a/game-server/app/services/gmService.ts b/game-server/app/services/gmService.ts index 6c11f4020..a0a0df936 100644 --- a/game-server/app/services/gmService.ts +++ b/game-server/app/services/gmService.ts @@ -140,11 +140,7 @@ async function startMaintenance(maintenance: MaintenanceType, startJob?: Job) { } // 更新connectorRemote里面的维护服务器 - let connectorServers = pinus.app.getServersByType('connector'); - for(let { id } of connectorServers) { - await pinus.app.rpc.connector.connectorRemote.setServerMainten.toServer(id, serverIds); - } - + await pinus.app.rpc.connector.connectorRemote.setServerMainten.broadcast(serverIds); } // 停止维护