Files
electron-egg/electronjs/jobs/example/timer.js
2025-01-07 19:08:48 +08:00

89 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict';
const { logger } = require('ee-core/log');
const { isChildJob, exit } = require('ee-core/ps');
const { childMessage } = require('ee-core/message');
const { welcome } = require('./hello');
const { UserService } = require('../../service/job/user');
/**
* example - TimerJob
* @class
*/
class TimerJob {
constructor(params) {
this.params = params;
this.timer = undefined;
this.timeoutTimer = undefined;
this.number = 0;
this.countdown = 10; // 倒计时
}
/**
* handle()方法是必要的,且会被自动调用
*/
async handle () {
logger.info("[child-process] TimerJob params: ", this.params);
const { jobId } = this.params;
// 子进程中使用service
// 1. 确保引入的 service 中不能有electron 的 api或依赖 electron 不支持
const userService = new UserService();
userService.hello('job');
// 执行任务
this.doTimer(jobId);
}
/**
* 暂停任务运行
*/
async pause(jobId) {
logger.info("[child-process] Pause timerJob, jobId: ", jobId);
clearInterval(this.timer);
clearInterval(this.timeoutTimer);
}
/**
* 恢复任务运行
*/
async resume(jobId, pid) {
logger.info("[child-process] Resume timerJob, jobId: ", jobId, ", pid: ", pid);
this.doTimer(jobId);
}
/**
* 运行任务
*/
async doTimer(jobId) {
// 计时器模拟任务
const eventName = 'job-timer-progress-' + jobId;
this.timer = setInterval(() => {
welcome();
childMessage.send(eventName, {jobId, number: this.number, end: false});
this.number++;
this.countdown--;
}, 1000);
// 用 setTimeout 模拟任务运行时长
this.timeoutTimer = setTimeout(() => {
// 关闭计时器模拟任务
clearInterval(this.timer);
// 任务结束,重置前端显示
childMessage.send(eventName, {jobId, number:0, pid:0, end: true});
// 如果是childJob任务必须调用 exit() 方法,让进程退出,否则会常驻内存
// 如果是childPoolJob任务常驻内存等待下一个业务
if (isChildJob()) {
exit();
}
}, this.countdown * 1000)
}
}
TimerJob.toString = () => '[class TimerJob]';
module.exports = TimerJob;