连接推送

This commit is contained in:
luying
2022-03-11 14:38:43 +08:00
parent 30192a2643
commit b040155765
5 changed files with 84 additions and 65 deletions

View File

@@ -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
*

View File

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

View File

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

View File

@@ -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'

View File

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