feat(服务器): 更新维护逻辑

This commit is contained in:
luying
2023-05-06 11:44:05 +08:00
parent a651254821
commit f47d2d131f
24 changed files with 183 additions and 89 deletions
+2 -2
View File
@@ -5,9 +5,9 @@ import { getMails } from './mailService';
import { recentGuildMsgs, recentLeagueMsgs, recentPrivateChatInfos, recentServerGroupMsgs, recentSysMsgs, recentWorldMsgs } from './chatService';
import { getCurTask, getPvpTask } from './task/taskService';
import { RoleType } from '../db/Role';
import { RoleModel, RoleType } from '../db/Role';
import { Application, FrontendOrBackendSession, pinus, RpcClient } from 'pinus';
import { getRandEelmWithWeight, resResult } from '../pubUtils/util';
import { compareVersion, getRandEelmWithWeight, resResult } from '../pubUtils/util';
import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE, HERO_SELECT, ENTERY_ROLE_PICK, JEWEL_SELECT, ITEM_SELECT, SKIN_SELECT, PUSH_ROUTE, ARTIFACT_SELECT, ACTIVITYITEM_SELECT, SNS_LINK_TYPE } from '../consts';
import { getAllShopList } from './shopService';
import { getGeneralRank, getRankFirstReward } from './rankService';
+3 -2
View File
@@ -159,14 +159,15 @@ export async function sendOpenServerMail(type: 'openMail'|'circleMail', mail: St
return true;
}
export function setServerMainten(serverIds: number[], startTime: number, endTime: number) {
export function setServerMainten(serverIds: number[], startTime: number, endTime: number, version: string) {
let maintenServers = pinus.app.get('maintenServers')||new Map();
for(let id of serverIds) {
if(!maintenServers.has(id)) {
maintenServers.set(id, { startTime, endTime });
maintenServers.set(id, { startTime, endTime, version });
} else {
maintenServers.get(id).startTime = startTime;
maintenServers.get(id).endTime = endTime;
maintenServers.get(id).version = version;
}
}
pinus.app.set('maintenServers', maintenServers);
+11 -8
View File
@@ -1,5 +1,5 @@
import { Channel, pinus } from 'pinus';
import { getRandValueByMinMax, getRandEelm, decodeIdCntArrayStr } from '../pubUtils/util';
import { getRandValueByMinMax, getRandEelm, decodeIdCntArrayStr, compareVersion } from '../pubUtils/util';
import { DEFAULT_HEROES, LINEUP_NUM, ROLE_SELECT, TALENT_RELATION_TYPE, TERAPH_RANDOM, SYSTEM_OPEN_ID, GuideUnloadNum, CHECK_HERO_CONSUME, ABI_STAGE } from "../consts";
import { DicTeraph } from '../pubUtils/dictionary/DicTeraph';
import { Teraph, RoleModel, RoleType, RoleUpdate } from '../db/Role';
@@ -17,6 +17,7 @@ import IP2Region from "ip2region";
import { getServerCreateTime } from './redisService';
import { checkWhiteList } from '../pubUtils/sysUtil';
import { nowSeconds } from '../pubUtils/timeUtil';
import { ServerlistModel } from '../db/Serverlist';
const query = new IP2Region({ disableIpv6: true });
@@ -305,13 +306,15 @@ export async function getIpLocation(ip: string) {
}
}
// 服务器是否开启
export async function checkServerIsOpen(serverId: number, ip: string, uid: number) {
let isWhiteList = await checkWhiteList(pinus.app.get('env'), ip, uid);
if(isWhiteList) return true;
let serverTime = await getServerCreateTime(serverId);
return serverTime <= nowSeconds();
// 玩家是否是新玩家
export async function checkIsNewUser(version: string, minVersion: string, uid: number, latestServerUniqId: number) {
let versionFlag = compareVersion(version, minVersion||'0.0.0.0');
if(versionFlag >= 0) {
let hasRole = await RoleModel.checkHasRole(uid, latestServerUniqId);
return !hasRole
} else {
return true;
}
}
export function calStarUpConsume(hero: HeroType) {
+1 -1
View File
@@ -143,7 +143,7 @@ export async function autoCreateServerWhenRoleInit(serverId: number) {
return errlogger.error('create new server region not found');
}
if(region.stategy && region.stategy.type == 2 && region.latestServerUniqId == server.id && server.playerCnt >= region.stategy.maxPlayerCnt) {
if(region.stategy && region.stategy.isOpen && region.stategy.type == 2 && region.latestServerUniqId == server.id && server.playerCnt >= region.stategy.maxPlayerCnt) {
let params = new CreateServerParam();
params.setByRegionStategy(region, nowSeconds())
await createNewServer(region, server.serverId + 1, params);
+9 -9
View File
@@ -571,7 +571,7 @@ export async function initMaintenanaceInOtherServers() {
for(let server of servers) {
let { id, maintenance } = server;
if(maintenance && maintenance.isOpen) {
setServerMainten([id], maintenance.startTime, maintenance.endTime)
setServerMainten([id], maintenance.startTime, maintenance.endTime, maintenance.version)
}
}
}
@@ -641,14 +641,14 @@ async function startMaintenanceSchedule(batchCode: string) {
// 更新connectorRemote里面的维护服务器
console.log('******** startMaintenanceSchedule', batchCode, serverIds, maintenance.startTime, maintenance.endTime)
pinus.app.rpc.connector.connectorRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime);
pinus.app.rpc.activity.activityRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime);
pinus.app.rpc.battle.battleRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime);
pinus.app.rpc.comBattle.comBattleRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime);
pinus.app.rpc.chat.chatRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime);
pinus.app.rpc.guild.guildRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime);
pinus.app.rpc.order.orderRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime);
pinus.app.rpc.role.roleRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime);
pinus.app.rpc.connector.connectorRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime, maintenance.version);
pinus.app.rpc.activity.activityRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime, maintenance.version);
pinus.app.rpc.battle.battleRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime, maintenance.version);
pinus.app.rpc.comBattle.comBattleRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime, maintenance.version);
pinus.app.rpc.chat.chatRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime, maintenance.version);
pinus.app.rpc.guild.guildRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime, maintenance.version);
pinus.app.rpc.order.orderRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime, maintenance.version);
pinus.app.rpc.role.roleRemote.setServerMainten.broadcast(serverIds, maintenance.startTime, maintenance.endTime, maintenance.version);
// 数数flush
pinus.app.rpc.activity.activityRemote.taflush.broadcast();
pinus.app.rpc.battle.battleRemote.taflush.broadcast();