✨ feat(gvg): 添加城池排行榜定时推送
This commit is contained in:
@@ -219,6 +219,8 @@ async function treatStartLogic(app: _pinus.Application) {
|
||||
redisService.clearComBtlQueue();
|
||||
redisService.clearChannelServers();
|
||||
redisService.clearGVGHistoryAreas();
|
||||
redisService.clearGVGHistoryAreaTeam();
|
||||
redisService.clearGVGHistoryCityTeam();
|
||||
updateTeamStatus(COM_TEAM_STATUS.DEFAULT, COM_TEAM_STATUS.LOOSE);
|
||||
updateTeamStatus(COM_TEAM_STATUS.FIGHTING, COM_TEAM_STATUS.LOOSE);
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import { COM_BTL_QUALITY, HERO_SELECT, DEBUG_MAGIC_WORD, REDIS_KEY, TASK_TYPE, E
|
||||
import { nowSeconds, getZeroPoint } from '../../../pubUtils/timeUtil';
|
||||
import { rmRoleFromQueue, roleLeave, getRoleOnlineInfo, roleLogin, getOnlineRoleByUserCode } from '../../../services/redisService';
|
||||
|
||||
import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leaveGroupShopChannel, leaveGuildAuctionChannel, leaveGuildChannel, leaveGVGAreaChannel, leaveGVGAreaTeamChannel, leaveSysChannel, leaveWorldAuctionChannel, leaveWorldChannel } from '../../../services/chatService';
|
||||
import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leaveGroupShopChannel, leaveGuildAuctionChannel, leaveGuildChannel, leaveGVGAreaChannel, leaveGVGAreaTeamChannel, leaveGVGCityTeamChannel, leaveSysChannel, leaveWorldAuctionChannel, leaveWorldChannel } from '../../../services/chatService';
|
||||
import { reportOneOnline, savePlayTime } from '../../../services/authenticateService';
|
||||
import { checkTaskInEntry, } from '../../../services/task/taskService';
|
||||
import { pushData, kickUser, getModuleData, assignServer, leaveServer } from '../../../services/connectorService';
|
||||
@@ -222,6 +222,8 @@ export class EntryHandler {
|
||||
await leaveGroupShopChannel(roleId, sid);
|
||||
await leaveGVGAreaChannel(roleId, sid);
|
||||
await leaveGVGAreaTeamChannel(roleId, sid);
|
||||
await leaveGVGCityTeamChannel(roleId, sid);
|
||||
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ import { STATUS } from '../../../consts';
|
||||
import { GVGHeroInfo } from '../../../domain/dbGeneral';
|
||||
import { ArtifactModel } from '../../../db/Artifact';
|
||||
import { getHeroesAttributes } from '../../../services/playerCeService';
|
||||
import { addRoleToAreaChannel, addRoleToAreaTeamChannel, leaveGVGAreaChannel, leaveGVGAreaTeamChannel } from '../../../services/chatChannelService';
|
||||
import { addRoleToAreaChannel, addRoleToAreaTeamChannel, addRoleToGVGCityChannel, leaveGVGAreaChannel, leaveGVGAreaTeamChannel, leaveGVGCityTeamChannel } from '../../../services/chatChannelService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -150,6 +150,7 @@ export class GVGBattleHandler {
|
||||
async enterCity(msg: { cityId: number }, session: BackendSession) {
|
||||
|
||||
const roleId = session.get('roleId');
|
||||
const sid = session.get('sid');
|
||||
const roleName = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
const guildCode = session.get('guildCode');
|
||||
@@ -201,6 +202,8 @@ export class GVGBattleHandler {
|
||||
const recs = await GVGRecModel.findByCity(cityId, configId);
|
||||
const teamResult = teams.map(team => new MyTeamInfo(team));
|
||||
const { ranks, myRank } = await getBattleRanks(configId, groupId, serverType, cityId, myLeague);
|
||||
await leaveGVGCityTeamChannel(roleId, sid);
|
||||
await addRoleToGVGCityChannel(roleId, groupId, serverType, cityId, sid);
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
cityId,
|
||||
@@ -248,6 +251,7 @@ export class GVGBattleHandler {
|
||||
|
||||
await leaveGVGAreaChannel(roleId, sid);
|
||||
await leaveGVGAreaTeamChannel(roleId, sid);
|
||||
await leaveGVGCityTeamChannel(roleId, sid);
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
import { addGVGHistoryAreas, addGVGHistoryAreaTeam, addRedisChannel, getGVGHistoryAreas, getGVGHistoryAreaTeam, redisChannelServer } from './redisService';
|
||||
import { addGVGHistoryAreas, addGVGHistoryAreaTeam, addGVGHistoryCityTeam, addRedisChannel, delGVGHistoryAreas, delGVGHistoryAreaTeam, delGVGHistoryCityTeam, getGVGHistoryAreas, getGVGHistoryAreaTeam, getGVGHistoryCityTeam, redisChannelServer } from './redisService';
|
||||
import { groupRoomId } from './chatService';
|
||||
import { pinus } from 'pinus';
|
||||
import { crc32 } from 'crc';
|
||||
@@ -75,6 +75,11 @@ export async function addRoleToAreaTeamChannel(roleId: string, groupId: number,
|
||||
await addGVGHistoryAreaTeam(roleId, groupId, serverType, areaId);
|
||||
}
|
||||
|
||||
export async function addRoleToGVGCityChannel(roleId: string, groupId: number, serverType: number, cityId: number, sid: string) {
|
||||
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${cityId}`);
|
||||
await addRoleToChannel(roomId, roleId, sid);
|
||||
await addGVGHistoryCityTeam(roleId, groupId, serverType, cityId);
|
||||
}
|
||||
async function leaveChannel(roomId: string, roleId: string, sid: string) {
|
||||
const channelSid = await channelServer(roomId);
|
||||
await pinus.app.rpc.chat.chatRemote.leaveChannel.toServer(channelSid, roomId, roleId, sid);
|
||||
@@ -122,6 +127,7 @@ export async function leaveGVGAreaChannel(roleId: string, sid: string) {
|
||||
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, key);
|
||||
await leaveChannel(roomId, roleId, sid);
|
||||
}
|
||||
await delGVGHistoryAreas(roleId);
|
||||
}
|
||||
|
||||
export async function leaveGVGAreaTeamChannel(roleId: string, sid: string) {
|
||||
@@ -130,6 +136,16 @@ export async function leaveGVGAreaTeamChannel(roleId: string, sid: string) {
|
||||
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, channelName);
|
||||
await leaveChannel(roomId, roleId, sid);
|
||||
}
|
||||
await delGVGHistoryAreaTeam(roleId);
|
||||
}
|
||||
|
||||
export async function leaveGVGCityTeamChannel(roleId: string, sid: string) {
|
||||
let channelName = await getGVGHistoryCityTeam(roleId);
|
||||
if(channelName) {
|
||||
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, channelName);
|
||||
await leaveChannel(roomId, roleId, sid);
|
||||
}
|
||||
await delGVGHistoryCityTeam(roleId);
|
||||
}
|
||||
|
||||
export async function getWorldChannelSid(serverId: number) {
|
||||
@@ -180,6 +196,12 @@ export async function getGVGAreaTeamChannelSid(groupId: number, serverType: numb
|
||||
return channelSid;
|
||||
}
|
||||
|
||||
export async function getGVGCityTeamChannelSid(groupId: number, serverType: number, cityId: number) {
|
||||
const roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${cityId}`);
|
||||
const channelSid = await channelServer(roomId);
|
||||
return channelSid;
|
||||
}
|
||||
|
||||
async function delChannel(roomId: string) {
|
||||
const channelSid = await channelServer(roomId);
|
||||
await pinus.app.rpc.chat.chatRemote.deleteChannel.toServer(channelSid, roomId);
|
||||
|
||||
@@ -7,8 +7,7 @@ import { GVG_AREA_TYPE, GVG_BATTLE_RANK_TYPE, GVG_TECH_TYPE, MAIL_TYPE, PUSH_ROU
|
||||
import { nowSeconds } from "../../pubUtils/timeUtil";
|
||||
import { DicGVGAreaPoint } from "../../pubUtils/dictionary/DicGVGAreaPoint";
|
||||
import { getGVGBattleData, getGVGBattleMap } from "./gvgBattleMemory";
|
||||
import { GVGAreaInMap, GVGCityMapInfo, GVGTeamInList, GVGTeamInListOnPoint, GVGTeamSpineInMap } from "../../domain/gvgField/returnData";
|
||||
import { pick } from "underscore";
|
||||
import { GVGCityMapInfo, GVGTeamInList, GVGTeamInListOnPoint, GVGTeamSpineInMap } from "../../domain/gvgField/returnData";
|
||||
import { GVG } from "../../pubUtils/dicParam";
|
||||
import { GVGHeroInfo, PvpEnemies, PvpHeroInfo } from "../../domain/dbGeneral";
|
||||
import { getGVGConfig } from "./gvgService";
|
||||
@@ -18,7 +17,7 @@ import { dispatch } from "../../pubUtils/dispatcher";
|
||||
import { Rank } from "../rankService";
|
||||
import { LeagueRankInfo, RoleRankInfo } from "../../domain/rank";
|
||||
import { findKeys, getAllServerName } from "../redisService";
|
||||
import { sendMessageToChannel, sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc } from "../pushService";
|
||||
import { sendMessageToChannel, sendMessageToCityWithSuc, sendMessageToGVGAreaByTeamWithSuc, sendMessageToGVGAreaWithSuc, sendMessageToGVGCityWithSuc } from "../pushService";
|
||||
import { sendMailToLeagueByContent } from "../mailService";
|
||||
|
||||
|
||||
@@ -266,7 +265,9 @@ export async function getBattleRanks(configId: number, groupId: number, serverTy
|
||||
|
||||
// 每5秒一次结算
|
||||
export async function gvgBattleSeconds() {
|
||||
const { configId } = getGVGConfig();
|
||||
const serverNames = await getAllServerName();
|
||||
let keys: { groupId: number, serverType: number, cityId: number }[] = []
|
||||
for(let [_key, teamObj] of getGVGBattleMap()) {
|
||||
// 每5秒给据点上的人加积分
|
||||
let teams = teamObj.findSettledPoint();
|
||||
@@ -281,11 +282,27 @@ export async function gvgBattleSeconds() {
|
||||
let dicArea = gameData.gvgArea.get(areaId);
|
||||
let teams = teamObj.findTeamsByArea(areaId);
|
||||
let result = teams.map(team => new GVGTeamSpineInMap(team, serverNames));
|
||||
sendMessageToGVGAreaWithSuc(teamObj.groupId, teamObj.serverType, areaId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId: dicArea.cityId, areaId, spines: result });
|
||||
await sendMessageToGVGAreaWithSuc(teamObj.groupId, teamObj.serverType, areaId, PUSH_ROUTE.GVG_AREA_SPINE_CHANGE, { cityId: dicArea.cityId, areaId, spines: result });
|
||||
|
||||
let index = keys.findIndex(cur => cur.cityId == dicArea.cityId && cur.groupId == teamObj.groupId && cur.serverType == teamObj.serverType);
|
||||
if(index == -1) keys.push({ groupId: teamObj.groupId, serverType: teamObj.serverType, cityId: dicArea.cityId });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for(let { groupId, serverType, cityId } of keys) {
|
||||
let r = new Rank(REDIS_KEY.GVG_BATTLE_LEAGUE_RANK, { configId, groupId, serverType, cityId });
|
||||
let rawRanks = await r.getRankByRange();
|
||||
let ranks = rawRanks.map(obj => {
|
||||
if(obj instanceof LeagueRankInfo) {
|
||||
return { rank: obj.rank, leagueCode: obj.code, leagueName: obj.name, score: obj.num }
|
||||
}
|
||||
return obj
|
||||
})
|
||||
await sendMessageToGVGCityWithSuc(groupId, serverType, cityId, PUSH_ROUTE.GVG_CITY_RANK_UPDATE, { cityId, ranks });
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export async function gvgBattleEnd() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Channel, pinus } from "pinus";
|
||||
import { CHANNEL_PREFIX, PUSH_BATCH, PUSH_INTERVAL, PUSH_ROUTE, STATUS } from "../consts";
|
||||
import { genCode, resResult } from "../pubUtils/util";
|
||||
import { getCityChannelSid, getGuildChannelSid, getWorldChannelSid, groupRoomId, getGroupShopSid, getGVGAreaChannelSid, getGVGAreaTeamChannelSid } from "./chatService";
|
||||
import { getCityChannelSid, getGuildChannelSid, getWorldChannelSid, groupRoomId, getGroupShopSid, getGVGAreaChannelSid, getGVGAreaTeamChannelSid, getGVGCityTeamChannelSid } from "./chatService";
|
||||
import { getAllOnlineRoles, getAllServers, getRoleOnlineInfo } from "./redisService";
|
||||
import { errlogger, infologger } from '../util/logger';
|
||||
import { MsgEncrypt } from "../pubUtils/sysUtil";
|
||||
@@ -64,13 +64,19 @@ export async function sendMessageToGuild(guildCode: string, route: string, data:
|
||||
export async function sendMessageToGVGAreaWithSuc(groupId: number, serverType: number, areaId: number, route: string, data: any) {
|
||||
let channelSid = await getGVGAreaChannelSid(groupId, serverType, areaId);
|
||||
let roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREAS, `${groupId}_${serverType}_${areaId}`);
|
||||
await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, data);
|
||||
await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, resResult(STATUS.SUCCESS, data));
|
||||
}
|
||||
|
||||
export async function sendMessageToGVGAreaByTeamWithSuc(groupId: number, serverType: number, areaId: number, route: string, data: any) {
|
||||
let channelSid = await getGVGAreaTeamChannelSid(groupId, serverType, areaId);
|
||||
let roomId = groupRoomId(CHANNEL_PREFIX.GVG_AREA_BY_TEAM, `${groupId}_${serverType}_${areaId}`);
|
||||
await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, data);
|
||||
await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, resResult(STATUS.SUCCESS, data));
|
||||
}
|
||||
|
||||
export async function sendMessageToGVGCityWithSuc(groupId: number, serverType: number, cityId: number, route: string, data: any) {
|
||||
let channelSid = await getGVGCityTeamChannelSid(groupId, serverType, cityId);
|
||||
let roomId = groupRoomId(CHANNEL_PREFIX.GVG_CITY, `${groupId}_${serverType}_${cityId}`);
|
||||
await pinus.app.rpc.chat.chatRemote.pushMessage.toServer(channelSid, roomId, route, resResult(STATUS.SUCCESS, data));
|
||||
}
|
||||
|
||||
export async function sendMessageToCityWithSuc(serverId: number, cityId: number, route: string, data: any) {
|
||||
|
||||
@@ -742,3 +742,26 @@ export async function clearGVGHistoryAreaTeam() {
|
||||
const result = await redisClient().delAsync(REDIS_KEY.GVG_HISTORY_AREA_TEAM);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
export async function getGVGHistoryCityTeam(roleId: string) {
|
||||
let channelName = await redisClient().hgetAsync(REDIS_KEY.GVG_HISTORY_CITY, roleId);
|
||||
return channelName
|
||||
}
|
||||
|
||||
export async function addGVGHistoryCityTeam(roleId: string, groupId: number, serverType: number, cityId: number) {
|
||||
const result = await redisClient().hsetAsync(REDIS_KEY.GVG_HISTORY_CITY, roleId, `${groupId}_${serverType}_${cityId}`);
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function delGVGHistoryCityTeam(roleId: string) {
|
||||
const result = await redisClient().hdelAsync(REDIS_KEY.GVG_HISTORY_CITY, roleId);
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function clearGVGHistoryCityTeam() {
|
||||
const result = await redisClient().delAsync(REDIS_KEY.GVG_HISTORY_CITY);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user