后台:跑马灯
This commit is contained in:
@@ -168,7 +168,18 @@ export class GmHandler {
|
|||||||
const { code } = msg;
|
const { code } = msg;
|
||||||
let systimerServers = this.app.getServersByType('systimer');
|
let systimerServers = this.app.getServersByType('systimer');
|
||||||
for(let { id } of systimerServers) {
|
for(let { id } of systimerServers) {
|
||||||
await this.app.rpc.systimer.systimerRemote.setMarquee.toServer(id, code);
|
let result = await this.app.rpc.systimer.systimerRemote.setMarquee.toServer(id, code);
|
||||||
|
if(!result) return resResult(STATUS.GM_MARQUEE_ERR);
|
||||||
|
}
|
||||||
|
return resResult(STATUS.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
async cancelMarquee(msg: { code: string }, session: BackendSession) {
|
||||||
|
const { code } = msg;
|
||||||
|
let systimerServers = this.app.getServersByType('systimer');
|
||||||
|
for(let { id } of systimerServers) {
|
||||||
|
let result = await this.app.rpc.systimer.systimerRemote.cancelMarquee.toServer(id, code);
|
||||||
|
if(!result) return resResult(STATUS.GM_MARQUEE_CANCEL_ERR);
|
||||||
}
|
}
|
||||||
return resResult(STATUS.SUCCESS);
|
return resResult(STATUS.SUCCESS);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { resetPvpSeasonTime, setPvpDefResult, guildActivityStart, gateActivityEn
|
|||||||
import PvpDefenseType from '../../../db/PvpDefense';
|
import PvpDefenseType from '../../../db/PvpDefense';
|
||||||
import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity';
|
import { DicGuildActivity } from '../../../pubUtils/dictionary/DicGuildActivity';
|
||||||
import { reloadResources } from '../../../pubUtils/data';
|
import { reloadResources } from '../../../pubUtils/data';
|
||||||
import { setMarquee } from '../../../services/marqueeService';
|
import { setMarquee, cancelMarquee } from '../../../services/marqueeService';
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
return new SystimerRemote(app);
|
return new SystimerRemote(app);
|
||||||
@@ -53,6 +53,10 @@ export class SystimerRemote {
|
|||||||
* @param code 跑马灯唯一code
|
* @param code 跑马灯唯一code
|
||||||
*/
|
*/
|
||||||
public async setMarquee(code: string) {
|
public async setMarquee(code: string) {
|
||||||
await setMarquee(code);
|
return await setMarquee(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async cancelMarquee(code: string) {
|
||||||
|
return await cancelMarquee(code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import { MarqueeType, MarqueeModel } from "../db/Marquee";
|
import { MarqueeType, MarqueeModel } from "../db/Marquee";
|
||||||
import { MARQUEE_TYPE } from "../consts";
|
import { MARQUEE_TYPE, STATUS } from "../consts";
|
||||||
import { scheduleJob } from 'node-schedule';
|
import { scheduleJob, scheduledJobs, Job } from 'node-schedule';
|
||||||
import { createMarqueeMsg as sysCreateMarqueeMsg, pushMarqueeMsg as sysPushMarqueeMsg } from './sysChatService';
|
import { createMarqueeMsg as sysCreateMarqueeMsg, pushMarqueeMsg as sysPushMarqueeMsg } from './sysChatService';
|
||||||
import { GroupMessageType } from "../db/GroupMessage";
|
import { GroupMessageType } from "../db/GroupMessage";
|
||||||
|
import { resResult } from "../pubUtils/util";
|
||||||
|
|
||||||
export async function initMarquee() {
|
export async function initMarquee() {
|
||||||
const marquees = await MarqueeModel.findEffectiveMarque();
|
const marquees = await MarqueeModel.findEffectiveMarque();
|
||||||
@@ -16,39 +17,52 @@ export async function setMarquee(code: string) {
|
|||||||
if(marquee.type == MARQUEE_TYPE.INSTANT) {
|
if(marquee.type == MARQUEE_TYPE.INSTANT) {
|
||||||
let msgDatas = await createMarqueeMsg(marquee);
|
let msgDatas = await createMarqueeMsg(marquee);
|
||||||
await pushMarqueeMsg(msgDatas);
|
await pushMarqueeMsg(msgDatas);
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
await generateMarqueeSchedule(marquee);
|
return await generateMarqueeSchedule(marquee);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function generateMarqueeSchedule(marquee: MarqueeType) {
|
async function generateMarqueeSchedule(marquee: MarqueeType) {
|
||||||
if(marquee.type != MARQUEE_TYPE.SCHEDULE) return false;
|
if(marquee.type != MARQUEE_TYPE.SCHEDULE) return false;
|
||||||
if(marquee.startTime.getTime() >= marquee.endTime.getTime()) return false
|
if(marquee.startTime.getTime() >= marquee.endTime.getTime()) return false;
|
||||||
let startJob = scheduleJob(`start${marquee.code}`, marquee.startTime.getTime(), async () => {
|
if(marquee.endTime.getTime() < Date.now()) return false;
|
||||||
console.log('************', `跑马灯定时器 ${marquee.code}开始`, '************');
|
if(marquee.startTime.getTime() > Date.now()) {
|
||||||
let msgDatas = await createMarqueeMsg(marquee);
|
let startJob = scheduleJob(`start${marquee.code}`, marquee.startTime.getTime(), async () => {
|
||||||
await pushMarqueeMsg(msgDatas);
|
await startMarquee(marquee, startJob)
|
||||||
let secondsJob = scheduleJob(`setSeconds${marquee.code}`, `*/${marquee.interval} * * * * *`, async () => {
|
|
||||||
await pushMarqueeMsg(msgDatas);
|
|
||||||
});
|
});
|
||||||
let endJob = scheduleJob(`end${marquee.code}`, marquee.endTime.getTime(), () => {
|
} else {
|
||||||
if(startJob) {
|
await startMarquee(marquee)
|
||||||
startJob.cancel();
|
}
|
||||||
startJob = undefined;
|
|
||||||
}
|
|
||||||
if(secondsJob) {
|
|
||||||
secondsJob.cancel();
|
|
||||||
secondsJob = undefined;
|
|
||||||
}
|
|
||||||
if(endJob) {
|
|
||||||
endJob.cancel();
|
|
||||||
endJob = undefined;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function startMarquee(marquee: MarqueeType, startJob?: Job) {
|
||||||
|
console.log('************', `跑马灯定时器 ${marquee.code}开始`, '************');
|
||||||
|
await MarqueeModel.updateData(marquee.code, { isRunning: true });
|
||||||
|
let msgDatas = await createMarqueeMsg(marquee);
|
||||||
|
await pushMarqueeMsg(msgDatas);
|
||||||
|
let secondsJob = scheduleJob(`setSeconds${marquee.code}`, `*/${marquee.interval} * * * * *`, async () => {
|
||||||
|
console.log(`*****setSeconds${marquee.code}****`)
|
||||||
|
await pushMarqueeMsg(msgDatas);
|
||||||
|
});
|
||||||
|
let endJob = scheduleJob(`end${marquee.code}`, marquee.endTime.getTime(), async () => {
|
||||||
|
if(startJob) {
|
||||||
|
startJob.cancel();
|
||||||
|
startJob = undefined;
|
||||||
|
}
|
||||||
|
if(secondsJob) {
|
||||||
|
secondsJob.cancel();
|
||||||
|
secondsJob = undefined;
|
||||||
|
}
|
||||||
|
if(endJob) {
|
||||||
|
endJob.cancel();
|
||||||
|
endJob = undefined;
|
||||||
|
}
|
||||||
|
await MarqueeModel.updateData(marquee.code, { isRunning: false });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async function createMarqueeMsg(marquee: MarqueeType) {
|
async function createMarqueeMsg(marquee: MarqueeType) {
|
||||||
let { serverIds, content } = marquee;
|
let { serverIds, content } = marquee;
|
||||||
let msgDatas: GroupMessageType[] = [];
|
let msgDatas: GroupMessageType[] = [];
|
||||||
@@ -64,3 +78,14 @@ async function pushMarqueeMsg(msgDatas: GroupMessageType[]) {
|
|||||||
await sysPushMarqueeMsg(msgData);
|
await sysPushMarqueeMsg(msgData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function cancelMarquee(code: string) {
|
||||||
|
let startMarquee = scheduledJobs[`start${code}`];
|
||||||
|
let setSecondsMarquee = scheduledJobs[`setSeconds${code}`];
|
||||||
|
let endMarquee = scheduledJobs[`end${code}`];
|
||||||
|
if(startMarquee) startMarquee.cancel();
|
||||||
|
if(setSecondsMarquee) setSecondsMarquee.cancel();
|
||||||
|
if(endMarquee) endMarquee.cancel();
|
||||||
|
await MarqueeModel.updateData(code, { isRunning: false });
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -32,9 +32,12 @@ export default class Game extends Service {
|
|||||||
/**
|
/**
|
||||||
* 获取正式服,测试服,开发服等环境
|
* 获取正式服,测试服,开发服等环境
|
||||||
*/
|
*/
|
||||||
public async getServerListByEnv(serverType?: string) {
|
public async getServerListByEnv() {
|
||||||
const { ctx } = this;
|
const { ctx, app } = this;
|
||||||
const list = await ServerlistModel.findByServerType(serverType);
|
let env = app.config.env
|
||||||
|
let serverEnv = await GameModel.getServerEnvList();
|
||||||
|
let curEnv = serverEnv.find(cur => cur.env == env);
|
||||||
|
const list = await ServerlistModel.findByServerType(curEnv?.serverType);
|
||||||
|
|
||||||
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||||
list
|
list
|
||||||
|
|||||||
@@ -397,6 +397,8 @@ export const STATUS = {
|
|||||||
GM_ACTIVITY_GROUP_NOT_FOUND: { code: 60019, simStr: '未找到该活动组' },
|
GM_ACTIVITY_GROUP_NOT_FOUND: { code: 60019, simStr: '未找到该活动组' },
|
||||||
GM_ACTIVITY_GROUP_TYPE_NOT_FOUND: { code: 60020, simStr: '未找到活动组类型' },
|
GM_ACTIVITY_GROUP_TYPE_NOT_FOUND: { code: 60020, simStr: '未找到活动组类型' },
|
||||||
GM_ACTIVITY_NOT_FIT_GROUP_TYPE: { code: 60021, simStr: '该活动不满足该活动组类型' },
|
GM_ACTIVITY_NOT_FIT_GROUP_TYPE: { code: 60021, simStr: '该活动不满足该活动组类型' },
|
||||||
|
GM_MARQUEE_ERR: { code: 60022, simStr: '跑马灯定时设置错误' },
|
||||||
|
GM_MARQUEE_CANCEL_ERR: { code: 60023, simStr: '取消失败' },
|
||||||
// 支付相关状态 70000 - 79999
|
// 支付相关状态 70000 - 79999
|
||||||
NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' },
|
NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' },
|
||||||
NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' },
|
NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' },
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ export default class Marquee extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
content: string; // 广播内容
|
content: string; // 广播内容
|
||||||
|
|
||||||
|
@prop({ required: true })
|
||||||
|
isRunning: boolean; // 当前正在发布
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建跑马灯
|
* 创建跑马灯
|
||||||
* @param params 参数
|
* @param params 参数
|
||||||
@@ -75,10 +78,7 @@ export default class Marquee extends BaseModel {
|
|||||||
private static getSearchObj(form: { type?: number, current?: boolean, content?: string }) {
|
private static getSearchObj(form: { type?: number, current?: boolean, content?: string }) {
|
||||||
let searchObj = {};
|
let searchObj = {};
|
||||||
if(form['type']) searchObj['type'] = form.type;
|
if(form['type']) searchObj['type'] = form.type;
|
||||||
if(form['current']) {
|
if(form['current']) searchObj['isRunning'] = form.current
|
||||||
searchObj['startTime'] = { $lte: new Date };
|
|
||||||
searchObj['endTime'] = { $gte: new Date };
|
|
||||||
}
|
|
||||||
if(form['content']) searchObj['content'] = { $regex: new RegExp(form.content.toString(), 'i') };
|
if(form['content']) searchObj['content'] = { $regex: new RegExp(form.content.toString(), 'i') };
|
||||||
return searchObj
|
return searchObj
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user