framework.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. 'use strict';
  2. const path = require('path');
  3. const fs = require('fs');
  4. const { exec } = require('child_process');
  5. const { Controller } = require('ee-core');
  6. const { app: electronApp, shell } = require('electron');
  7. const dayjs = require('dayjs');
  8. const Ps = require('ee-core/ps');
  9. const Log = require('ee-core/log');
  10. const Utils = require('ee-core/utils');
  11. const Conf = require('ee-core/config');
  12. /**
  13. * electron-egg framework - 功能demo
  14. * @class
  15. */
  16. class FrameworkController extends Controller {
  17. constructor(ctx) {
  18. super(ctx);
  19. }
  20. /**
  21. * 所有方法接收两个参数
  22. * @param args 前端传的参数
  23. * @param event - ipc通信时才有值。详情见:控制器文档
  24. */
  25. /**
  26. * test
  27. */
  28. async test() {
  29. const result = await this.service.framework.test('electron');
  30. // let tmpDir = Ps.getLogDir();
  31. // Log.info('tmpDir:', tmpDir);
  32. let mid = await Utils.machineIdSync(true);
  33. Log.info('mid 11111111:', mid);
  34. Utils.machineId().then((id) => {
  35. Log.info('mid 222222222:', id);
  36. });
  37. return result;
  38. }
  39. /**
  40. * json数据库操作
  41. */
  42. async dbOperation(args) {
  43. const { service } = this;
  44. const paramsObj = args;
  45. //Log.info('eeeee paramsObj:', paramsObj);
  46. const data = {
  47. action: paramsObj.action,
  48. result: null,
  49. all_list: []
  50. };
  51. switch (paramsObj.action) {
  52. case 'add' :
  53. data.result = await service.storage.addTestData(paramsObj.info);;
  54. break;
  55. case 'del' :
  56. data.result = await service.storage.delTestData(paramsObj.delete_name);;
  57. break;
  58. case 'update' :
  59. data.result = await service.storage.updateTestData(paramsObj.update_name, paramsObj.update_age);
  60. break;
  61. case 'get' :
  62. data.result = await service.storage.getTestData(paramsObj.search_age);
  63. break;
  64. }
  65. data.all_list = await service.storage.getAllTestData();
  66. return data;
  67. }
  68. /**
  69. * sqlite数据库操作
  70. */
  71. async sqlitedbOperation(args) {
  72. const { service } = this;
  73. const paramsObj = args;
  74. //Log.info('eeeee paramsObj:', paramsObj);
  75. const data = {
  76. action: paramsObj.action,
  77. result: null,
  78. all_list: []
  79. };
  80. switch (paramsObj.action) {
  81. case 'add' :
  82. data.result = await service.storage.addTestDataSqlite(paramsObj.info);;
  83. break;
  84. case 'del' :
  85. data.result = await service.storage.delTestDataSqlite(paramsObj.delete_name);;
  86. break;
  87. case 'update' :
  88. data.result = await service.storage.updateTestDataSqlite(paramsObj.update_name, paramsObj.update_age);
  89. break;
  90. case 'get' :
  91. data.result = await service.storage.getTestDataSqlite(paramsObj.search_age);
  92. break;
  93. case 'getDataDir' :
  94. data.result = await service.storage.getDataDir();
  95. break;
  96. case 'setDataDir' :
  97. data.result = await service.storage.setCustomDataDir(paramsObj.data_dir);
  98. break;
  99. }
  100. data.all_list = await service.storage.getAllTestDataSqlite();
  101. return data;
  102. }
  103. /**
  104. * 调用其它程序(exe、bash等可执行程序)
  105. */
  106. openSoftware(softName) {
  107. if (!softName) {
  108. return false;
  109. }
  110. let softwarePath = path.join(Ps.getExtraResourcesDir(), softName);
  111. Log.info('[openSoftware] softwarePath:', softwarePath);
  112. // 检查程序是否存在
  113. if (!fs.existsSync(softwarePath)) {
  114. return false;
  115. }
  116. // 命令行字符串 并 执行
  117. let cmdStr = 'start ' + softwarePath;
  118. exec(cmdStr);
  119. return true;
  120. }
  121. /**
  122. * 检查是否有新版本
  123. */
  124. checkForUpdater() {
  125. const autoUpdaterAddon = this.app.addon.autoUpdater;
  126. autoUpdaterAddon.checkUpdate();
  127. return;
  128. }
  129. /**
  130. * 下载新版本
  131. */
  132. downloadApp() {
  133. const autoUpdaterAddon = this.app.addon.autoUpdater;
  134. autoUpdaterAddon.download();
  135. return;
  136. }
  137. /**
  138. * 检测http服务是否开启
  139. */
  140. async checkHttpServer() {
  141. const httpServerConfig = Conf.getValue('httpServer');
  142. const url = httpServerConfig.protocol + httpServerConfig.host + ':' + httpServerConfig.port;
  143. const data = {
  144. enable: httpServerConfig.enable,
  145. server: url
  146. }
  147. return data;
  148. }
  149. /**
  150. * 一个http请求访问此方法
  151. */
  152. async doHttpRequest() {
  153. // http方法
  154. const method = this.app.request.method;
  155. // http get 参数
  156. let params = this.app.request.query;
  157. params = (params instanceof Object) ? params : JSON.parse(JSON.stringify(params));
  158. // http post 参数
  159. const body = this.app.request.body;
  160. const httpInfo = {
  161. method,
  162. params,
  163. body
  164. }
  165. Log.info('httpInfo:', httpInfo);
  166. if (!body.id) {
  167. return false;
  168. }
  169. const dir = electronApp.getPath(body.id);
  170. shell.openPath(dir);
  171. return true;
  172. }
  173. /**
  174. * 一个socket io请求访问此方法
  175. */
  176. async doSocketRequest(args) {
  177. if (!args.id) {
  178. return false;
  179. }
  180. const dir = electronApp.getPath(args.id);
  181. shell.openPath(dir);
  182. return true;
  183. }
  184. /**
  185. * 异步消息类型
  186. */
  187. async ipcInvokeMsg(args, event) {
  188. let timeNow = dayjs().format('YYYY-MM-DD HH:mm:ss');
  189. const data = args + ' - ' + timeNow;
  190. return data;
  191. }
  192. /**
  193. * 同步消息类型
  194. */
  195. async ipcSendSyncMsg(args) {
  196. let timeNow = dayjs().format('YYYY-MM-DD HH:mm:ss');
  197. const data = args + ' - ' + timeNow;
  198. return data;
  199. }
  200. /**
  201. * 双向异步通信
  202. */
  203. async ipcSendMsg(args, event) {
  204. const { type, content } = args;
  205. const data = await this.service.framework.bothWayMessage(type, content, event);
  206. return data;
  207. }
  208. /**
  209. * 上传文件
  210. */
  211. async uploadFile() {
  212. let tmpDir = Ps.getLogDir();
  213. const files = this.app.request.files;
  214. let file = files.file;
  215. let tmpFilePath = path.join(tmpDir, file.originalFilename);
  216. try {
  217. let tmpFile = fs.readFileSync(file.filepath);
  218. fs.writeFileSync(tmpFilePath, tmpFile);
  219. } finally {
  220. await fs.unlink(file.filepath, function(){});
  221. }
  222. const fileStream = fs.createReadStream(tmpFilePath);
  223. const uploadRes = await this.service.framework.uploadFileToSMMS(fileStream);
  224. return uploadRes;
  225. }
  226. /**
  227. * 启动java项目
  228. */
  229. async startJavaServer() {
  230. let data = {
  231. code: 0,
  232. msg: '',
  233. server: ''
  234. }
  235. const javaCfg = Conf.getValue('addons.javaServer') || {};
  236. if (!javaCfg.enable) {
  237. data.code = -1;
  238. data.msg = 'addon not enabled!';
  239. return data;
  240. }
  241. const javaServerAddon = this.app.addon.javaServer;
  242. await javaServerAddon.createServer();
  243. data.server = 'http://localhost:' + javaCfg.port;
  244. return data;
  245. }
  246. /**
  247. * 关闭java项目
  248. */
  249. async closeJavaServer() {
  250. let data = {
  251. code: 0,
  252. msg: '',
  253. }
  254. const javaCfg = Conf.getValue('addons.javaServer') || {};
  255. if (!javaCfg.enable) {
  256. data.code = -1;
  257. data.msg = 'addon not enabled!';
  258. return data;
  259. }
  260. const javaServerAddon = this.app.addon.javaServer;
  261. await javaServerAddon.kill();
  262. return data;
  263. }
  264. /**
  265. * 任务
  266. */
  267. someJob(args, event) {
  268. let jobId = args.id;
  269. let action = args.action;
  270. let result;
  271. switch (action) {
  272. case 'create':
  273. result = this.service.framework.doJob(jobId, action, event);
  274. break;
  275. case 'close':
  276. this.service.framework.doJob(jobId, action, event);
  277. break;
  278. default:
  279. }
  280. let data = {
  281. jobId,
  282. action,
  283. result
  284. }
  285. return data;
  286. }
  287. /**
  288. * 创建任务池
  289. */
  290. async createPool(args, event) {
  291. let num = args.number;
  292. this.service.framework.doCreatePool(num, event);
  293. // test monitor
  294. this.service.framework.monitorJob();
  295. return;
  296. }
  297. /**
  298. * 通过进程池执行任务
  299. */
  300. someJobByPool(args, event) {
  301. let jobId = args.id;
  302. let action = args.action;
  303. let result;
  304. switch (action) {
  305. case 'run':
  306. result = this.service.framework.doJobByPool(jobId, action, event);
  307. break;
  308. default:
  309. }
  310. let data = {
  311. jobId,
  312. action,
  313. result
  314. }
  315. return data;
  316. }
  317. /**
  318. * 测试接口
  319. */
  320. hello(args) {
  321. Log.info('hello ', args);
  322. }
  323. }
  324. FrameworkController.toString = () => '[class FrameworkController]';
  325. module.exports = FrameworkController;