✨ feat(服务器): 修改服务器自动开服策略
This commit is contained in:
@@ -1,11 +1,18 @@
|
||||
import { pinus } from "pinus";
|
||||
import { uniq } from "underscore";
|
||||
import { GVG_SERVER_TYPE, SERVER_GROUP_FUN_TYPE } from "../consts";
|
||||
import { ACTIVITY_TYPE, GVG_SERVER_TYPE, REDIS_KEY, SERVER_GROUP_FUN_TYPE } from "../consts";
|
||||
import { ServerGroupModel } from "../db/ServerGroup";
|
||||
import { ServerlistModel } from "../db/Serverlist";
|
||||
import { nowSeconds } from "../pubUtils/timeUtil";
|
||||
import { getServerTypeByTime } from "./gvg/gvgService";
|
||||
import { getAllServerCreateTime } from "./redisService";
|
||||
import { getAllServerCreateTime, redisClient } from "./redisService";
|
||||
import moment = require("moment");
|
||||
import { RegionModel, RegionType } from "../db/Region";
|
||||
import { errlogger } from "../util/logger";
|
||||
import { CreateServerParam } from "../domain/backEndField/params";
|
||||
import { sendOpenServerMail } from "./gmService";
|
||||
import { ActivityGroupModel } from "../db/ActivityGroup";
|
||||
import { ActivityModel } from "../db/Activity";
|
||||
|
||||
export async function setServerGroup() {
|
||||
const servers = await ServerlistModel.findByEnv(pinus.app.get('env'));
|
||||
@@ -100,4 +107,65 @@ export async function getPVPServerGroup() {
|
||||
map.get(groupId).push(serverId);
|
||||
}
|
||||
return map
|
||||
}
|
||||
|
||||
export async function autoCreateServerSchedule() {
|
||||
console.log('******* autoCreateServerSchedule *******')
|
||||
let region = await RegionModel.findRegionByEnv(pinus.app.get('env'));
|
||||
if(!region) {
|
||||
return errlogger.error('create new server region not found');
|
||||
}
|
||||
let time = moment().format('HH:mm');
|
||||
console.log('#### time', time)
|
||||
if(region.stategy && region.stategy.type == 1 && region.stategy.timers.indexOf(time) != -1) {
|
||||
let latestServer = await ServerlistModel.findByServerId(region.latestServerUniqId);
|
||||
if(!latestServer || latestServer.playerCnt >= region.stategy.maxPlayerCnt) {
|
||||
let params = new CreateServerParam();
|
||||
params.setByRegionStategy(region, nowSeconds())
|
||||
await createNewServer(region, (latestServer?.serverId||0) + 1, params);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export async function autoCreateServerWhenRoleInit(serverId: number) {
|
||||
console.log('******* autoCreateServerWhenRoleInit *******')
|
||||
let server = await ServerlistModel.incRoleCnt(serverId);
|
||||
if(!server) {
|
||||
return errlogger.error('server not found');
|
||||
}
|
||||
let region = await RegionModel.findRegionByEnv(pinus.app.get('env'));
|
||||
if(!region) {
|
||||
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) {
|
||||
let params = new CreateServerParam();
|
||||
params.setByRegionStategy(region, nowSeconds())
|
||||
await createNewServer(region, server.serverId + 1, params);
|
||||
}
|
||||
}
|
||||
|
||||
export async function createNewServer(region: RegionType ,serverId: number, params: CreateServerParam, uid?: number) {
|
||||
console.log('******* createNewServer *******')
|
||||
let newServer = await ServerlistModel.newServer(params, region, serverId, uid);
|
||||
if(!newServer) return;
|
||||
if(params.openMail) await sendOpenServerMail('openMail', params.openMail, newServer, uid);
|
||||
// if(params.circleMail) await sendOpenServerMail('circleMail', params.circleMail, newServer, uid);
|
||||
if(params.activityGroupId && params.activityGroupId.length > 0) {
|
||||
await ActivityGroupModel.addServerToGroupData(newServer.id, params.activityGroupId);
|
||||
let activityGroups = await ActivityGroupModel.findByServerId(newServer.id);
|
||||
await pinus.app.rpc.activity.activityRemote.addServerToGroup.broadcast(params.activityGroupId, [newServer.id]);
|
||||
|
||||
let aids = activityGroups.reduce((pre, cur) => [...pre, ...cur.activities], []);
|
||||
let activities = await ActivityModel.findActivityByIds(aids);
|
||||
let timeLimitRanks = activities.filter(cur => cur.type == ACTIVITY_TYPE.TIME_LIMIT_RANK);
|
||||
if(timeLimitRanks.length > 0) {
|
||||
pinus.app.rpc.systimer.systimerRemote.updateTimeLimitRank.broadcast(timeLimitRanks);
|
||||
}
|
||||
}
|
||||
await RegionModel.newServer(region.id, newServer);
|
||||
await redisClient().hsetAsync(REDIS_KEY.SERVER, `${newServer.id}`, `${newServer.name}`);
|
||||
await redisClient().hsetAsync(REDIS_KEY.SERVER_OPEN_TIME, `${newServer.id}`, `${newServer.openTime}`);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user