哆啦好梦 2 năm trước cách đây
mục cha
commit
36d164ae52

+ 20 - 14
electron/controller/example.js

@@ -683,28 +683,34 @@ class ExampleController extends Controller {
    */ 
   someJob (args, event) {
     let jobId = args.id;
-    let type = args.type;
-    let pid = this.service.example.doJob(jobId, type, event);
+    let action = args.action;
+    
+    let result;
+    switch (action) {
+      case 'create':
+        result = this.service.example.doJob(jobId, action, event);
+        break;
+      case 'pause':
+        this.service.example.doJob(jobId, action, event);
+        break;
+      case 'continue':
+        this.service.example.doJob(jobId, action, event);
+        break;        
+      case 'close':
+        this.service.example.doJob(jobId, action, event);
+        break;
+      default:  
+    }
     
     let data = {
       jobId,
-      pid
+      action,
+      result
     }
     return data;
   }
 
   /**
-   * 关闭任务
-   */ 
-  closeJob (args, event) {
-    let jobId = args.id;
-    let type = args.type;
-    this.service.example.closeJob(jobId, type, event);
-    
-    return;
-  }  
-
-  /**
    * 创建任务池
    */ 
   async createPool (args, event) {

+ 22 - 20
electron/service/example.js

@@ -35,16 +35,15 @@ class ExampleService extends Service {
   /**
    * 执行任务
    */ 
-  doJob(jobId, type, event) {
-    let pid = 0;
-    if (type == 'timer') {
-      
+  doJob(jobId, action, event) {
+    let res = {};
+    let oneTask;
+    const channel = 'controller.example.timerJobProgress';
+    if (action == 'create') {
       // 执行任务及监听进度
-      const channel = 'controller.example.timerJobProgress';
       const timerTask = this.myJob.exec('./jobs/example/timer', {jobId});
       timerTask.emitter.on('job-timer-progress', (data) => {
         Log.info('[main-process] timerTask, from TimerJob data:', data);
-
         // 发送数据到渲染进程
         event.sender.send(`${channel}`, data)
       })
@@ -53,29 +52,32 @@ class ExampleService extends Service {
       // myjob.execPromise('./jobs/example/timer', {jobId}).then(task => {
       //   task.emitter.on('job-timer-progress', (data) => {
       //     Log.info('[main-process] timerTask, from TimerJob data:', data);
-
       //     // 发送数据到渲染进程
       //     event.sender.send(`${channel}`, data)
       //   })
       // });
 
-      pid = timerTask.pid; 
+      res.pid = timerTask.pid; 
       this.taskForJob[jobId] = timerTask;
     }
-
-    return pid;
-  }
-
-  /**
-   * 关闭任务
-   */ 
-  closeJob(jobId, type, event) {
-    let oneTask = this.taskForJob[jobId];
-    if (type == 'timer') {
+    if (action == 'pause') {
+      oneTask = this.taskForJob[jobId];
+      // 不支持window平台
+      oneTask.sleep();
+    }
+    if (action == 'continue') {
+      oneTask = this.taskForJob[jobId];
+      // 不支持window平台
+      oneTask.wakeup();
+    }
+    if (action == 'close') {
+      oneTask = this.taskForJob[jobId];
       oneTask.kill();
       const channel = 'controller.example.timerJobProgress';
-      event.reply(`${channel}`, {jobId, number:0, pid:0})
-    }
+      event.reply(`${channel}`, {jobId, number:0, pid:0});
+    }    
+
+    return res;
   }
 
   /**

+ 0 - 1
frontend/src/api/main.js

@@ -36,7 +36,6 @@ const ipcApiRoute = {
   closeJavaServer: 'controller.example.closeJavaServer',
   someJob: 'controller.example.someJob',
   timerJobProgress: 'controller.example.timerJobProgress',
-  closeJob: 'controller.example.closeJob',
   createPool: 'controller.example.createPool',
   createPoolNotice: 'controller.example.createPoolNotice',
   someJobByPool: 'controller.example.someJobByPool',

+ 17 - 17
frontend/src/views/base/jobs/Index.vue

@@ -7,15 +7,19 @@
     </div>  
     <div class="one-block-2">
       <a-space>
-        <a-button @click="runJob(1)">执行任务1</a-button>
+        <a-button @click="runJob(1, 'create')">执行任务1</a-button>
         进度:{{ progress1 }} , 进程pid:{{ progress1_pid }}
-        <a-button @click="closeJob(1)">关闭任务1</a-button>
+        <a-button @click="runJob(1, 'pause')">暂停</a-button>
+        <a-button @click="runJob(1, 'continue')">继续</a-button>
+        <a-button @click="runJob(1, 'close')">关闭</a-button>
       </a-space>
       <p></p>
       <a-space>
-        <a-button @click="runJob(2)">执行任务2</a-button>
+        <a-button @click="runJob(2, 'create')">执行任务2</a-button>
         进度:{{ progress2 }} , 进程pid:{{ progress2_pid }}
-        <a-button @click="closeJob(2)">关闭任务2</a-button>
+        <a-button @click="runJob(2, 'pause')">暂停</a-button>
+        <a-button @click="runJob(2, 'continue')">继续</a-button>
+        <a-button @click="runJob(2, 'close')">关闭</a-button>
       </a-space>            
     </div>
     <div class="one-block-1">
@@ -32,13 +36,11 @@
       <a-space>
         <a-button @click="runJobByPool(3)">执行任务3</a-button>
         进度:{{ progress3 }} , 进程pid:{{ progress3_pid }}
-        <a-button @click="closeJob(3)">关闭任务3</a-button>
       </a-space>
       <p></p>
       <a-space>
         <a-button @click="runJobByPool(4)">执行任务4</a-button>
         进度:{{ progress4 }} , 进程pid:{{ progress4_pid }}
-        <a-button @click="closeJob(4)">关闭任务4</a-button>
       </a-space>            
     </div>            
   </div>
@@ -96,29 +98,27 @@ export default {
         this.processPids = pidsStr;
       })   
     },
-    runJob(jobId) {
+    runJob(jobId, operation) {
       let params = {
         id: jobId,
-        type: 'timer'
+        type: 'timer',
+        action: operation
       }
       this.$ipc.invoke(ipcApiRoute.someJob, params).then(data => {
         switch (data.jobId) {
           case 1:
-            this.progress1_pid = data.pid;
+            if (data.action == 'create') {
+              this.progress1_pid = data.result.pid;
+            }
             break;
           case 2:
-            this.progress2_pid = data.pid;
+            if (data.action == 'create') {
+              this.progress2_pid = data.result.pid;
+            }
             break;
         }
       })
     },
-    closeJob(jobId) {
-      let params = {
-        id: jobId,
-        type: 'timer'
-      }
-      this.$ipc.send(ipcApiRoute.closeJob, params);
-    },
     createPool() {
       let params = {
         number: 3,