连接推送
This commit is contained in:
@@ -18,16 +18,11 @@ import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leav
|
|||||||
import { reportOneOnline, savePlayTime } from '../../../services/authenticateService';
|
import { reportOneOnline, savePlayTime } from '../../../services/authenticateService';
|
||||||
import { checkTaskWithRole, } from '../../../services/taskService';
|
import { checkTaskWithRole, } from '../../../services/taskService';
|
||||||
import { pushData, everydayRefresh, kickUser } from '../../../services/connectorService';
|
import { pushData, everydayRefresh, kickUser } from '../../../services/connectorService';
|
||||||
import { pick } from 'lodash';
|
|
||||||
// import { setComBtlOnUserLeave } from '../../../services/comBattleService';
|
// import { setComBtlOnUserLeave } from '../../../services/comBattleService';
|
||||||
import Counter from '../../../db/Counter';
|
import Counter from '../../../db/Counter';
|
||||||
import { getExpByLv } from '../../../pubUtils/data';
|
import { getExpByLv } from '../../../pubUtils/data';
|
||||||
import { reportTAUserSet } from '../../../services/sdkService';
|
import { reportTAUserSet } from '../../../services/sdkService';
|
||||||
import { saveLoginAndOutLog } from '../../../pubUtils/logUtil';
|
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) {
|
export default function (app: Application) {
|
||||||
new HandlerService(app, {});
|
new HandlerService(app, {});
|
||||||
@@ -74,55 +69,36 @@ export class EntryHandler {
|
|||||||
await this.addSession(role, session);
|
await this.addSession(role, session);
|
||||||
saveLoginAndOutLog(LOG_TYPE.LOGIN, 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);
|
addRoleToSysChannel(role.roleId, self.app.get('serverId'), role.serverId);
|
||||||
addRoleToWorldChannel(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'));
|
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);
|
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_SUM, role);
|
||||||
checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SERIES, 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) {
|
if (role.hasGuild) {
|
||||||
addRoleToGuildChannel(role.roleId, self.app.get('serverId'), role.guildCode);
|
addRoleToGuildChannel(role.roleId, self.app.get('serverId'), role.guildCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
let todayZeroPoint = getZeroPoint();
|
let todayZeroPoint = getZeroPoint();
|
||||||
role['todayZeroPoint'] = todayZeroPoint;
|
|
||||||
|
|
||||||
console.log('****** entry after', Date.now());
|
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) {
|
async addSession(role: RoleType, session: FrontendSession) {
|
||||||
const self = this;
|
const self = this;
|
||||||
@@ -171,7 +147,7 @@ export class EntryHandler {
|
|||||||
let self = this;
|
let self = this;
|
||||||
let roleId = session.get('roleId');
|
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) {
|
if (!role) {
|
||||||
return resResult(STATUS.ROLE_NOT_FOUND);
|
return resResult(STATUS.ROLE_NOT_FOUND);
|
||||||
}
|
}
|
||||||
@@ -187,7 +163,6 @@ export class EntryHandler {
|
|||||||
return resResult(STATUS.SUCCESS, { todayZeroPoint });
|
return resResult(STATUS.SUCCESS, { todayZeroPoint });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User log out handler
|
* User log out handler
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -731,7 +731,6 @@ export class FriendHandler {
|
|||||||
if (heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND);
|
if (heroList.length <= 0) return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
|
||||||
let jewels = await JewelModel.findMapbyRoleAndHids(hisRoleId, hids);
|
let jewels = await JewelModel.findMapbyRoleAndHids(hisRoleId, hids);
|
||||||
console.log(jewels);
|
|
||||||
|
|
||||||
let list: HeroDetailParam[] = [];
|
let list: HeroDetailParam[] = [];
|
||||||
for (let hero of heroList) {
|
for (let hero of heroList) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { getCurTask, getPvpTask } from './taskService';
|
|||||||
import { RoleType } from '../db/Role';
|
import { RoleType } from '../db/Role';
|
||||||
import { Application, FrontendOrBackendSession, pinus, RpcClient } from 'pinus';
|
import { Application, FrontendOrBackendSession, pinus, RpcClient } from 'pinus';
|
||||||
import { resResult } from '../pubUtils/util';
|
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 { getAllShopList } from './shopService';
|
||||||
import { getGeneralRank, getRankFirstReward } from './rankService';
|
import { getGeneralRank, getRankFirstReward } from './rankService';
|
||||||
import { getFriendList, getApplyList } from './friendService';
|
import { getFriendList, getApplyList } from './friendService';
|
||||||
@@ -33,10 +33,47 @@ import { GuildType } from '../db/Guild';
|
|||||||
import UserGuild, { UserGuildType } from '../db/UserGuild';
|
import UserGuild, { UserGuildType } from '../db/UserGuild';
|
||||||
import { setPreDayActiveData, getAllGuildActivityStatus } from './guildActivity/guildActivityService';
|
import { setPreDayActiveData, getAllGuildActivityStatus } from './guildActivity/guildActivityService';
|
||||||
import { getAllOnlineRoles } from './redisService';
|
import { getAllOnlineRoles } from './redisService';
|
||||||
import Item from '../db/Item';
|
import Item, { ItemModel } from '../db/Item';
|
||||||
import { PvpDefenseModel } from '../db/PvpDefense';
|
import { PvpDefenseModel } from '../db/PvpDefense';
|
||||||
import { getDonation } from './donateService';
|
import { getDonation } from './donateService';
|
||||||
import { refChallengeCnt } from './pvpService';
|
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') {
|
export async function pushData(hasInit: boolean, role: RoleType, session: FrontendOrBackendSession, pushType: 'entry' | 'refresh' = 'entry') {
|
||||||
try {
|
try {
|
||||||
@@ -46,29 +83,17 @@ export async function pushData(hasInit: boolean, role: RoleType, session: Fronte
|
|||||||
pushEntryStart(roleId, sid);
|
pushEntryStart(roleId, sid);
|
||||||
// 军团
|
// 军团
|
||||||
const guildData = await getGuildEntryData(role, sid, session);
|
const guildData = await getGuildEntryData(role, sid, session);
|
||||||
let modules = [];
|
for(let { type, init, refresh, guild } of modules) {
|
||||||
if(!hasInit) {
|
if(!hasInit && !init) continue;
|
||||||
modules.push('lv', 'battle');
|
if(pushType == 'refresh' && !refresh) continue;
|
||||||
} else {
|
if(guildData.hasGuild && !guild) continue;
|
||||||
modules.push('lv', 'battle', 'rank', 'mail', 'friend', 'daily', 'expedition', 'tower', 'comBattle', 'dungeon', 'pvp', 'gacha', 'school', 'task', 'chat', 'event', 'guild');
|
|
||||||
if (guildData.hasGuild) {
|
let data = await getModuleData(type, { role, session }, guildData);
|
||||||
modules.push('auction', 'train', 'boss', 'wishPool', 'guildActivity', 'donate');
|
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);
|
pushEntryEnd(roleId, sid);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e.stack);
|
console.error(e.stack);
|
||||||
@@ -80,8 +105,24 @@ async function getModuleData(type: string, data: { role: RoleType, session: Fron
|
|||||||
const { roleId, serverId, roleName, guildCode } = role;
|
const { roleId, serverId, roleName, guildCode } = role;
|
||||||
let { hasGuild, guild, userGuild, guildResult } = guildData;
|
let { hasGuild, guild, userGuild, guildResult } = guildData;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'lv':
|
case 'role':
|
||||||
return role.lv;
|
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': // 商店
|
case 'shop': // 商店
|
||||||
return await getAllShopList(roleId);
|
return await getAllShopList(roleId);
|
||||||
case 'rank': // 排名
|
case 'rank': // 排名
|
||||||
@@ -125,6 +166,7 @@ async function getModuleData(type: string, data: { role: RoleType, session: Fron
|
|||||||
let trainBoxRewards = await getTrainBoxRewardsResult(guildCode);
|
let trainBoxRewards = await getTrainBoxRewardsResult(guildCode);
|
||||||
return { trainInstance, trainBoxRewards }
|
return { trainInstance, trainBoxRewards }
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case 'boss':
|
case 'boss':
|
||||||
if (hasGuild) {
|
if (hasGuild) {
|
||||||
return await getBossInstanceInfo(userGuild, guild);
|
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);
|
let { donateFund, reports, donationLv } = await getDonation(code, guild, serverId);
|
||||||
return { receiveBoxs, donateFund, reports, donateCnt: donateCnt || 0, donationLv };
|
return { receiveBoxs, donateFund, reports, donateCnt: donateCnt || 0, donationLv };
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case 'task':
|
case 'task':
|
||||||
let tasks = await getCurTask(role.roleId, session);
|
let tasks = await getCurTask(role.roleId, session);
|
||||||
let pvpTask = await getPvpTask(role.roleId);
|
let pvpTask = await getPvpTask(role.roleId);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export enum ROLE_SELECT {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export enum HERO_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',
|
HERO_DETAIL = 'roleId roleName hid hName ce isReducedCe lv star colorStar quality job skins attr ePlace skinId',
|
||||||
// 排行榜中lineup字段
|
// 排行榜中lineup字段
|
||||||
RANK_LINEUP = 'seqId roleId hid star colorStar lv quality job ce isReducedCe updatedAt skinId'
|
RANK_LINEUP = 'seqId roleId hid star colorStar lv quality job ce isReducedCe updatedAt skinId'
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
{ "id": 2, "desc": "军团聊天", "route": "chat.chatHandler.sendGroupMessage", "param": { "channel": "guild" }, "interval": 1000 },
|
{ "id": 2, "desc": "军团聊天", "route": "chat.chatHandler.sendGroupMessage", "param": { "channel": "guild" }, "interval": 1000 },
|
||||||
{ "id": 3, "desc": "组团聊天", "route": "battle.comBattleHandler.sendTeamMsg", "param": {}, "interval": 1000 },
|
{ "id": 3, "desc": "组团聊天", "route": "battle.comBattleHandler.sendTeamMsg", "param": {}, "interval": 1000 },
|
||||||
{ "id": 4, "desc": "私聊", "route": "chat.chatHandler.sendPrivateMessage", "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 }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user