修改 connectorRemote 中部分逻辑

This commit is contained in:
liangtongchuan
2021-09-14 21:05:15 +08:00
parent f805025849
commit 90472aff3a
6 changed files with 29 additions and 38 deletions

View File

@@ -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);

View File

@@ -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); // 保存在线用户

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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();
}
}
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);
}

View File

@@ -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);
}
// 停止维护