根据在线人数路由

This commit is contained in:
luying
2022-08-12 09:39:56 +08:00
parent 3e2c408645
commit 1313f0777f
7 changed files with 143 additions and 15 deletions
+86 -1
View File
@@ -7,7 +7,7 @@ import { getCurTask, getPvpTask } from './task/taskService';
import { RoleType } from '../db/Role';
import { Application, FrontendOrBackendSession, pinus, RpcClient } from 'pinus';
import { resResult } from '../pubUtils/util';
import { getRandEelmWithWeight, resResult } from '../pubUtils/util';
import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE, HERO_SELECT, ENTERY_ROLE_PICK, JEWEL_SELECT, ITEM_SELECT, SKIN_SELECT, PUSH_ROUTE } from '../consts';
import { getAllShopList } from './shopService';
import { getGeneralRank, getRankFirstReward } from './rankService';
@@ -47,6 +47,7 @@ import { getSurvey } from './gmService';
import { ComBattleTeamModel } from '../db/ComBattleTeam';
import { INFO_WINDOW } from '../pubUtils/dicParam';
import { getLadderData } from './ladderService';
import { dispatch } from '../pubUtils/dispatcher';
/**
* init: 初始的时候是否推送 true-推 false-不推
@@ -320,3 +321,87 @@ export async function kickUser(app: Application, uid: string, message = STATUS.L
}
await sessionService.akick(uid);
}
export async function assignServer(roleId: string, session: FrontendOrBackendSession) {
try {
let activity = _assignServer(roleId, 'activity');
let battle = _assignServer(roleId, 'battle');
let chat = _assignServer(roleId, 'chat');
let guild = _assignServer(roleId, 'guild');
let role = _assignServer(roleId, 'role');
let order = _assignServer(roleId, 'order');
if(activity) {
session.set('activityServer', activity);
session.push('activityServer', () => { });
}
if(battle) {
session.set('battleServer', battle);
session.push('battleServer', () => { });
}
if(chat) {
session.set('chatServer', chat);
session.push('chatServer', () => { });
}
if(guild) {
session.set('guildServer', guild);
session.push('guildServer', () => { });
}
if(role) {
session.set('roleServer', role);
session.push('roleServer', () => { });
}
if(order) {
session.set('orderServer', order);
session.push('orderServer', () => { });
}
} catch(e) {
console.log(e)
}
}
function _assignServer(roleId: string, serverType: string) {
let servers = pinus.app.getServersByType(serverType)||[];
let sum = servers.reduce((pre, cur) => pre + (cur['num']||0), 0);
let id = '';
if(sum <= 0) {
id = dispatch(roleId, servers, serverType)?.id;
} else {
let serversWithWeight = servers.map(cur => ({...cur, weight: sum - (cur['num']||0)}));
let { dic: server } = getRandEelmWithWeight(serversWithWeight);
id = server?.id;
}
// if(id) {
// pinus.app.rpc.connector.connectorRemote.incServerNum.broadcast(id, 1);
// }
return id
}
export function incServerNum(sid: string, inc: number) {
if(!pinus.app.getServerById(sid)) return;
if(!pinus.app.getServerById(sid)['num']) {
pinus.app.getServerById(sid)['num'] = 0;
}
pinus.app.getServerById(sid)['num'] += inc;
if(pinus.app.getServerById(sid)['num'] < 0) {
pinus.app.getServerById(sid)['num'] = 0;
}
}
export async function leaveServer(session: FrontendOrBackendSession) {
let activity = session.get('activityServer');
let battle = session.get('battleServer');
let chat = session.get('chatServer');
let guild = session.get('guildServer');
let role = session.get('roleServer');
let order = session.get('orderServer');
let sid = session.get('sid');
pinus.app.rpc.connector.connectorRemote.incServerNum.broadcast(activity, -1);
pinus.app.rpc.connector.connectorRemote.incServerNum.broadcast(battle, -1);
pinus.app.rpc.connector.connectorRemote.incServerNum.broadcast(chat, -1);
pinus.app.rpc.connector.connectorRemote.incServerNum.broadcast(guild, -1);
pinus.app.rpc.connector.connectorRemote.incServerNum.broadcast(role, -1);
pinus.app.rpc.connector.connectorRemote.incServerNum.broadcast(order, -1);
incServerNum(sid, -1);
}
+9
View File
@@ -575,6 +575,15 @@ export async function checkConnectors() {
}
}
export async function incConnectorNum(sid: string, inc: number) {
let server = await redisClient().hgetAsync(REDIS_KEY.SYS_SERVER, sid);
let json = JSON.parse(server);
let { id, serverType, clientHost, clientPort, num = 0 } = json;
let newNum = num + inc;
if(newNum < 0) newNum = 0;
await redisClient().hsetAsync(REDIS_KEY.SYS_SERVER, id, JSON.stringify({ serverType, clientHost, clientPort, id, num: num + inc }));
}
/*************** 将connector服插入redis *******/