From 010a63b5d1d4cbef5e620403c9f0e5feab45206a Mon Sep 17 00:00:00 2001 From: gaoshuaixing Date: Thu, 7 Jan 2021 14:15:54 +0800 Subject: [PATCH] socket io --- app/service/base.js | 40 ++++++++++++++++++++++++++++++-------- app/service/socket.js | 30 ++++++++++++++++++++++++++++ electron/api.js | 15 ++++++++++++++ electron/lib/AutoLaunch.js | 1 - package.json | 3 ++- 5 files changed, 79 insertions(+), 10 deletions(-) create mode 100644 app/service/socket.js diff --git a/app/service/base.js b/app/service/base.js index 1fa75e0..71316b4 100644 --- a/app/service/base.js +++ b/app/service/base.js @@ -1,9 +1,9 @@ 'use strict'; -const request = require('superagent'); const Service = require('egg').Service; class BaseService extends Service { + /* * ipc call */ @@ -17,14 +17,8 @@ class BaseService extends Service { return result; } - const port = this.service.storage.getElectronIPCPort(); - const url = 'localhost:' + port + '/send'; try { - const response = await request.post(url) - .send({ cmd: method, params: params }) - .set('accept', 'json'); - - result = JSON.parse(response.text); + result = await this.service.socket.call(method, params); } catch (err) { this.app.logger.error('[base] [ipcCall] request error:', err); result.err = 'request err'; @@ -33,6 +27,36 @@ class BaseService extends Service { return result; } + + /* + * ipc call + */ + // async ipcCall(method = '', ...params) { + // let result = { + // err: null, + // data: null + // }; + // if (!method) { + // result.err = 'Method does not exist'; + // return result; + // } + + // const port = this.service.storage.getElectronIPCPort(); + // const url = 'http://localhost:' + port + '/send'; + // try { + // const response = await request.post(url) + // .send({ cmd: method, params: params }) + // .set('accept', 'json'); + + // result = JSON.parse(response.text); + // } catch (err) { + // this.app.logger.error('[base] [ipcCall] request error:', err); + // result.err = 'request err'; + // } + // this.app.logger.info('[base] [ipcCall] result:', result); + + // return result; + // } } module.exports = BaseService; diff --git a/app/service/socket.js b/app/service/socket.js new file mode 100644 index 0000000..ad2b944 --- /dev/null +++ b/app/service/socket.js @@ -0,0 +1,30 @@ +'use strict'; + +const BaseService = require('./base'); +const io = require('socket.io-client'); + +this.instance = null; + +class SocketService extends BaseService { + + instance() { + if (!SocketService.instance) { + const port = this.service.storage.getElectronIPCPort(); + const url = 'http://localhost:' + port; + const instance = io(url); + SocketService.instance = instance; + } + return SocketService.instance; + } + + call (method = '', params) { + return new Promise((resolve, reject) => { + this.instance().emit('ipc', { cmd: method, params: params }, (response) => { + resolve(response); + }); + }); + } + +} + +module.exports = SocketService; diff --git a/electron/api.js b/electron/api.js index f91d876..c9c524e 100644 --- a/electron/api.js +++ b/electron/api.js @@ -4,6 +4,7 @@ const http = require('http'); const path = require('path'); const _ = require('lodash'); const storage = require('./storage'); +const socketIo = require('socket.io'); const apis = {}; @@ -57,6 +58,20 @@ exports.setup = async function () { } }); + // socket io + const io = socketIo(server); + io.on('connection', (socket) => { + socket.on('ipc', (message, callback) => { + ELog.info('[ api ] [setup] socket id:' + socket.id + ' message cmd: ' + message.cmd); + const data = apis[message.cmd](...message.params); + const result = { + err: null, + data: data, + }; + callback(result); + }); + }); + server.listen(port, listen, function() { ELog.info('[ api ] [setup] server is listening on', `${listen}:${port}`); }); diff --git a/electron/lib/AutoLaunch.js b/electron/lib/AutoLaunch.js index 464e252..c58939f 100644 --- a/electron/lib/AutoLaunch.js +++ b/electron/lib/AutoLaunch.js @@ -21,7 +21,6 @@ class AutoLaunch { isEnabled () { const enabled = app.getLoginItemSettings(LOGIN_SETTING_OPTIONS).openAtLogin; - console.log('AutoLaunch isEnabled:', enabled); return enabled; } } diff --git a/package.json b/package.json index 6afae5b..bcdd904 100644 --- a/package.json +++ b/package.json @@ -115,6 +115,7 @@ "lodash": "^4.17.11", "lowdb": "^1.0.0", "semver": "^5.4.1", - "superagent": "^6.1.0" + "socket.io": "^3.0.5", + "socket.io-client": "^3.0.5" } }