From b040155765fed3d2007d936fa97fdaf145f0d459 Mon Sep 17 00:00:00 2001 From: luying Date: Fri, 11 Mar 2022 14:38:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servers/connector/handler/entryHandler.ts | 51 +++-------- .../app/servers/role/handler/friendHandler.ts | 1 - game-server/app/services/connectorService.ts | 91 ++++++++++++++----- shared/consts/constModules/selectConst.ts | 2 +- shared/resource/jsons/server_const.json | 4 +- 5 files changed, 84 insertions(+), 65 deletions(-) diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 02757caf3..464fb0b17 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -18,16 +18,11 @@ import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leav import { reportOneOnline, savePlayTime } from '../../../services/authenticateService'; import { checkTaskWithRole, } from '../../../services/taskService'; import { pushData, everydayRefresh, kickUser } from '../../../services/connectorService'; -import { pick } from 'lodash'; // import { setComBtlOnUserLeave } from '../../../services/comBattleService'; import Counter from '../../../db/Counter'; import { getExpByLv } from '../../../pubUtils/data'; import { reportTAUserSet } from '../../../services/sdkService'; import { saveLoginAndOutLog } from '../../../pubUtils/logUtil'; -import { JewelModel } from '../../../db/Jewel'; -import { GuildModel } from '../../../db/Guild'; -import { GuildRecModel } from '../../../db/GuildRec'; -import { ServerRecordModel } from '../../../db/ServerRecords'; export default function (app: Application) { new HandlerService(app, {}); @@ -74,55 +69,36 @@ export class EntryHandler { await this.addSession(role, session); saveLoginAndOutLog(LOG_TYPE.LOGIN, session); - // put user into channel - // console.log(JSON.stringify(self.app.rpc.battle)) - // await self.app.rpc.battle.battleRemote.add.route(session)(role.roleId, self.app.get('serverId'), role.serverId, true); addRoleToSysChannel(role.roleId, self.app.get('serverId'), role.serverId); addRoleToWorldChannel(role.roleId, self.app.get('serverId'), role.serverId); await self.app.rpc.chat.chatRemote.addWorldChannel.route(session)(role.roleId, serverId, self.app.get('serverId')); - let heros = await HeroModel.findByRole(role.roleId, [], HERO_SELECT.ENTRY, true); - let jewels = await JewelModel.findbyRole(role.roleId); - let items = await ItemModel.findbyRole(role.roleId); - let skins = await SkinModel.findbyRole(role.roleId); reportOneOnline(role.roleId, user.userCode, self.app.get('serverId'), true, user); - // let r = new Rank(REDIS_KEY.HERO_NUM_RANK, { serverId }); - // r.setRankWithRoleInfo(role.roleId, role.heroNum, role.heroNumUpdatedAt, role); - // let r2 = new Rank(REDIS_KEY.SUM_CE_RANK, { serverId }); - // r2.setRankWithRoleInfo(role.roleId, role.ce, role.updatedAt.getTime(), role); - // let r3 = new Rank(REDIS_KEY.USER_LV, { serverId }); - // r3.setRankWithRoleInfo(role.roleId, role.lv, role.updatedAt.getTime(), role); - // 任务 checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SUM, role); checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SERIES, role); - // 推送数据 - pushData(role.hasInit, role, session); - - role['heros'] = heros; - role['jewels'] = jewels; - role['consumeGoods'] = items; - role['skins'] = skins; - let ip = session.remoteAddress.ip.replace('::ffff:', ''); - let apJson = await getAp(role.roleId, ip, role.lv); - role['apJson'] = apJson; - - if (!role.showLineup) role.showLineup = role.topLineup.map(cur => cur.hid); - role.heads = role.heads.filter(cur => cur.status); - role.frames = role.frames.filter(cur => cur.status); - role.spines = role.spines.filter(cur => cur.status); if (role.hasGuild) { addRoleToGuildChannel(role.roleId, self.app.get('serverId'), role.guildCode); } let todayZeroPoint = getZeroPoint(); - role['todayZeroPoint'] = todayZeroPoint; console.log('****** entry after', Date.now()); - return resResult(STATUS.SUCCESS, { role: pick(role, ENTERY_ROLE_PICK) }); + return resResult(STATUS.SUCCESS, { todayZeroPoint }); } + async getData(msg: { }, session: FrontendSession) { + let ip = session.get('ip'); + let roleId = session.get('roleId'); + let role = await RoleModel.findByRoleId(roleId, '-_id', true, true); + + // 推送数据 + pushData(role.hasInit, role, session); + + let todayZeroPoint = getZeroPoint(); + return resResult(STATUS.SUCCESS, { todayZeroPoint }); + } async addSession(role: RoleType, session: FrontendSession) { const self = this; @@ -171,7 +147,7 @@ export class EntryHandler { let self = this; let roleId = session.get('roleId'); - let role = await RoleModel.findByRoleId(roleId, null, true, true); + let role = await RoleModel.findByRoleId(roleId, '-_id', true, true); if (!role) { return resResult(STATUS.ROLE_NOT_FOUND); } @@ -187,7 +163,6 @@ export class EntryHandler { return resResult(STATUS.SUCCESS, { todayZeroPoint }); } - /** * User log out handler * diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index fae28ba1d..5a7a3f361 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -731,7 +731,6 @@ export class FriendHandler { if (heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND); let jewels = await JewelModel.findMapbyRoleAndHids(hisRoleId, hids); - console.log(jewels); let list: HeroDetailParam[] = []; for (let hero of heroList) { diff --git a/game-server/app/services/connectorService.ts b/game-server/app/services/connectorService.ts index 94d88a3d4..edd09030b 100644 --- a/game-server/app/services/connectorService.ts +++ b/game-server/app/services/connectorService.ts @@ -8,7 +8,7 @@ import { getCurTask, getPvpTask } from './taskService'; import { RoleType } from '../db/Role'; import { Application, FrontendOrBackendSession, pinus, RpcClient } from 'pinus'; import { resResult } from '../pubUtils/util'; -import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE } from '../consts'; +import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE, HERO_SELECT } from '../consts'; import { getAllShopList } from './shopService'; import { getGeneralRank, getRankFirstReward } from './rankService'; import { getFriendList, getApplyList } from './friendService'; @@ -33,10 +33,47 @@ import { GuildType } from '../db/Guild'; import UserGuild, { UserGuildType } from '../db/UserGuild'; import { setPreDayActiveData, getAllGuildActivityStatus } from './guildActivity/guildActivityService'; import { getAllOnlineRoles } from './redisService'; -import Item from '../db/Item'; +import Item, { ItemModel } from '../db/Item'; import { PvpDefenseModel } from '../db/PvpDefense'; import { getDonation } from './donateService'; import { refChallengeCnt } from './pvpService'; +import { HeroModel } from '../db/Hero'; +import { JewelModel } from '../db/Jewel'; +import { SkinModel } from '../db/Skin'; +import { getAp } from './actionPointService'; + +/** + * init: 初始的时候是否推送 true-推 false-不推 + * refresh: 凌晨5点刷新时是否推送 true-推 false-不推 + * guild: 是否一定有了军团才要推送 true-必须要 false-不用 + */ +const modules = [ + { id: 1, type: 'role', init: true, refresh: true, guild: false }, + { id: 2, type: 'battle', init: true, refresh: false, guild: false }, + { id: 3, type: 'chapter', init: true, refresh: false, guild: false }, + { id: 4, type: 'rank', init: false, refresh: false, guild: false }, + { id: 5, type: 'mail', init: false, refresh: false, guild: false }, + { id: 6, type: 'friend', init: false, refresh: true, guild: false }, + { id: 7, type: 'daily', init: false, refresh: true, guild: false }, + { id: 8, type: 'expedition', init: false, refresh: true, guild: false }, + { id: 9, type: 'tower', init: false, refresh: true, guild: false }, + { id: 10, type: 'comBattle', init: false, refresh: true, guild: false }, + { id: 11, type: 'dungeon', init: false, refresh: true, guild: false }, + { id: 12, type: 'pvp', init: false, refresh: true, guild: false }, + { id: 13, type: 'gacha', init: false, refresh: true, guild: false }, + { id: 14, type: 'school', init: false, refresh: false, guild: false }, + { id: 15, type: 'task', init: false, refresh: true, guild: false }, + { id: 16, type: 'chat', init: false, refresh: false, guild: false }, + { id: 17, type: 'event', init: false, refresh: true, guild: false }, + { id: 18, type: 'guild', init: false, refresh: true, guild: false }, + { id: 19, type: 'auction', init: false, refresh: false, guild: true }, + { id: 20, type: 'train', init: false, refresh: false, guild: true }, + { id: 21, type: 'boss', init: false, refresh: true, guild: true }, + { id: 22, type: 'wishPool', init: false, refresh: true, guild: true }, + { id: 23, type: 'guildActivity', init: false, refresh: true, guild: true }, + { id: 24, type: 'donate', init: false, refresh: true, guild: true }, + { id: 25, type: 'shop', init: false, refresh: true, guild: false }, +] export async function pushData(hasInit: boolean, role: RoleType, session: FrontendOrBackendSession, pushType: 'entry' | 'refresh' = 'entry') { try { @@ -46,29 +83,17 @@ export async function pushData(hasInit: boolean, role: RoleType, session: Fronte pushEntryStart(roleId, sid); // 军团 const guildData = await getGuildEntryData(role, sid, session); - let modules = []; - if(!hasInit) { - modules.push('lv', 'battle'); - } else { - modules.push('lv', 'battle', 'rank', 'mail', 'friend', 'daily', 'expedition', 'tower', 'comBattle', 'dungeon', 'pvp', 'gacha', 'school', 'task', 'chat', 'event', 'guild'); - if (guildData.hasGuild) { - modules.push('auction', 'train', 'boss', 'wishPool', 'guildActivity', 'donate'); + for(let { type, init, refresh, guild } of modules) { + if(!hasInit && !init) continue; + if(pushType == 'refresh' && !refresh) continue; + if(guildData.hasGuild && !guild) continue; + + let data = await getModuleData(type, { role, session }, guildData); + if (data) { + pushEntryData(type, roleId, sid, data); } - modules.push('shop') - } - let notIncludeModule: string[] = []; - if (pushType == 'refresh') { // 每天5点刷新的时候不推送 - notIncludeModule = ['rank', 'mail', 'school', 'auction', 'train', 'chat', 'battle']; } - for (let type of modules) { - if (notIncludeModule.indexOf(type) == -1) { - let data = await getModuleData(type, { role, session }, guildData); - if (data) { - pushEntryData(type, roleId, sid, data); - } - } - } pushEntryEnd(roleId, sid); } catch (e) { console.error(e.stack); @@ -80,8 +105,24 @@ async function getModuleData(type: string, data: { role: RoleType, session: Fron const { roleId, serverId, roleName, guildCode } = role; let { hasGuild, guild, userGuild, guildResult } = guildData; switch (type) { - case 'lv': - return role.lv; + case 'role': + let heros = await HeroModel.findByRole(role.roleId, [], HERO_SELECT.ENTRY, true); + let jewels = await JewelModel.findbyRole(role.roleId); + let items = await ItemModel.findbyRole(role.roleId); + let skins = await SkinModel.findbyRole(role.roleId); + + role['heros'] = heros; + role['jewels'] = jewels; + role['consumeGoods'] = items; + role['skins'] = skins; + let apJson = await getAp(role.roleId, '', role.lv); + role['apJson'] = apJson; + + if (!role.showLineup) role.showLineup = role.topLineup.map(cur => cur.hid); + role.heads = role.heads.filter(cur => cur.status); + role.frames = role.frames.filter(cur => cur.status); + role.spines = role.spines.filter(cur => cur.status); + return role; case 'shop': // 商店 return await getAllShopList(roleId); case 'rank': // 排名 @@ -125,6 +166,7 @@ async function getModuleData(type: string, data: { role: RoleType, session: Fron let trainBoxRewards = await getTrainBoxRewardsResult(guildCode); return { trainInstance, trainBoxRewards } } + break; case 'boss': if (hasGuild) { return await getBossInstanceInfo(userGuild, guild); @@ -138,6 +180,7 @@ async function getModuleData(type: string, data: { role: RoleType, session: Fron let { donateFund, reports, donationLv } = await getDonation(code, guild, serverId); return { receiveBoxs, donateFund, reports, donateCnt: donateCnt || 0, donationLv }; } + break; case 'task': let tasks = await getCurTask(role.roleId, session); let pvpTask = await getPvpTask(role.roleId); diff --git a/shared/consts/constModules/selectConst.ts b/shared/consts/constModules/selectConst.ts index a22af580f..888077c9d 100644 --- a/shared/consts/constModules/selectConst.ts +++ b/shared/consts/constModules/selectConst.ts @@ -18,7 +18,7 @@ export enum ROLE_SELECT { }; export enum HERO_SELECT { - ENTRY = '-attr', + ENTRY = '-_id -attr', HERO_DETAIL = 'roleId roleName hid hName ce isReducedCe lv star colorStar quality job skins attr ePlace skinId', // 排行榜中lineup字段 RANK_LINEUP = 'seqId roleId hid star colorStar lv quality job ce isReducedCe updatedAt skinId' diff --git a/shared/resource/jsons/server_const.json b/shared/resource/jsons/server_const.json index 68be8a065..bcdcf7a1a 100644 --- a/shared/resource/jsons/server_const.json +++ b/shared/resource/jsons/server_const.json @@ -9,6 +9,8 @@ { "id": 2, "desc": "军团聊天", "route": "chat.chatHandler.sendGroupMessage", "param": { "channel": "guild" }, "interval": 1000 }, { "id": 3, "desc": "组团聊天", "route": "battle.comBattleHandler.sendTeamMsg", "param": {}, "interval": 1000 }, { "id": 4, "desc": "私聊", "route": "chat.chatHandler.sendPrivateMessage", "param": {}, "interval": 1000 }, - { "id": 5, "desc": "发送弹幕", "route": "battle.barrageHandler.sendBarrage", "param": {}, "interval": 1000 } + { "id": 5, "desc": "发送弹幕", "route": "battle.barrageHandler.sendBarrage", "param": {}, "interval": 1000 }, + { "id": 6, "desc": "获取信息", "route": "connector.entryHandler.getData", "param": {}, "interval": 1000 }, + { "id": 7, "desc": "刷新信息", "route": "connector.entryHandler.refresh", "param": {}, "interval": 1000 } ] } \ No newline at end of file