后台:服务器维护

This commit is contained in:
luying
2021-12-08 10:25:21 +08:00
parent 103314a8bf
commit 22f8d3c438
29 changed files with 512 additions and 343 deletions
@@ -3,6 +3,7 @@ import { ActivityModel, ActivityModelType } from '../../../db/Activity';
import { ServerlistModel } from '../../../db/Serverlist';
import { reloadResources } from '../../../pubUtils/data';
import { _getActivitiesByType, _getActivityById, _getActivities } from '../../../services/activity/activityService';
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -30,8 +31,8 @@ export class ActivityRemote {
}
public async loadActivities() {
let servers = await ServerlistModel.getAllServerList();
for(let { serverId, activityGroupId } of servers) {
let servers = await ServerlistModel.findByEnv(this.app.get('env'));
for(let { id: serverId, activityGroupId } of servers) {
for(let groupId of activityGroupId) {
if(!this.groupToServer.has(groupId)) {
this.groupToServer.set(groupId, []);
@@ -116,4 +117,16 @@ export class ActivityRemote {
public getActivities() {
return _getActivities();
}
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
setServerMainten(serverIds, startTime, endTime);
}
public stopServerMainten(serverIds: number[]) {
stopServerMainten(serverIds);
}
public getServerMainten(serverId: number) {
return getServerMainten(serverId);
}
}
@@ -1,6 +1,7 @@
import { Application, ChannelService, FrontendSession, RemoterClass, HandlerService, } from 'pinus';
import { PVPConfigType } from '../../../db/SystemConfig';
import { reloadResources } from '../../../pubUtils/data';
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -87,4 +88,16 @@ export class BattleRemote {
this.app.set('pvpSeasonEndTime', pvpConfig.seasonEndTime);
}
}
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
setServerMainten(serverIds, startTime, endTime);
}
public stopServerMainten(serverIds: number[]) {
stopServerMainten(serverIds);
}
public getServerMainten(serverId: number) {
return getServerMainten(serverId);
}
}
@@ -13,6 +13,7 @@ import { MailParam } from '../../../domain/roleField/mail';
import { RankFirstType } from '../../../db/RankFirst';
import { LotType } from '../../../db/Lot';
import { _checkFilterWords, getTire } from '../../../services/sdkService';
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -289,4 +290,16 @@ export class ChatRemote {
public async checkFilterWords(word: string) {
return await _checkFilterWords(word);
}
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
setServerMainten(serverIds, startTime, endTime);
}
public stopServerMainten(serverIds: number[]) {
stopServerMainten(serverIds);
}
public getServerMainten(serverId: number) {
return getServerMainten(serverId);
}
}
@@ -6,6 +6,8 @@ import { resResult, checkWhiteListWithUid, genCode } from "../../../pubUtils/uti
import { BLOCK_TYPE, CHANNEL_PREFIX, MSG_TYPE, STATUS } from "../../../consts";
import { UserModel } from "../../../db/User";
import { SERVER_DEBUG_MODE } from "../../../pubUtils/dicParam";
import { nowSeconds } from "../../../pubUtils/timeUtil";
import { getServerMainten } from "../../../services/gmService";
export function globalFilter(app: Application) {
return new Filter(app);
}
@@ -37,13 +39,17 @@ Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, se
session.push('teamCode', () => {});
const maintenServers = this.app.get('maintenServers');
if(maintenServers && maintenServers.indexOf(serverId) != -1) { // 该服务器维护
let isWhiteList = await checkWhiteListWithUid(uid);
if(isWhiteList) return next(null);
pinus.app.get('channelService').pushMessageByUids('onServerMaintenance', resResult(STATUS.SERVER_MAINTENANCE), [{ uid: roleId, sid }]);
return next(new Error(), resResult(STATUS.SERVER_MAINTENANCE));
if(sid) {
const mainten = getServerMainten(serverId);
console.log('***** maintenServers', mainten)
if(mainten) { // 该服务器维护
if(mainten.startTime > nowSeconds() || mainten.endTime < nowSeconds()) return next(null)
let isWhiteList = await checkWhiteListWithUid(uid);
if(isWhiteList) return next(null);
pinus.app.get('channelService').pushMessageByUids('onServerMaintenance', resResult(STATUS.SERVER_MAINTENANCE), [{ uid: roleId, sid }]);
return next(new Error(), resResult(STATUS.SERVER_MAINTENANCE));
}
}
let hasBlockWords = false;
@@ -6,6 +6,7 @@ import { UserGuildType } from '../../../db/UserGuild';
import { kickUser } from '../../../services/connectorService';
import { PVPConfigType } from '../../../db/SystemConfig';
import { setDicAuctionTime } from '../../../services/guildActivityService';
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
export default function (app: Application) {
new HandlerService(app, {});
return new ConnectorRemote(app);
@@ -16,7 +17,6 @@ export class ConnectorRemote {
constructor(private app: Application) {
this.app = app;
}
private maintenServers: number[] = []; // 维护中的服务器
public async remoteLogin(uid: string, message?: any) {
await kickUser(this.app, uid, message);
@@ -69,13 +69,16 @@ export class ConnectorRemote {
reloadResources();
}
public setServerMainten(maintenServers: number[]) {
this.app.set('maintenServers', maintenServers);
return this.maintenServers = maintenServers;
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
setServerMainten(serverIds, startTime, endTime);
}
public getServerMainten() {
return this.maintenServers;
public stopServerMainten(serverIds: number[]) {
stopServerMainten(serverIds);
}
public getServerMainten(serverId: number) {
return getServerMainten(serverId);
}
public setPvpSeasonNum(pvpConfig: PVPConfigType) {
@@ -12,8 +12,6 @@ import { RewardInter } from '../../../pubUtils/interface';
import { MarqueeModel } from '../../../db/Marquee';
import { ServerlistModel } from '../../../db/Serverlist';
import { pushCurrentTime } from '../../../services/chatService';
import { MaintenanceModel } from '../../../db/Maintenance';
import { initMaintenance, stopMaintenance } from '../../../services/gmService';
import { checkActivityEditable, checkActivityGroupType } from '../../../services/activity/activityService';
import { ActivityModel } from '../../../db/Activity';
import { ActivityGroupModel } from '../../../db/ActivityGroup';
@@ -156,31 +154,6 @@ export class GmHandler {
return resResult(STATUS.SUCCESS);
}
async startMaintenance(msg: { code: string }, session: BackendSession) {
const { code } = msg;
const uid = session.get('uid');
const maintenance = await MaintenanceModel.updateStatusByCode(code, true, uid);
if (!maintenance) return resResult(STATUS.WRONG_PARMS);
await initMaintenance(maintenance);
return resResult(STATUS.SUCCESS,);
}
async stopMaintenance(msg: { code: string }, session: BackendSession) {
const { code } = msg;
const uid = session.get('uid');
const maintenance = await MaintenanceModel.updateStatusByCode(code, false, uid);
if (!maintenance) return resResult(STATUS.WRONG_PARMS);
await stopMaintenance(maintenance, uid);
return resResult(STATUS.SUCCESS,);
}
async setMaintenance() {
pinus.app.rpc.connector.connectorRemote.setServerMainten.broadcast([1]);
return resResult(STATUS.SUCCESS);
}
async updateActivity(msg: { activityId: number|string, groupId: number, beginTime: number, endTime: number, type: number, data: string }, session: BackendSession) {
const { activityId, groupId, beginTime, endTime, type, data } = msg;
const uid = session.get('uid');
@@ -1,14 +1,17 @@
import { Application, BackendSession, pinus } from 'pinus';
import { getRandSingleEelm, resResult } from '../../../pubUtils/util';
import { genCode, getRandSingleEelm, resResult } from '../../../pubUtils/util';
import { STATUS } from '../../../consts/statusCode';
import moment = require('moment');
import { CreateServerParam, UpdateRegionParams } from '../../../domain/backEndField/params';
import { RegionModel } from '../../../db/Region';
import { gameData } from '../../../pubUtils/data';
import { ServerlistModel } from '../../../db/Serverlist';
import { Maintenance, ServerlistModel } from '../../../db/Serverlist';
import { nowSeconds } from '../../../pubUtils/timeUtil';
import { GM_MAIL_TYPE, MAIL_TIME_TYPE, REF_CIRCLE_MAIL_TIME } from '../../../consts';
import { SendMailFun } from '../../../services/mailService';
import { sendOpenServerMail } from '../../../services/gmService';
import { initMaintenance, stopMaintenance } from '../../../services/timeTaskService';
import { isNumber } from 'util';
let timer: NodeJS.Timer;
export default function (app: Application) {
return new GmHandler(app);
@@ -18,6 +21,7 @@ export class GmHandler {
constructor(private app: Application) {
}
// 保存大区配置
async saveRegionConf(msg: UpdateRegionParams, session: BackendSession) {
let params = new UpdateRegionParams(msg);
let uid = session.get('uid');
@@ -34,10 +38,13 @@ export class GmHandler {
return resResult(STATUS.SUCCESS);
}
// 手动开服
async createNewServer(msg: CreateServerParam, session: BackendSession) {
let params = new CreateServerParam(msg);
let uid = session.get('uid');
if(!params.checkParams()) return resResult(STATUS.WRONG_PARMS);
console.log('*******', params);
let curRegion = await RegionModel.findRegionByEnv(params.env);
if(!curRegion) return resResult(STATUS.WRONG_PARMS);
@@ -46,26 +53,35 @@ export class GmHandler {
if(!dicServerName) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let newServer = await ServerlistModel.newServer(params, curRegion, dicServerName, uid);
let mails = [ params.openMail, params.circleMail ];
for(let mail of mails) {
let needSend = false;
if(mail.timeType == MAIL_TIME_TYPE.CIRCLE) {
let refTime = moment(moment().format(`YYYY-MM-DD ${REF_CIRCLE_MAIL_TIME}:00:00`)).unix();
let sendTime = moment(moment().format('YYYY-MM-DD '+ mail.circleHour)).unix();
if(sendTime < refTime) sendTime += 86400;
let now = nowSeconds();
if(refTime < now && sendTime > now) {
needSend = true;
}
} else {
needSend = true;
}
if(needSend) {
let f = new SendMailFun();
await f.setWithGmMail(mail);
await f.sendToServer([newServer.id]);
}
}
if(params.openMail) await sendOpenServerMail('openMail', params.openMail, newServer, uid);
if(params.circleMail) await sendOpenServerMail('circleMail', params.circleMail, newServer, uid);
await RegionModel.newServer(curRegion.id, newServer)
return resResult(STATUS.SUCCESS);
}
// 开始维护
async startMaintenance(msg: { id: number, startTime: number, endTime: number, hasNotify: boolean }, session: BackendSession) {
const { id, startTime, endTime, hasNotify } = msg;
if(!id || !isNumber(startTime) || !isNumber(endTime)) return resResult(STATUS.WRONG_PARMS);
const uid = session.get('uid');
let newMaintenance: Maintenance = { batchCode: genCode(10), startTime, endTime, hasNotify, isOpen: true }
let server = await ServerlistModel.updateByServerId(id, { maintenance: newMaintenance });
await pinus.app.rpc.systimer.systimerRemote.initMaintenance.broadcast([server]);
return resResult(STATUS.SUCCESS,);
}
// 提前结束维护
async stopMaintenance(msg: { id: number }, session: BackendSession) {
const { id } = msg;
const uid = session.get('uid');
let server = await ServerlistModel.findByServerId(id);
let maintenance = server.maintenance;
if(maintenance) {
// console.log('&&&', server, server.id)
await pinus.app.rpc.systimer.systimerRemote.stopMaintenance.broadcast(maintenance.batchCode, [server.id]);
}
return resResult(STATUS.SUCCESS,);
}
}
@@ -1,6 +1,7 @@
import { Application, ChannelService, HandlerService, } from 'pinus';
import { reloadResources } from '../../../pubUtils/data';
import { treatGuildName } from '../../../services/sdkService';
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -26,4 +27,16 @@ export class GuildRemote {
public async treatGuildName(content: string) {
await treatGuildName(content);
}
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
setServerMainten(serverIds, startTime, endTime);
}
public stopServerMainten(serverIds: number[]) {
stopServerMainten(serverIds);
}
public getServerMainten(serverId: number) {
return getServerMainten(serverId);
}
}
@@ -1,6 +1,7 @@
import { Application, ChannelService, HandlerService, } from 'pinus';
import { reloadResources } from '../../../pubUtils/data';
import { settleOrderFromRedisPub } from '../../../services/orderService';
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
export default function (app: Application) {
new HandlerService(app, {});
@@ -26,4 +27,16 @@ export class OrderRemote {
public async settleOrderFromRedisPub(message: string) {
await settleOrderFromRedisPub(message);
}
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
setServerMainten(serverIds, startTime, endTime);
}
public stopServerMainten(serverIds: number[]) {
stopServerMainten(serverIds);
}
public getServerMainten(serverId: number) {
return getServerMainten(serverId);
}
}
@@ -11,6 +11,8 @@ import { Figure } from '../../../domain/dbGeneral';
import { getDefaultRoleInfo } from '../../../services/roleService';
import { PVPConfigType } from '../../../db/SystemConfig';
import { treatRoleName } from '../../../services/sdkService';
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
export default function (app: Application) {
new HandlerService(app, {});
return new RoleRemote(app);
@@ -121,4 +123,16 @@ export class RoleRemote {
public async treatRoleName(roleId: string) {
await treatRoleName(roleId);
}
public setServerMainten(serverIds: number[], startTime: number, endTime: number) {
setServerMainten(serverIds, startTime, endTime);
}
public stopServerMainten(serverIds: number[]) {
stopServerMainten(serverIds);
}
public getServerMainten(serverId: number) {
return getServerMainten(serverId);
}
}
@@ -1,11 +1,12 @@
import { Application, ChannelService } from 'pinus';
import { resetPvpSeasonTime, guildActivityStart, gateActivityEnd, cityActivityEnd, raceActivityEnd, guildActivitySchedule, auctionSchedule } from '../../../services/timeTaskService';
import { resetPvpSeasonTime, guildActivityStart, gateActivityEnd, cityActivityEnd, raceActivityEnd, guildActivitySchedule, auctionSchedule, initMaintenance, stopMaintenance } from '../../../services/timeTaskService';
import PvpDefenseType from '../../../db/PvpDefense';
import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity';
import { reloadResources } from '../../../pubUtils/data';
import { setMarquee, cancelMarquee } from '../../../services/gmService';
import { setDicAuctionTime, setDicGuildActivity } from '../../../services/guildActivityService';
import { setWeek } from '../../../pubUtils/timeUtil';
import { ServerlistType } from '../../../db/Serverlist';
export default function (app: Application) {
return new SystimerRemote(app);
@@ -89,4 +90,12 @@ export class SystimerRemote {
async setDay(week: number) {
setWeek(week);
}
public async initMaintenance(servers?: ServerlistType[]) {
await initMaintenance(servers);
}
public async stopMaintenance(batchCode: string, serverIds: number[]) {
await stopMaintenance(batchCode, serverIds);
}
}