🎈 perf(dispatch): 路由使用redis
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { STATUS } from './../../../consts/statusCode';
|
||||
import { dispatch } from '../../../util/dispatcher';
|
||||
import { dispatch } from '../../../pubUtils/dispatcher';
|
||||
import { Application, BackendSession, HandlerService, pinus, } from 'pinus';
|
||||
import { resResult } from '../../../pubUtils/util';
|
||||
import { redisClient } from '../../../services/redisService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -31,7 +32,7 @@ export class GateHandler {
|
||||
return resResult(STATUS.CONNECTOR_ERR);
|
||||
}
|
||||
// select connector
|
||||
let res = dispatch(userCode, connectors, 'connector');
|
||||
let res = await dispatch(redisClient(), userCode, connectors, 'connector');
|
||||
return resResult(STATUS.SUCCESS, { host: res.clientHost, port: res.clientPort });
|
||||
}
|
||||
}
|
||||
@@ -13,13 +13,13 @@ import { getGoldObject, handleCost } from "../../../services/role/rewardService"
|
||||
import { Rank } from "../../../services/rankService";
|
||||
import { checkTask } from "../../../services/task/taskService";
|
||||
import { guildInter } from "../../../pubUtils/interface";
|
||||
import { dispatch } from "../../../util/dispatcher";
|
||||
import { dispatch } from "../../../pubUtils/dispatcher";
|
||||
import { ServerRecordModel } from "../../../db/ServerRecords";
|
||||
import { sendMessageToCityWithSuc } from "../../../services/pushService";
|
||||
import { isDebugTime } from "../../../pubUtils/sdkUtil";
|
||||
import { GuildActivityCityDeclareModel } from "../../../db/GuildActivityCityDeclare";
|
||||
import { GuildModel } from "../../../db/Guild";
|
||||
import { getHistoryCity, setHistoryCity } from "../../../services/redisService";
|
||||
import { getHistoryCity, redisClient, setHistoryCity } from "../../../services/redisService";
|
||||
import { HeroModel } from "../../../db/Hero";
|
||||
|
||||
export default function (app: Application) {
|
||||
@@ -274,7 +274,7 @@ export class CityActivityHandler {
|
||||
let challengeTime = nowSeconds() + GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD;
|
||||
if(isDebugTime()) {
|
||||
let guilds = pinus.app.getServersByType('guild');
|
||||
let guild = dispatch(roleId, guilds, 'guild');
|
||||
let guild = await dispatch(redisClient(), roleId, guilds, 'guild');
|
||||
let currentTime = await pinus.app.rpc.guild.guildActivityRemote.getCurrentTime.toServer(guild.id);
|
||||
challengeTime = Math.floor(currentTime/1000) + GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD;
|
||||
}
|
||||
@@ -331,7 +331,7 @@ export class CityActivityHandler {
|
||||
let challengeTime = nowSeconds() + GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD;
|
||||
if(isDebugTime()) {
|
||||
let guilds = pinus.app.getServersByType('guild');
|
||||
let guild = dispatch(roleId, guilds, 'guild');
|
||||
let guild = await dispatch(redisClient(), roleId, guilds, 'guild');
|
||||
let currentTime = await pinus.app.rpc.guild.guildActivityRemote.getCurrentTime.toServer(guild.id);
|
||||
challengeTime = Math.floor(currentTime/1000) + GUILDACTIVITY.CITYACTIVITY_CHALLENGE_CD;
|
||||
}
|
||||
@@ -388,7 +388,7 @@ export class CityActivityHandler {
|
||||
let fun = async () => {
|
||||
for(let [cityId] of gameData.cityActivity) {
|
||||
let guilds = pinus.app.getServersByType('guild');
|
||||
let guild = dispatch(`${cityId}`, guilds);
|
||||
let guild = await dispatch(redisClient(), `${cityId}`, guilds, 'guild');
|
||||
await pinus.app.rpc.guild.guildActivityRemote.debugSendGateHp.toServer(guild.id, serverId, cityId);
|
||||
}
|
||||
await pinus.app.rpc.guild.guildActivityRemote.sendRankToGuilds.broadcast(this.aid);
|
||||
|
||||
@@ -12,7 +12,8 @@ import { sendMessageToGuildWithSuc } from "../../../services/pushService";
|
||||
import { RaceActivityRankParam } from "../../../domain/battleField/guildActivity";
|
||||
import { GuildRankInfo } from "../../../domain/rank";
|
||||
import { ServerlistModel } from "../../../db/Serverlist";
|
||||
import { dispatch } from "../../../util/dispatcher";
|
||||
import { dispatch } from "../../../pubUtils/dispatcher";
|
||||
import { redisClient } from "../../../services/redisService";
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -259,7 +260,7 @@ export class RaceActivityHandler {
|
||||
if(statusResult.status != GUILD_ACTIVITY_STATUS.START) return resResult(STATUS.GUILD_ACTIVITY_NOT_OPEN);
|
||||
|
||||
let guild = pinus.app.getServersByType('guild');
|
||||
let sid = dispatch(`${serverId}`, guild);
|
||||
let sid = await dispatch(redisClient(), `${serverId}`, guild, 'guild');
|
||||
pinus.app.rpc.guild.guildActivityRemote.debugAddHorse.toServer(sid.id, serverId, guildCode, memberCnt, itemInterval)
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
|
||||
@@ -31,7 +31,7 @@ import { getBattleListOfMain, getMainChapter } from './normalBattleService';
|
||||
import { GuildModel, GuildType } from '../db/Guild';
|
||||
import UserGuild, { UserGuildType } from '../db/UserGuild';
|
||||
import { getAllGuildActivityStatus } from './guildActivity/guildActivityService';
|
||||
import { getAllOnlineRoles, getAllServers, incConnectorNum } from './redisService';
|
||||
import { getAllOnlineRoles, getAllServers, incConnectorNum, redisClient } from './redisService';
|
||||
import Item, { ItemModel } from '../db/Item';
|
||||
import { PvpDefenseModel } from '../db/PvpDefense';
|
||||
import { getDonation } from './donateService';
|
||||
@@ -47,7 +47,7 @@ import { getSurvey } from './gmService';
|
||||
import { ComBattleTeamModel } from '../db/ComBattleTeam';
|
||||
import { INFO_WINDOW } from '../pubUtils/dicParam';
|
||||
import { getLadderData } from './ladderService';
|
||||
import { dispatch } from '../util/dispatcher';
|
||||
import { dispatch } from '../pubUtils/dispatcher';
|
||||
import { PvpDataReturn } from '../domain/battleField/pvp';
|
||||
import { getHiddenData } from './dataService';
|
||||
import { ArtifactModel } from '../db/Artifact';
|
||||
@@ -349,12 +349,12 @@ export async function kickUser(app: Application, uid: string, message = STATUS.L
|
||||
|
||||
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');
|
||||
let activity = await _assignServer(roleId, 'activity');
|
||||
let battle = await _assignServer(roleId, 'battle');
|
||||
let chat = await _assignServer(roleId, 'chat');
|
||||
let guild = await _assignServer(roleId, 'guild');
|
||||
let role = await _assignServer(roleId, 'role');
|
||||
let order = await _assignServer(roleId, 'order');
|
||||
if(activity) {
|
||||
session.set('activityServer', activity);
|
||||
session.push('activityServer', () => { });
|
||||
@@ -384,7 +384,7 @@ export async function assignServer(roleId: string, session: FrontendOrBackendSes
|
||||
}
|
||||
}
|
||||
|
||||
function _assignServer(roleId: string, serverType: string) {
|
||||
async 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 = '';
|
||||
@@ -394,7 +394,7 @@ function _assignServer(roleId: string, serverType: string) {
|
||||
id = server?.id;
|
||||
}
|
||||
if(!id) {
|
||||
id = dispatch(roleId, servers, serverType)?.id;
|
||||
id = (await dispatch(redisClient(), roleId, servers, serverType))?.id;
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import { GUILD_ACTIVITY_STATUS, GET_POINT_WAYS, GUILD_ACTIVITY_TYPE, REDIS_KEY,
|
||||
import { Record, UserGuildActivityRecModel } from "../../db/UserGuildActivityRec";
|
||||
import { GateMembersRec, CityParam, WoodenHorse, RaceActivityRankParam } from "../../domain/battleField/guildActivity";
|
||||
import { DicGuildActivity } from "../../pubUtils/dictionary/DicGuildActivity";
|
||||
import { getAllServers, getRoleOnlineInfo } from "../redisService";
|
||||
import { getAllServers, getRoleOnlineInfo, redisClient } from "../redisService";
|
||||
import { SimpleGuildRankParam, SimpleRoleRankParam, GuildRankInfo, RoleRankInfo } from "../../domain/rank";
|
||||
import { pinus } from "pinus";
|
||||
import { GuildActivityRecordModel } from "../../db/GuildActivityRec";
|
||||
@@ -32,7 +32,7 @@ import { getRandSingleEelm } from "../../pubUtils/util";
|
||||
import { CounterModel } from "../../db/Counter";
|
||||
import { setInterval } from "timers";
|
||||
import { DicRaceActivity } from "../../pubUtils/dictionary/DicRaceActivity";
|
||||
import { dispatch } from "../../util/dispatcher";
|
||||
import { dispatch } from "../../pubUtils/dispatcher";
|
||||
import { GuildModel } from "../../db/Guild";
|
||||
|
||||
let gateActivityObj: GateActivityObject;
|
||||
@@ -897,7 +897,7 @@ export async function resetJoinWoodenHorse() {
|
||||
let guild = pinus.app.getServersByType('guild');
|
||||
let recs = await GuildActivityRecordModel.findRecs(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, joinIndex);
|
||||
for(let { serverId, guildCode, joinMember } of recs) {
|
||||
let server = dispatch(`${serverId}`, guild);
|
||||
let server = await dispatch(redisClient(), `${serverId}`, guild, 'guild');
|
||||
if(server.id != pinus.app.getServerId()) continue;
|
||||
|
||||
for(let { roleId, roleName, job, code} of joinMember) {
|
||||
@@ -954,7 +954,7 @@ export async function leaveRaceActivity(serverId: number, guildCode: string, rol
|
||||
|
||||
export async function leaveRaceActivityToRemote(serverId: number, guildCode: string, roleId: string) {
|
||||
let guildServers = pinus.app.getServersByType('guild')||[];
|
||||
let server = dispatch(`${serverId}`, guildServers);
|
||||
let server = await dispatch(redisClient(), `${serverId}`, guildServers, 'guild');
|
||||
if(server) {
|
||||
await pinus.app.rpc.guild.guildActivityRemote.leaveRaceActivity.toServer(server.id, serverId, guildCode, roleId);
|
||||
}
|
||||
@@ -970,7 +970,7 @@ export async function leaveRaceWhenQuitGuild(serverId: number, guildCode: string
|
||||
|
||||
export async function leaveRaceWhenQuitGuildToRemote(serverId: number, guildCode: string, roleId: string) {
|
||||
let guildServers = pinus.app.getServersByType('guild')||[];
|
||||
let server = dispatch(`${serverId}`, guildServers);
|
||||
let server = await dispatch(redisClient(), `${serverId}`, guildServers, 'guild');
|
||||
if(server) {
|
||||
await pinus.app.rpc.guild.guildActivityRemote.leaveRaceWhenQuitGuild.toServer(server.id, serverId, guildCode, roleId);
|
||||
}
|
||||
@@ -986,7 +986,7 @@ export async function leaveRaceWhenDismiss(guildCode: string, serverId: number)
|
||||
|
||||
export async function leaveRaceWhenDismissToRemote(serverId: number, guildCode: string) {
|
||||
let guildServers = pinus.app.getServersByType('guild')||[];
|
||||
let server = dispatch(`${serverId}`, guildServers);
|
||||
let server = await dispatch(redisClient(), `${serverId}`, guildServers, 'guild');
|
||||
if(server) {
|
||||
await pinus.app.rpc.guild.guildActivityRemote.leaveRaceWhenDismiss.toServer(server.id, guildCode, serverId);
|
||||
}
|
||||
|
||||
@@ -4,8 +4,9 @@ import { pinus } from "pinus";
|
||||
import { GVG_CATAPULT, GVG_PERIOD } from "../../consts";
|
||||
import { GVGTeamModel, GVGTeamType } from "../../db/GVGTeam";
|
||||
import { GVGTeamMem } from "../../domain/battleField/gvgBattle";
|
||||
import { dispatch } from "../../util/dispatcher";
|
||||
import { dispatch } from "../../pubUtils/dispatcher";
|
||||
import { getGVGPeriodData } from "./gvgService";
|
||||
import { redisClient } from "../redisService";
|
||||
|
||||
// 积分点占领情况,groupId_serverType_cityId -> GVGBattleData
|
||||
const gvgBattleMap: Map<string, GVGBattleData> = new Map();
|
||||
@@ -244,7 +245,7 @@ export async function initTeamToMem() {
|
||||
let teams = await GVGTeamModel.findByConfigId(configId);
|
||||
for(let team of teams) {
|
||||
if(team.isBroken) continue;
|
||||
if(dispatch(team.cityId.toString(), servers)?.id == sid) {
|
||||
if((await dispatch(redisClient(), team.cityId.toString(), servers, 'guild'))?.id == sid) {
|
||||
let teamObj = getGVGBattleData(team.groupKey);
|
||||
teamObj.enterCity(team);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import { GVGHeroInfo, PvpEnemies, PvpHeroInfo } from "../../domain/dbGeneral";
|
||||
import { getGroupKey, getGVGConfig, getGVGConfigFromRemote, getGVGPeriodData } from "./gvgService";
|
||||
import { GVGLeaguePrepareModel } from "../../db/GVGLeaguePrepare";
|
||||
import { pinus } from "pinus";
|
||||
import { dispatch } from "../../util/dispatcher";
|
||||
import { dispatch } from "../../pubUtils/dispatcher";
|
||||
import { Rank } from "../rankService";
|
||||
import { KeyNameParam, LeagueRankInfo, myIdInter, RoleRankInfo } from "../../domain/rank";
|
||||
import { findKeys, getAllServerName, redisClient } from "../redisService";
|
||||
@@ -358,7 +358,7 @@ export async function gvgBattleStart() {
|
||||
let { configId } = getGVGConfig();
|
||||
let guardCities = await GVGCityModel.findAllGuardCities(configId);
|
||||
for(let { cityId, groupKey, guardLeague, guardLeagueName } of guardCities) {
|
||||
let sid = dispatch(cityId.toString(), servers)?.id;
|
||||
let sid = (await dispatch(redisClient(), cityId.toString(), servers, 'guild'))?.id;
|
||||
await pinus.app.rpc.guild.guildRemote.initCatapult.toServer(sid, cityId, groupKey, guardLeague, guardLeagueName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,11 @@ import { FrontendOrBackendSession, pinus } from "pinus";
|
||||
import { shouldRefresh, shouldRefreshWeek } from '../pubUtils/util';
|
||||
import { nowSeconds } from "../pubUtils/timeUtil";
|
||||
import { refDailyTask, refDailyTaskBox } from './task/taskService'
|
||||
import { dispatch } from "../util/dispatcher";
|
||||
import { dispatch } from "../pubUtils/dispatcher";
|
||||
import { sendMessageToUserWithSuc } from "./pushService";
|
||||
import { PUSH_ROUTE } from "../consts";
|
||||
import { isDebugTime } from "../pubUtils/sdkUtil";
|
||||
import { redisClient } from "./redisService";
|
||||
|
||||
/**
|
||||
* 刷新
|
||||
@@ -19,7 +20,7 @@ export async function refresh(session: FrontendOrBackendSession) {
|
||||
sendMessageToUserWithSuc(roleId, PUSH_ROUTE.PUSH_CURRENT_TIME, { time: Date.now() }, sid);
|
||||
} else {
|
||||
let guilds = pinus.app.getServersByType('guild');
|
||||
let guild = dispatch(roleId, guilds, 'guild');
|
||||
let guild = await dispatch(redisClient(), roleId, guilds, 'guild');
|
||||
let currentTime = await pinus.app.rpc.guild.guildActivityRemote.getCurrentTime.toServer(guild.id);
|
||||
sendMessageToUserWithSuc(roleId, PUSH_ROUTE.PUSH_CURRENT_TIME, { time: currentTime }, sid);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import { PVPConfigModel, PVPConfigType } from '../db/PvpConfig';
|
||||
import { nowSeconds, getTimeFun, getSeconds } from '../pubUtils/timeUtil';
|
||||
import { getTodayGuildActivity, gameData } from '../pubUtils/data';
|
||||
import { pvpSeasonEnd } from './pvpService';
|
||||
import { getAllOnlineRoles, getAllServers, delGuildActivityRank, getServerCreateTime } from './redisService';
|
||||
import { getAllOnlineRoles, getAllServers, delGuildActivityRank, getServerCreateTime, redisClient } from './redisService';
|
||||
import { GUILD_ACTIVITY_TYPE, REFRESH_TIME, COUNTER, AUCTION_TIME, GM_MAIL_TYPE, SERVER_TIMER, ACTIVITY_TYPE, PUSH_ROUTE, STATUS, LADDER_STATUS, LADDER_SERVER_GAP_TIME, GVG_PERIOD, SDK_PUSH_MSG_TYPE, MAIL_TYPE } from '../consts';
|
||||
import { pinus } from 'pinus';
|
||||
import { settleGuildWeekly } from './guildService';
|
||||
@@ -12,7 +12,7 @@ import { sendMailByContent, SendMailFun, sendMailsByGmMail, } from './mailServic
|
||||
import { sendEndMsgToAllServer, sendGuildActivityStatus, setPreDayActiveData, incCurGuildActivityIndex } from './guildActivity/guildActivityService';
|
||||
import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService';
|
||||
import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
|
||||
import { dispatch } from '../util/dispatcher';
|
||||
import { dispatch } from '../pubUtils/dispatcher';
|
||||
import { initMarquee, setServerMainten } from './gmService';
|
||||
import moment = require('moment');
|
||||
import { reportOneOnline } from './authenticateService';
|
||||
@@ -323,7 +323,7 @@ export async function guildActivityStart(dicGuildActivity?: DicGuildActivity) {
|
||||
// 开始活动
|
||||
let guildServers = pinus.app.getServersByType('guild');
|
||||
for (let serverId of servers) {
|
||||
let sid = dispatch(serverId.toString(), guildServers, 'guild');
|
||||
let sid = await dispatch(redisClient(), serverId.toString(), guildServers, 'guild');
|
||||
await pinus.app.rpc.guild.guildActivityRemote.raceActivityStart.toServer(sid.id, serverId);
|
||||
}
|
||||
|
||||
@@ -414,7 +414,7 @@ export async function raceActivitySeconds() {
|
||||
let servers = await getAllServers(); // 玩家serverId列表
|
||||
let guildServers = pinus.app.getServersByType('guild');
|
||||
for (let serverId of servers) {
|
||||
let sid = dispatch(serverId.toString(), guildServers, 'guild');
|
||||
let sid = await dispatch(redisClient(), serverId.toString(), guildServers, 'guild');
|
||||
await pinus.app.rpc.guild.guildActivityRemote.calWoodenHorseAndSend.toServer(sid.id, serverId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
import * as crc from 'crc';
|
||||
import { pinus } from 'pinus';
|
||||
|
||||
interface ServerInfo {
|
||||
id: string;
|
||||
serverType: string;
|
||||
host: string;
|
||||
port: number;
|
||||
clientHost?: string;
|
||||
clientPort?: number;
|
||||
frontend ?: boolean;
|
||||
|
||||
args ?: string | string[];
|
||||
cpu ?: number;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
export function dispatch(uid: string, connectors: ServerInfo[], serverType: string = '') {
|
||||
let roleRoute = pinus.app.get('roleRoute');
|
||||
if(!roleRoute) {
|
||||
pinus.app.set('roleRoute', new Map<string, Map<string, string>>());
|
||||
roleRoute = pinus.app.get('roleRoute');
|
||||
}
|
||||
|
||||
//测试代码
|
||||
// if (serverType == 'activity') {
|
||||
// if (uid == 'SPDtGqx9Gw') {
|
||||
// if (connectors.length > 1) {
|
||||
// connectors = connectors.filter(obj => { return obj.id != 'activity-server-1' })
|
||||
// }
|
||||
// } else {
|
||||
// connectors = connectors.filter(obj => { return obj.id == 'activity-server-1' })
|
||||
// }
|
||||
// }
|
||||
connectors.sort((a, b) => a.id > b.id? 1: -1);
|
||||
|
||||
if (serverType) {
|
||||
let roleRouteData = roleRoute.get(uid);
|
||||
let serverId = '';
|
||||
if (roleRouteData) {
|
||||
serverId = roleRouteData.get(serverType);
|
||||
if (serverId) {
|
||||
let index = connectors.findIndex(obj => { return obj.id === serverId });
|
||||
if (index != -1) {
|
||||
// console.log('aaaaaaaaa 1', roleRouteData)
|
||||
return connectors[index];
|
||||
}
|
||||
}
|
||||
}
|
||||
let index = Math.abs(crc.crc32(uid)) % connectors.length;
|
||||
if (!roleRouteData) {
|
||||
roleRouteData = new Map<string, string>()
|
||||
}
|
||||
roleRouteData.set(serverType, connectors[index].id);
|
||||
roleRoute.set(uid, roleRouteData)
|
||||
// console.log('aaaaaaaaa 2', roleRouteData)
|
||||
return connectors[index];
|
||||
}
|
||||
pinus.app.set('roleRoute', roleRoute);
|
||||
let index = Math.abs(crc.crc32(uid)) % connectors.length;
|
||||
return connectors[index];
|
||||
}
|
||||
@@ -1,20 +1,21 @@
|
||||
|
||||
import { dispatch } from './dispatcher';
|
||||
import { dispatch } from '../pubUtils/dispatcher';
|
||||
import { Session, Application } from 'pinus';
|
||||
import { redisClient } from '../services/redisService';
|
||||
|
||||
export function chat(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
export async function chat(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
let chatServers = app.getServersByType('chat');
|
||||
|
||||
if (!chatServers || chatServers.length === 0) {
|
||||
cb(new Error('can not find chat servers.'));
|
||||
return;
|
||||
}
|
||||
let id = session.get('chatServer')||dispatch(session.get('roleId'), chatServers, 'chat').id;
|
||||
let id = session.get('chatServer')||(await dispatch(redisClient(), session.get('roleId'), chatServers, 'chat')).id;
|
||||
|
||||
cb(null, id);
|
||||
}
|
||||
|
||||
export function battle(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
export async function battle(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
let battleServers = app.getServersByType('battle');
|
||||
|
||||
if (!battleServers || battleServers.length === 0) {
|
||||
@@ -42,16 +43,16 @@ export function battle(session: Session, msg: any, app: Application, cb: (err: E
|
||||
}
|
||||
|
||||
if(needDispatch) {
|
||||
let id = dispatch(rid, battleServers, 'battle').id;
|
||||
let id = (await dispatch(redisClient(), rid, battleServers, 'battle')).id;
|
||||
cb(null, id);
|
||||
} else {
|
||||
let id = session.get('battleServer')||dispatch(rid, battleServers, 'battle').id;
|
||||
let id = session.get('battleServer')||(await dispatch(redisClient(), rid, battleServers, 'battle')).id;
|
||||
cb(null, id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function guild(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
export async function guild(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
let guildServers = app.getServersByType('guild');
|
||||
|
||||
if (!guildServers || guildServers.length === 0) {
|
||||
@@ -126,25 +127,25 @@ export function guild(session: Session, msg: any, app: Application, cb: (err: Er
|
||||
}
|
||||
|
||||
if(needDispatch) {
|
||||
let id = dispatch(rid, guildServers, 'guild').id;
|
||||
let id = (await dispatch(redisClient(), rid, guildServers, 'guild')).id;
|
||||
cb(null, id);
|
||||
} else {
|
||||
let id = session.get('guildServer')||dispatch(rid, guildServers, 'guild').id;
|
||||
let id = session.get('guildServer')||(await dispatch(redisClient(), rid, guildServers, 'guild')).id;
|
||||
cb(null, id);
|
||||
}
|
||||
}
|
||||
|
||||
export function activity(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
export async function activity(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
let activityServers = app.getServersByType('activity');
|
||||
if (!activityServers || activityServers.length === 0) {
|
||||
cb(new Error('can not find activity servers.'));
|
||||
return;
|
||||
}
|
||||
let id = session.get('activityServer')||dispatch(session.get('roleId'), activityServers, 'activity');
|
||||
let id = session.get('activityServer')||(await dispatch(redisClient(), session.get('roleId'), activityServers, 'activity'));
|
||||
cb(null, id);
|
||||
}
|
||||
|
||||
export function gm(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
export async function gm(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
let gmServers = app.getServersByType('gm');
|
||||
|
||||
if (!gmServers || gmServers.length === 0) {
|
||||
@@ -152,11 +153,11 @@ export function gm(session: Session, msg: any, app: Application, cb: (err: Error
|
||||
return;
|
||||
}
|
||||
|
||||
let res = dispatch(session.get('roleId'), gmServers, 'gm');
|
||||
let res = await dispatch(redisClient(), session.get('roleId'), gmServers, 'gm');
|
||||
cb(null, res.id);
|
||||
}
|
||||
|
||||
export function role(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
export async function role(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
let roleServers = app.getServersByType('role');
|
||||
|
||||
if (!roleServers || roleServers.length === 0) {
|
||||
@@ -164,11 +165,11 @@ export function role(session: Session, msg: any, app: Application, cb: (err: Err
|
||||
return;
|
||||
}
|
||||
|
||||
let id = session.get('roleServer')||dispatch(session.get('roleId'), roleServers).id;
|
||||
let id = session.get('roleServer')||(await dispatch(redisClient(), session.get('roleId'), roleServers)).id;
|
||||
cb(null, id);
|
||||
}
|
||||
|
||||
export function order(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
export async function order(session: Session, msg: any, app: Application, cb: (err: Error, serverId?: string) => void) {
|
||||
let orderServers = app.getServersByType('order');
|
||||
|
||||
if (!orderServers || orderServers.length === 0) {
|
||||
@@ -176,6 +177,6 @@ export function order(session: Session, msg: any, app: Application, cb: (err: Er
|
||||
return;
|
||||
}
|
||||
|
||||
let id = session.get('orderServer')||dispatch(session.get('roleId'), orderServers, 'order').id;
|
||||
let id = session.get('orderServer')||(await dispatch(redisClient(), session.get('roleId'), orderServers, 'order')).id;
|
||||
cb(null, id);
|
||||
}
|
||||
@@ -14,45 +14,19 @@ interface ServerInfo {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
let roleRoute = new Map<string, Map<string, string>>()
|
||||
|
||||
export function dispatch(uid: string, connectors: ServerInfo[], serverType: string = '') {
|
||||
//测试代码
|
||||
// if (serverType == 'activity') {
|
||||
// if (uid == 'SPDtGqx9Gw') {
|
||||
// if (connectors.length > 1) {
|
||||
// connectors = connectors.filter(obj => { return obj.id != 'activity-server-1' })
|
||||
// }
|
||||
// } else {
|
||||
// connectors = connectors.filter(obj => { return obj.id == 'activity-server-1' })
|
||||
// }
|
||||
// }
|
||||
export async function dispatch(redis: any, uid: string, connectors: ServerInfo[], serverType: string = '') {
|
||||
connectors.sort((a, b) => a.id > b.id? 1: -1);
|
||||
|
||||
if (serverType) {
|
||||
let roleRouteData = roleRoute.get(uid);
|
||||
let serverId = '';
|
||||
if (roleRouteData) {
|
||||
serverId = roleRouteData.get(serverType);
|
||||
if (serverId) {
|
||||
let index = connectors.findIndex(obj => { return obj.id === serverId });
|
||||
if (index != -1) {
|
||||
// console.log('aaaaaaaaa 1', roleRouteData)
|
||||
return connectors[index];
|
||||
}
|
||||
}
|
||||
let appid: string = await redis.hgetAsync('roleRoute', `${uid}_${serverType}`);
|
||||
if(!appid) {
|
||||
let index = Math.abs(crc.crc32(uid)) % connectors.length;
|
||||
let connector = connectors[index];
|
||||
appid = connector.id;
|
||||
redis.hsetAsync('roleRoute', `${uid}_${serverType}`, appid);
|
||||
}
|
||||
let index = Math.abs(crc.crc32(uid)) % connectors.length;
|
||||
if (!roleRouteData) {
|
||||
roleRouteData = new Map<string, string>()
|
||||
}
|
||||
roleRouteData.set(serverType, connectors[index].id);
|
||||
roleRoute.set(uid, roleRouteData)
|
||||
// console.log('aaaaaaaaa 2', roleRouteData)
|
||||
return connectors[index];
|
||||
let roleRoute = connectors.find(obj => obj.id == appid);
|
||||
return roleRoute;
|
||||
}
|
||||
let index = Math.abs(crc.crc32(uid)) % connectors.length;
|
||||
return connectors[index];
|
||||
|
||||
@@ -193,7 +193,7 @@ export default class GameController extends Controller {
|
||||
res = randResult.dic;
|
||||
}
|
||||
if(!res) {
|
||||
res = dispatch(userCode, connectors, 'connector');
|
||||
res = await dispatch(ctx.app.context.redisClient, userCode, connectors, 'connector');
|
||||
}
|
||||
let { id, serverType, clientHost, clientPort, num = 0 } = res;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user