From 55161559402eac3f820fa7dacfe47eceef6db899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=93=86=E5=95=A6=E5=A5=BD=E6=A2=A6?= <530353222@qq.com> Date: Fri, 3 Mar 2023 17:39:56 +0800 Subject: [PATCH] job --- electron/controller/example.js | 15 ++++++ electron/jobs/example/hello.js | 5 ++ electron/jobs/example/index.js | 41 --------------- electron/jobs/example/test.js | 40 --------------- electron/jobs/example/timer.js | 46 +++++++++++++++++ electron/preload/index.js | 4 +- frontend/src/api/main.js | 1 + frontend/src/utils/message.js | 3 ++ frontend/src/views/base/jobs/Index.vue | 70 ++++++++++++++++++++++++++ package.json | 2 +- 10 files changed, 143 insertions(+), 84 deletions(-) create mode 100644 electron/jobs/example/hello.js delete mode 100644 electron/jobs/example/index.js delete mode 100644 electron/jobs/example/test.js create mode 100644 electron/jobs/example/timer.js create mode 100644 frontend/src/utils/message.js create mode 100644 frontend/src/views/base/jobs/Index.vue diff --git a/electron/controller/example.js b/electron/controller/example.js index a5b6b68..bce2eb6 100644 --- a/electron/controller/example.js +++ b/electron/controller/example.js @@ -677,6 +677,21 @@ class ExampleController extends Controller { return data; } + /** + * 任务 + */ + someJob (args) { + let jobId = args.id; + if (args.type == 'timer') { + let myjob = new ChildJob(); + myjob.exec('./jobs/example/timer', {jobId}); + + myjob.on('job-timer', (data) => { + Log.info('from TimerJob data:', data); + }) + } + } + /** * 测试接口 */ diff --git a/electron/jobs/example/hello.js b/electron/jobs/example/hello.js new file mode 100644 index 0000000..48624bd --- /dev/null +++ b/electron/jobs/example/hello.js @@ -0,0 +1,5 @@ +const Log = require('ee-core/module/log'); + +exports.welcome = function () { + Log.info('[child-process] [jobs/example/hello] welcome ! '); +} \ No newline at end of file diff --git a/electron/jobs/example/index.js b/electron/jobs/example/index.js deleted file mode 100644 index 2dac173..0000000 --- a/electron/jobs/example/index.js +++ /dev/null @@ -1,41 +0,0 @@ -const Job = require('ee-core/module/jobs/baseJobClass'); -const Loader = require('ee-core/module/loader'); -const Log = require('ee-core/module/log'); -const Ps = require('ee-core/module/ps'); -const test = Loader.requireJobsModule('./example/test'); - -/** - * 示例服务 - * @class - */ -class ExampleJob extends Job { - - constructor(params) { - super(); - this.params = params; - } - - /** - * Execute the job - */ - async handle () { - Log.info("[child-process] job params: ", this.params); - // setInterval(function() { - // console.log('ddddd') - // }, 1000); - - //test.hello(); - //test.utilsMod(); - - setTimeout(function(){ - test.hello(); - }, 3000) - - setTimeout(function(){ - Ps.exit(1); - }, 10000) - } -} - -ExampleJob.toString = () => '[class ExampleJob]'; -module.exports = ExampleJob; diff --git a/electron/jobs/example/test.js b/electron/jobs/example/test.js deleted file mode 100644 index e06e965..0000000 --- a/electron/jobs/example/test.js +++ /dev/null @@ -1,40 +0,0 @@ -const Log = require('ee-core/module/log'); -const Utils = require('ee-core/module/utils'); -const Ps = require('ee-core/module/ps'); - -exports.hello = function () { - Log.info('[child-process] [jobs/test] hello -------- '); -} - -exports.utilsMod = function () { - let utilsApis = { - getBaseDir: Ps.getBaseDir(), - getEnv: Ps.getEnv(), - isDev: Ps.isDev(), - isRenderer: Ps.isRenderer(), - isMain: Ps.isMain(), - isForkedChild: Ps.isForkedChild(), - getHomeDir: Ps.getHomeDir(), - getStorageDir: Ps.getStorageDir(), - getLogDir: Ps.getLogDir(), - getRootDir: Ps.getRootDir(), - getBaseDir: Ps.getBaseDir(), - getAppUserDataDir: Ps.getAppUserDataDir(), - getHomeDir: Ps.getHomeDir(), - getUserHomeDir: Ps.getUserHomeDir(), - getMainPort: Ps.getMainPort(), - getSocketPort: Ps.getSocketPort(), - getHttpPort: Ps.getHttpPort(), - getExecDir: Ps.getExecDir(), - getPackage: Utils.getPackage(), - getEeConfig: Utils.getEeConfig(), - getAppVersion: Utils.getAppVersion(), - getAddonConfig: Utils.getAddonConfig(), - getMainServerConfig: Utils.getMainServerConfig(), - getHttpServerConfig: Utils.getHttpServerConfig(), - getSocketServerConfig: Utils.getSocketServerConfig(), - getSocketChannel: Utils.getSocketChannel(), - getExtraResourcesDir: Ps.getExtraResourcesDir(), - } - Log.info('[child-process] [jobs/test] Utils -------- ', utilsApis); -} \ No newline at end of file diff --git a/electron/jobs/example/timer.js b/electron/jobs/example/timer.js new file mode 100644 index 0000000..76b7fcb --- /dev/null +++ b/electron/jobs/example/timer.js @@ -0,0 +1,46 @@ +const Job = require('ee-core/module/jobs/baseJobClass'); +const Loader = require('ee-core/module/loader'); +const Log = require('ee-core/module/log'); +const Ps = require('ee-core/module/ps'); +const Message = require('ee-core/module/message'); +const Hello = Loader.requireJobsModule('./example/hello'); + +/** + * example - TimerJob + * @class + */ +class TimerJob extends Job { + + constructor(params) { + super(); + this.params = params; + } + + /** + * handle()方法是必要的,且会被自动调用 + */ + async handle () { + Log.info("[child-process] TimerJob params: ", this.params); + + // 模拟计时器任务,执行10秒 + let childMessage = Message.childMessage; + let eventName = 'job-timer'; + let number = 0; + let jobId = this.params.jobId; + setInterval(function() { + Log.info("[child-process] TimerJob number: ", number); + Hello.welcome(); + + childMessage.sendToMain(eventName, {number, jobId}); + number++; + }, 1000); + + // 任务完成后,必须调用 Ps.exit() 方法,让进程退出,否则会常驻内存 + setTimeout(function(){ + Ps.exit(1); + }, 15 * 1000) + } +} + +TimerJob.toString = () => '[class TimerJob]'; +module.exports = TimerJob; diff --git a/electron/preload/index.js b/electron/preload/index.js index d3960c6..9f22970 100644 --- a/electron/preload/index.js +++ b/electron/preload/index.js @@ -21,6 +21,6 @@ module.exports = async (app) => { awakenAddon.create(); autoUpdaterAddon.create(); - let myjob = new ChildJob(); - myjob.exec('./jobs/example/index'); + // let myjob = new ChildJob(); + // myjob.exec('./jobs/example/index'); } \ No newline at end of file diff --git a/frontend/src/api/main.js b/frontend/src/api/main.js index 737248e..aaecdf9 100644 --- a/frontend/src/api/main.js +++ b/frontend/src/api/main.js @@ -34,6 +34,7 @@ const ipcApiRoute = { getWCid: 'controller.example.getWCid', startJavaServer: 'controller.example.startJavaServer', closeJavaServer: 'controller.example.closeJavaServer', + someJob: 'controller.example.someJob', hello: 'controller.example.hello', } diff --git a/frontend/src/utils/message.js b/frontend/src/utils/message.js new file mode 100644 index 0000000..f2aba39 --- /dev/null +++ b/frontend/src/utils/message.js @@ -0,0 +1,3 @@ +const { ipcRenderer: ipc } = (window.require && window.require('electron')) || window.electron || {} + +export default ipc diff --git a/frontend/src/views/base/jobs/Index.vue b/frontend/src/views/base/jobs/Index.vue new file mode 100644 index 0000000..3919c32 --- /dev/null +++ b/frontend/src/views/base/jobs/Index.vue @@ -0,0 +1,70 @@ + + + diff --git a/package.json b/package.json index 8c89f34..598217a 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "dependencies": { "better-sqlite3": "^7.6.0", "dayjs": "^1.10.7", - "ee-core": "^1.5.0", + "ee-core": "^2.0.0", "electron-is": "^3.0.0", "electron-updater": "^5.3.0", "lodash": "^4.17.21"