From 3b351e03b7fc25e5fd2148dea18a84e2179dc497 Mon Sep 17 00:00:00 2001 From: luying Date: Sat, 6 May 2023 16:23:23 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(=E8=B7=AF=E7=94=B1):=20?= =?UTF-8?q?=E9=83=A8=E5=88=86=E8=B7=AF=E7=94=B1=E4=B8=8D=E7=BC=93=E5=AD=98?= =?UTF-8?q?redis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../comBattle/handler/comBattleHandler.ts | 9 +++++- .../app/services/battle/comBattleService.ts | 5 +++- shared/pubUtils/dispatcher.ts | 28 ++++++++++++++++++- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/game-server/app/servers/comBattle/handler/comBattleHandler.ts b/game-server/app/servers/comBattle/handler/comBattleHandler.ts index d7988fc4d..5e4cc821e 100644 --- a/game-server/app/servers/comBattle/handler/comBattleHandler.ts +++ b/game-server/app/servers/comBattle/handler/comBattleHandler.ts @@ -14,7 +14,7 @@ import { resResult, getRandSingleEelm, cal } from '../../../pubUtils/util'; import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatusHero } from '../../../db/ComBattleTeam'; import { ItemModel, ItemType } from '../../../db/Item'; import { addItems, handleCost } from '../../../services/role/rewardService'; -import { checkRoleInQueue, getServerName, rmCreatedTeamFromRedis, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; +import { checkRoleInQueue, getServerName, redisClient, rmCreatedTeamFromRedis, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; import { getRandBlueprtId, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam, checkTeamStatusAndSend, getComBtlLvByPlayerLv, addToSearchingTeams, getCapFrd, getCapExtraCnt, startTeam } from '../../../services/battle/comBattleService'; import { setAp } from '../../../services/actionPointService'; import { roleLevelup } from '../../../services/normalBattleService'; @@ -31,6 +31,7 @@ import { getFriendRelationType, getRecommendType } from '../../../services/frien import { FriendRelationModel } from '../../../db/FriendRelation'; import { isHeroHidden } from '../../../services/dataService'; import { addComTeam, clearComBtlTimer,deleteComBattle,getComTeamByCode } from '../../../services/memoryCache/comBattleData'; +import { clearComBattleRoute } from '../../../pubUtils/dispatcher'; export default function(app: Application) { return new ComBattleHandler(app); @@ -164,6 +165,9 @@ export class ComBattleHandler { let sid = session.get('sid'); await rmRoleFromQueue(roleId, sid); + let teamCode = session.get('teamCode'); + if(teamCode) clearComBattleRoute(redisClient(), teamCode); + return resResult(STATUS.SUCCESS); } @@ -426,6 +430,7 @@ export class ComBattleHandler { teamStatus.timeout = true; sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_COMPLETE, {teamCode, result: false, timeout: true}); deleteComBattle(teamCode); + clearComBattleRoute(redisClient(), teamCode) } }, COM_BTL_CONST.BTL_TIME_LMT); teamStatus.roleStatus.forEach((st, idx) => { @@ -578,6 +583,7 @@ export class ComBattleHandler { sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_COMPLETE, { teamCode, result: false }); deleteComBattle(teamCode); + clearComBattleRoute(redisClient(), teamCode); return resResult(STATUS.SUCCESS, { teamInfo: pick(team, ['status', 'teamCode', 'roleStatus', 'bossHpArr']) }); } @@ -592,6 +598,7 @@ export class ComBattleHandler { let dbTeam = await ComBattleTeamModel.getTeamByCode(teamCode); if (!dbTeam) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); ({ roleStatus, status, bossHpArr, timeout, endTime } = dbTeam); + clearComBattleRoute(redisClient(), teamCode); } return resResult(STATUS.SUCCESS, { teamInfo: {status, teamCode, roleStatus, bossHpArr, timeout, endTime} }); } diff --git a/game-server/app/services/battle/comBattleService.ts b/game-server/app/services/battle/comBattleService.ts index 1df9887e5..8dbe493c0 100644 --- a/game-server/app/services/battle/comBattleService.ts +++ b/game-server/app/services/battle/comBattleService.ts @@ -12,7 +12,7 @@ import { Channel, ChannelService, pinus } from 'pinus'; import { TREASURE, EXTERIOR, FRIEND } from '../../pubUtils/dicParam'; import { getFriendLvAdd } from '../friendService'; import { getRoleIds } from '../../pubUtils/friendUtil'; -import { getComTeamSidByCode, getCreatedTeamByLv, getTeamSearchByLv, rmCreatedTeamFromRedis, rmRoleFromQueue, setCreatedTeamToRedis } from '../redisService'; +import { getComTeamSidByCode, getCreatedTeamByLv, getTeamSearchByLv, redisClient, rmCreatedTeamFromRedis, rmRoleFromQueue, setCreatedTeamToRedis } from '../redisService'; import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../../pubUtils/data'; import { getZeroPointD, nowSeconds } from '../../pubUtils/timeUtil'; import { addItems, getFriendPointObject, handleCost } from '../role/rewardService'; @@ -22,6 +22,7 @@ import { RewardInter } from '../../pubUtils/interface'; import { FriendPointModel } from '../../db/FriendPoint'; import { isComBattleTimeLimit } from '../../pubUtils/battleUtils'; import { clearComBtlTimer, deleteComBattle, getComTeamByCode, getComTeamTimerByCode, getRobotHurtTimer, setComTeamTimer, setRobotHurtTimerIfNotExist } from '../memoryCache/comBattleData'; +import { clearComBattleRoute } from '../../pubUtils/dispatcher'; /** * 在给定的品质列表中随机返回一定数量的藏宝图Id @@ -284,6 +285,7 @@ export async function handleComBtlProgress(teamStatus: MemComBtlTeam) { sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_COMPLETE, { teamCode, result }); deleteComBattle(teamCode); + clearComBattleRoute(redisClient(), teamCode); } } @@ -394,6 +396,7 @@ export async function dismissTeam(teamStatus: MemComBtlTeam, roleId: string) { let rmSt = deleteComBattle(teamCode); if (!rmSt) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR); + clearComBattleRoute(redisClient(), teamCode); rmCreatedTeamFromRedis(teamCode, teamStatus.lv); sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_DISMISS, { teamCode }); diff --git a/shared/pubUtils/dispatcher.ts b/shared/pubUtils/dispatcher.ts index 1c52cb780..e564b3688 100644 --- a/shared/pubUtils/dispatcher.ts +++ b/shared/pubUtils/dispatcher.ts @@ -17,7 +17,7 @@ interface ServerInfo { export async function dispatch(redis: any, uid: string, connectors: ServerInfo[], serverType: string = '') { connectors.sort((a, b) => a.id > b.id? 1: -1); - if (serverType) { + if (serverType && needRoleRoute(serverType)) { let appid: string = await redis.hgetAsync('roleRoute', `${uid}_${serverType}`); if(!appid) { let index = Math.abs(crc.crc32(uid)) % connectors.length; @@ -30,4 +30,30 @@ export async function dispatch(redis: any, uid: string, connectors: ServerInfo[] } let index = Math.abs(crc.crc32(uid)) % connectors.length; return connectors[index]; +} + +function needRoleRoute(serverType: string) { + switch (serverType) { + case 'connector': + case 'role': + case 'battle': + case 'activity': + case 'order': + case 'gm': + case 'chat': + return false; + case 'comBattle': + case 'guild': + return true; + default: + return true; + } +} + +export async function clearComBattleRoute(redis: any, teamCode: string) { + try { + await redis.hdelAsync('roleRoute', `${teamCode}_comBattle`); + } catch(e) { + console.log(e) + } } \ No newline at end of file