framework.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. 'use strict';
  2. const { Service } = require('ee-core');
  3. const Log = require('ee-core/log');
  4. const { ChildJob, ChildPoolJob } = require('ee-core/jobs');
  5. /**
  6. * framework
  7. * @class
  8. */
  9. class FrameworkService extends Service {
  10. constructor(ctx) {
  11. super(ctx);
  12. // 在构造函数中初始化一些变量
  13. this.myTimer = null;
  14. this.myJob = new ChildJob();
  15. this.myJobPool = new ChildPoolJob();
  16. this.taskForJob = {};
  17. }
  18. /**
  19. * test
  20. */
  21. async test(args) {
  22. let obj = {
  23. status:'ok',
  24. params: args
  25. }
  26. return obj;
  27. }
  28. /**
  29. * ipc通信(双向)
  30. */
  31. bothWayMessage(type, content, event) {
  32. // 前端ipc频道 channel
  33. const channel = 'controller.framework.ipcSendMsg';
  34. if (type == 'start') {
  35. // 每隔1秒,向前端页面发送消息
  36. // 用定时器模拟
  37. this.myTimer = setInterval(function(e, c, msg) {
  38. let timeNow = Date.now();
  39. let data = msg + ':' + timeNow;
  40. e.reply(`${c}`, data)
  41. }, 1000, event, channel, content)
  42. return '开始了'
  43. } else if (type == 'end') {
  44. clearInterval(this.myTimer);
  45. return '停止了'
  46. } else {
  47. return 'ohther'
  48. }
  49. }
  50. /**
  51. * 执行任务
  52. */
  53. doJob(jobId, action, event) {
  54. let res = {};
  55. let oneTask;
  56. const channel = 'controller.framework.timerJobProgress';
  57. if (action == 'create') {
  58. // 执行任务及监听进度
  59. const timerTask = this.myJob.exec('./jobs/example/timer', {jobId});
  60. timerTask.emitter.on('job-timer-progress', (data) => {
  61. Log.info('[main-process] timerTask, from TimerJob data:', data);
  62. // 发送数据到渲染进程
  63. event.sender.send(`${channel}`, data)
  64. })
  65. // 执行任务及监听进度 异步
  66. // myjob.execPromise('./jobs/example/timer', {jobId}).then(task => {
  67. // task.emitter.on('job-timer-progress', (data) => {
  68. // Log.info('[main-process] timerTask, from TimerJob data:', data);
  69. // // 发送数据到渲染进程
  70. // event.sender.send(`${channel}`, data)
  71. // })
  72. // });
  73. res.pid = timerTask.pid;
  74. this.taskForJob[jobId] = timerTask;
  75. }
  76. if (action == 'close') {
  77. oneTask = this.taskForJob[jobId];
  78. oneTask.kill();
  79. event.sender.send(`${channel}`, {jobId, number:0, pid:0});
  80. }
  81. return res;
  82. }
  83. /**
  84. * 创建pool
  85. */
  86. doCreatePool(num, event) {
  87. const channel = 'controller.framework.createPoolNotice';
  88. this.myJobPool.create(num).then(pids => {
  89. event.reply(`${channel}`, pids);
  90. });
  91. }
  92. /**
  93. * 通过进程池执行任务
  94. */
  95. doJobByPool(jobId, action, event) {
  96. let res = {};
  97. const channel = 'controller.framework.timerJobProgress';
  98. if (action == 'run') {
  99. // 异步-执行任务及监听进度
  100. this.myJobPool.runPromise('./jobs/example/timer', {jobId}).then(task => {
  101. task.emitter.on('job-timer-progress', (data) => {
  102. Log.info('[main-process] [ChildPoolJob] timerTask, from TimerJob data:', data);
  103. // 发送数据到渲染进程
  104. event.sender.send(`${channel}`, data)
  105. })
  106. res.pid = task.pid;
  107. });
  108. }
  109. return res;
  110. }
  111. /**
  112. * test
  113. */
  114. monitorJob() {
  115. setInterval(() => {
  116. let jobPids = this.myJob.getPids();
  117. let jobPoolPids = this.myJobPool.getPids();
  118. Log.info(`[main-process] [monitorJob] jobPids: ${jobPids}, jobPoolPids: ${jobPoolPids}`);
  119. }, 5000)
  120. }
  121. /**
  122. * 上传到smms
  123. */
  124. async uploadFileToSMMS(tmpFile) {
  125. const res = {
  126. code: 1000,
  127. message: 'unknown error',
  128. };
  129. try {
  130. const headersObj = {
  131. 'Content-Type': 'multipart/form-data',
  132. 'Authorization': 'aaaaaaaaaaaaa' // 请修改这个token,用你自己的账号token
  133. };
  134. const url = 'https://sm.ms/api/v2/upload';
  135. const response = await this.app.curl(url, {
  136. method: 'POST',
  137. headers: headersObj,
  138. files: {
  139. smfile: tmpFile,
  140. },
  141. dataType: 'json',
  142. timeout: 15000,
  143. });
  144. const result = response.data;
  145. if (this.app.config.env === 'local') {
  146. Log.info('[FrameworkService] [uploadFileToSMMS]: info result:%j', result);
  147. }
  148. if (result.code !== 'success') {
  149. Log.error('[FrameworkService] [uploadFileToSMMS]: res error result:%j', result);
  150. }
  151. return result;
  152. } catch (e) {
  153. Log.error('[FrameworkService] [uploadFileToSMMS]: ERROR ', e);
  154. }
  155. return res;
  156. }
  157. }
  158. FrameworkService.toString = () => '[class FrameworkService]';
  159. module.exports = FrameworkService;