ee-core 1.5.2-beta.1 → 1.5.2-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +2 -2
- package/addon/window/index.js +91 -91
- package/bin/tools.js +18 -18
- package/config/config.default.js +280 -280
- package/core/index.js +12 -12
- package/core/lib/ee.js +218 -218
- package/core/lib/loader/context_loader.js +106 -106
- package/core/lib/loader/ee_loader.js +457 -457
- package/core/lib/loader/file_loader.js +325 -325
- package/core/lib/loader/mixin/addon.js +32 -32
- package/core/lib/loader/mixin/config.js +135 -135
- package/core/lib/loader/mixin/controller.js +124 -124
- package/core/lib/loader/mixin/service.js +28 -28
- package/core/lib/utils/base_context_class.js +34 -34
- package/core/lib/utils/index.js +127 -127
- package/core/lib/utils/sequencify.js +59 -59
- package/core/lib/utils/timing.js +77 -77
- package/index.js +49 -49
- package/lib/appLoader.js +53 -53
- package/lib/application.js +84 -84
- package/lib/baseApp.js +131 -131
- package/lib/constant.js +9 -9
- package/lib/eeApp.js +359 -359
- package/lib/httpclient.js +136 -136
- package/lib/logger.js +46 -46
- package/lib/socket/httpServer.js +142 -142
- package/lib/socket/io.js +23 -23
- package/lib/socket/ipcServer.js +108 -108
- package/lib/socket/socketClient.js +50 -50
- package/lib/socket/socketServer.js +76 -76
- package/lib/socket/start.js +22 -22
- package/lib/storage/index.js +33 -33
- package/lib/storage/lowdb/adapters/Base.js +15 -15
- package/lib/storage/lowdb/adapters/FileAsync.js +41 -41
- package/lib/storage/lowdb/adapters/FileSync.js +39 -39
- package/lib/storage/lowdb/adapters/LocalStorage.js +20 -20
- package/lib/storage/lowdb/adapters/Memory.js +8 -8
- package/lib/storage/lowdb/adapters/_stringify.js +4 -4
- package/lib/storage/lowdb/common.js +33 -33
- package/lib/storage/lowdb/fp.js +23 -23
- package/lib/storage/lowdb/{is-promise.js → isPromise.js} +5 -5
- package/lib/storage/lowdb/main.js +46 -46
- package/lib/storage/lowdb/nano.js +5 -5
- package/lib/storage/lowdbStorage.js +98 -98
- package/lib/storage/sqliteStorage.js +127 -127
- package/package.json +48 -48
- package/tools/encrypt.js +274 -274
- package/tools/replaceDist.js +61 -61
- package/utils/common.js +90 -90
- package/utils/index.js +246 -246
- package/utils/wrap.js +37 -37
package/lib/socket/io.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const IoServer = require('socket.io');
|
|
4
|
-
const IoClient = require('socket.io-client');
|
|
5
|
-
//const socketServer = require('./socketServer');
|
|
6
|
-
const socketClient = require('./socketClient');
|
|
7
|
-
const Koa = require('koa');
|
|
8
|
-
|
|
9
|
-
const EeSocket = {
|
|
10
|
-
getServer: () => {
|
|
11
|
-
//return socketServer.getInstance();
|
|
12
|
-
},
|
|
13
|
-
getClient: () => {
|
|
14
|
-
return socketClient.getInstance();
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
module.exports = {
|
|
20
|
-
IoServer,
|
|
21
|
-
IoClient,
|
|
22
|
-
EeSocket,
|
|
23
|
-
Koa
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const IoServer = require('socket.io');
|
|
4
|
+
const IoClient = require('socket.io-client');
|
|
5
|
+
//const socketServer = require('./socketServer');
|
|
6
|
+
const socketClient = require('./socketClient');
|
|
7
|
+
const Koa = require('koa');
|
|
8
|
+
|
|
9
|
+
const EeSocket = {
|
|
10
|
+
getServer: () => {
|
|
11
|
+
//return socketServer.getInstance();
|
|
12
|
+
},
|
|
13
|
+
getClient: () => {
|
|
14
|
+
return socketClient.getInstance();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
module.exports = {
|
|
20
|
+
IoServer,
|
|
21
|
+
IoClient,
|
|
22
|
+
EeSocket,
|
|
23
|
+
Koa
|
|
24
24
|
};
|
package/lib/socket/ipcServer.js
CHANGED
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const debug = require('debug')('ee-core:ipcServer');
|
|
4
|
-
const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
|
|
5
|
-
const is = require('is-type-of');
|
|
6
|
-
const { ipcMain } = require('electron');
|
|
7
|
-
const path = require('path');
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const globby = require('globby');
|
|
10
|
-
const utils = require('../../core/lib/utils');
|
|
11
|
-
const wrap = require('../../utils/wrap');
|
|
12
|
-
|
|
13
|
-
class IpcServer {
|
|
14
|
-
constructor (app) {
|
|
15
|
-
|
|
16
|
-
this.app = app;
|
|
17
|
-
this.consoleLogger = new EggConsoleLogger();
|
|
18
|
-
this.consoleLogger.info('[ee-core:socket:ipcMain] start ipcMain');
|
|
19
|
-
this.register();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
register () {
|
|
23
|
-
this.consoleLogger.info('[ee-core:socket:ipcMain] register channels');
|
|
24
|
-
|
|
25
|
-
const self = this;
|
|
26
|
-
// 遍历方法
|
|
27
|
-
const files = utils.filePatterns();
|
|
28
|
-
const directory = path.join(this.app.config.baseDir, 'controller');
|
|
29
|
-
const filepaths = globby.sync(files, { cwd: directory });
|
|
30
|
-
|
|
31
|
-
for (const filepath of filepaths) {
|
|
32
|
-
const fullpath = path.join(directory, filepath);
|
|
33
|
-
if (!fs.statSync(fullpath).isFile()) continue;
|
|
34
|
-
|
|
35
|
-
const properties = wrap.getProperties(filepath, {caseStyle: 'lower'});
|
|
36
|
-
const pathName = directory.split(/[/\\]/).slice(-1) + '.' + properties.join('.');
|
|
37
|
-
|
|
38
|
-
let fileObj = utils.loadFile(fullpath);
|
|
39
|
-
const fns = {};
|
|
40
|
-
// 为了统一,仅支持class文件
|
|
41
|
-
if (is.class(fileObj) || utils.isBytecodeClass(fileObj)) {
|
|
42
|
-
let proto = fileObj.prototype;
|
|
43
|
-
// 不遍历父类的方法
|
|
44
|
-
//while (proto !== Object.prototype) {
|
|
45
|
-
const keys = Object.getOwnPropertyNames(proto);
|
|
46
|
-
for (const key of keys) {
|
|
47
|
-
if (key === 'constructor') {
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
const d = Object.getOwnPropertyDescriptor(proto, key);
|
|
51
|
-
if (is.function(d.value) && !fns.hasOwnProperty(key)) {
|
|
52
|
-
fns[key] = 1;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//proto = Object.getPrototypeOf(proto);
|
|
56
|
-
//}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
debug('register class %s fns %j', pathName, fns);
|
|
60
|
-
|
|
61
|
-
for (const key in fns) {
|
|
62
|
-
let channel = pathName + '.' + key;
|
|
63
|
-
debug('register channel %s', channel);
|
|
64
|
-
|
|
65
|
-
function findFn (app, c) {
|
|
66
|
-
try {
|
|
67
|
-
// 找函数
|
|
68
|
-
const cmd = c;
|
|
69
|
-
let fn = null;
|
|
70
|
-
if (is.string(cmd)) {
|
|
71
|
-
const actions = cmd.split('.');
|
|
72
|
-
let obj = app;
|
|
73
|
-
actions.forEach(key => {
|
|
74
|
-
obj = obj[key];
|
|
75
|
-
if (!obj) throw new Error(`class or function '${key}' not exists`);
|
|
76
|
-
});
|
|
77
|
-
fn = obj;
|
|
78
|
-
}
|
|
79
|
-
if (!fn) throw new Error('function not exists');
|
|
80
|
-
|
|
81
|
-
return fn;
|
|
82
|
-
} catch (err) {
|
|
83
|
-
app.logger.error('[ee:socket:ipcMain] throw error:', err);
|
|
84
|
-
}
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// send/on 模型
|
|
89
|
-
ipcMain.on(channel, async (event, params) => {
|
|
90
|
-
const fn = findFn(self.app, channel);
|
|
91
|
-
const result = await fn.call(self.app, params, event);
|
|
92
|
-
|
|
93
|
-
event.returnValue = result;
|
|
94
|
-
event.reply(`${channel}`, result);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
// invoke/handle 模型
|
|
98
|
-
ipcMain.handle(channel, async (event, params) => {
|
|
99
|
-
const fn = findFn(self.app, channel);
|
|
100
|
-
const result = await fn.call(self.app, params, event);
|
|
101
|
-
|
|
102
|
-
return result;
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const debug = require('debug')('ee-core:ipcServer');
|
|
4
|
+
const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
|
|
5
|
+
const is = require('is-type-of');
|
|
6
|
+
const { ipcMain } = require('electron');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const globby = require('globby');
|
|
10
|
+
const utils = require('../../core/lib/utils');
|
|
11
|
+
const wrap = require('../../utils/wrap');
|
|
12
|
+
|
|
13
|
+
class IpcServer {
|
|
14
|
+
constructor (app) {
|
|
15
|
+
|
|
16
|
+
this.app = app;
|
|
17
|
+
this.consoleLogger = new EggConsoleLogger();
|
|
18
|
+
this.consoleLogger.info('[ee-core:socket:ipcMain] start ipcMain');
|
|
19
|
+
this.register();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
register () {
|
|
23
|
+
this.consoleLogger.info('[ee-core:socket:ipcMain] register channels');
|
|
24
|
+
|
|
25
|
+
const self = this;
|
|
26
|
+
// 遍历方法
|
|
27
|
+
const files = utils.filePatterns();
|
|
28
|
+
const directory = path.join(this.app.config.baseDir, 'controller');
|
|
29
|
+
const filepaths = globby.sync(files, { cwd: directory });
|
|
30
|
+
|
|
31
|
+
for (const filepath of filepaths) {
|
|
32
|
+
const fullpath = path.join(directory, filepath);
|
|
33
|
+
if (!fs.statSync(fullpath).isFile()) continue;
|
|
34
|
+
|
|
35
|
+
const properties = wrap.getProperties(filepath, {caseStyle: 'lower'});
|
|
36
|
+
const pathName = directory.split(/[/\\]/).slice(-1) + '.' + properties.join('.');
|
|
37
|
+
|
|
38
|
+
let fileObj = utils.loadFile(fullpath);
|
|
39
|
+
const fns = {};
|
|
40
|
+
// 为了统一,仅支持class文件
|
|
41
|
+
if (is.class(fileObj) || utils.isBytecodeClass(fileObj)) {
|
|
42
|
+
let proto = fileObj.prototype;
|
|
43
|
+
// 不遍历父类的方法
|
|
44
|
+
//while (proto !== Object.prototype) {
|
|
45
|
+
const keys = Object.getOwnPropertyNames(proto);
|
|
46
|
+
for (const key of keys) {
|
|
47
|
+
if (key === 'constructor') {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const d = Object.getOwnPropertyDescriptor(proto, key);
|
|
51
|
+
if (is.function(d.value) && !fns.hasOwnProperty(key)) {
|
|
52
|
+
fns[key] = 1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//proto = Object.getPrototypeOf(proto);
|
|
56
|
+
//}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
debug('register class %s fns %j', pathName, fns);
|
|
60
|
+
|
|
61
|
+
for (const key in fns) {
|
|
62
|
+
let channel = pathName + '.' + key;
|
|
63
|
+
debug('register channel %s', channel);
|
|
64
|
+
|
|
65
|
+
function findFn (app, c) {
|
|
66
|
+
try {
|
|
67
|
+
// 找函数
|
|
68
|
+
const cmd = c;
|
|
69
|
+
let fn = null;
|
|
70
|
+
if (is.string(cmd)) {
|
|
71
|
+
const actions = cmd.split('.');
|
|
72
|
+
let obj = app;
|
|
73
|
+
actions.forEach(key => {
|
|
74
|
+
obj = obj[key];
|
|
75
|
+
if (!obj) throw new Error(`class or function '${key}' not exists`);
|
|
76
|
+
});
|
|
77
|
+
fn = obj;
|
|
78
|
+
}
|
|
79
|
+
if (!fn) throw new Error('function not exists');
|
|
80
|
+
|
|
81
|
+
return fn;
|
|
82
|
+
} catch (err) {
|
|
83
|
+
app.logger.error('[ee:socket:ipcMain] throw error:', err);
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// send/on 模型
|
|
89
|
+
ipcMain.on(channel, async (event, params) => {
|
|
90
|
+
const fn = findFn(self.app, channel);
|
|
91
|
+
const result = await fn.call(self.app, params, event);
|
|
92
|
+
|
|
93
|
+
event.returnValue = result;
|
|
94
|
+
event.reply(`${channel}`, result);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// invoke/handle 模型
|
|
98
|
+
ipcMain.handle(channel, async (event, params) => {
|
|
99
|
+
const fn = findFn(self.app, channel);
|
|
100
|
+
const result = await fn.call(self.app, params, event);
|
|
101
|
+
|
|
102
|
+
return result;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
109
|
module.exports = IpcServer;
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('assert');
|
|
4
|
-
const IoClient = require('socket.io-client');
|
|
5
|
-
const constant = require('../constant');
|
|
6
|
-
const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
|
|
7
|
-
|
|
8
|
-
class SocketClient {
|
|
9
|
-
constructor (port) {
|
|
10
|
-
this.consoleLogger = new EggConsoleLogger();
|
|
11
|
-
port = port ? parseInt(port) : this.getSocketcPort();
|
|
12
|
-
|
|
13
|
-
assert(typeof port === 'number', 'port required, and must be a number');
|
|
14
|
-
this.consoleLogger.info('[ee-core:socket:client] start client');
|
|
15
|
-
|
|
16
|
-
const url = 'http://127.0.0.1:' + port;
|
|
17
|
-
this.consoleLogger.info('[ee-core:socket:client] url:', url);
|
|
18
|
-
this.client = IoClient(url);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
static getInstance (port) {
|
|
22
|
-
if (typeof this.instance === 'object') {
|
|
23
|
-
return this.instance;
|
|
24
|
-
}
|
|
25
|
-
this.instance = new SocketClient(port);
|
|
26
|
-
return this.instance;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
call (method = '', ...params) {
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
// 获取通信频道
|
|
32
|
-
const channel = constant.socketIo.channel.partySoftware;
|
|
33
|
-
this.client.emit(channel, { cmd: method, params: params }, (response) => {
|
|
34
|
-
resolve(response);
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
getCoreDB () {
|
|
40
|
-
const coreDB = require('../storage/index').JsonDB.connection('system');
|
|
41
|
-
return coreDB;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
getSocketcPort () {
|
|
45
|
-
const cdb = this.getCoreDB();
|
|
46
|
-
const port = cdb.getItem('config').socketServer.port;
|
|
47
|
-
return parseInt(port);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
const IoClient = require('socket.io-client');
|
|
5
|
+
const constant = require('../constant');
|
|
6
|
+
const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
|
|
7
|
+
|
|
8
|
+
class SocketClient {
|
|
9
|
+
constructor (port) {
|
|
10
|
+
this.consoleLogger = new EggConsoleLogger();
|
|
11
|
+
port = port ? parseInt(port) : this.getSocketcPort();
|
|
12
|
+
|
|
13
|
+
assert(typeof port === 'number', 'port required, and must be a number');
|
|
14
|
+
this.consoleLogger.info('[ee-core:socket:client] start client');
|
|
15
|
+
|
|
16
|
+
const url = 'http://127.0.0.1:' + port;
|
|
17
|
+
this.consoleLogger.info('[ee-core:socket:client] url:', url);
|
|
18
|
+
this.client = IoClient(url);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static getInstance (port) {
|
|
22
|
+
if (typeof this.instance === 'object') {
|
|
23
|
+
return this.instance;
|
|
24
|
+
}
|
|
25
|
+
this.instance = new SocketClient(port);
|
|
26
|
+
return this.instance;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
call (method = '', ...params) {
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
// 获取通信频道
|
|
32
|
+
const channel = constant.socketIo.channel.partySoftware;
|
|
33
|
+
this.client.emit(channel, { cmd: method, params: params }, (response) => {
|
|
34
|
+
resolve(response);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
getCoreDB () {
|
|
40
|
+
const coreDB = require('../storage/index').JsonDB.connection('system');
|
|
41
|
+
return coreDB;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
getSocketcPort () {
|
|
45
|
+
const cdb = this.getCoreDB();
|
|
46
|
+
const port = cdb.getItem('config').socketServer.port;
|
|
47
|
+
return parseInt(port);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
51
|
module.exports = SocketClient;
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('assert');
|
|
4
|
-
const { Server } = require('socket.io');
|
|
5
|
-
const constant = require('../constant');
|
|
6
|
-
const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
|
|
7
|
-
const is = require('is-type-of');
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* socket server
|
|
11
|
-
*/
|
|
12
|
-
class SocketServer {
|
|
13
|
-
constructor (app) {
|
|
14
|
-
this.app = app;
|
|
15
|
-
const options = this.app.config.socketServer;
|
|
16
|
-
this.consoleLogger = new EggConsoleLogger();
|
|
17
|
-
|
|
18
|
-
if (!options.enable) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
let port = process.env.EE_SOCKET_PORT ? parseInt(process.env.EE_SOCKET_PORT) : parseInt(this.getSocketPort());
|
|
23
|
-
assert(typeof port === 'number', 'socekt port required, and must be a number');
|
|
24
|
-
this.consoleLogger.info('[ee-core:socket:server] socket server port is:', port);
|
|
25
|
-
|
|
26
|
-
// let opt = Object.assign({}, options);
|
|
27
|
-
// delete opt.enable;
|
|
28
|
-
this.io = new Server(port, options);
|
|
29
|
-
this.connec();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
connec () {
|
|
33
|
-
const self = this;
|
|
34
|
-
this.consoleLogger.info('[ee-core:socket:server] connection .....');
|
|
35
|
-
this.io.on('connection', (socket) => {
|
|
36
|
-
const channel = constant.socketIo.channel.partySoftware;
|
|
37
|
-
socket.on(channel, async (message, callback) => {
|
|
38
|
-
self.consoleLogger.info('[ee-core:socket:server] socket id:' + socket.id + ' message cmd: ' + message.cmd);
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
// 找函数
|
|
42
|
-
const cmd = message.cmd;
|
|
43
|
-
const args = message.params;
|
|
44
|
-
let fn = null;
|
|
45
|
-
if (is.string(cmd)) {
|
|
46
|
-
const actions = cmd.split('.');
|
|
47
|
-
let obj = self.app;
|
|
48
|
-
actions.forEach(key => {
|
|
49
|
-
obj = obj[key];
|
|
50
|
-
if (!obj) throw new Error(`class or function '${key}' not exists`);
|
|
51
|
-
});
|
|
52
|
-
fn = obj;
|
|
53
|
-
}
|
|
54
|
-
if (!fn) throw new Error('function not exists');
|
|
55
|
-
|
|
56
|
-
const result = await fn.call(self.app, args);
|
|
57
|
-
callback(result);
|
|
58
|
-
} catch (err) {
|
|
59
|
-
self.app.console.error('[ee-core:socket:server] throw error:', err);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
getCoreDB () {
|
|
66
|
-
const coreDB = require('../storage/index').JsonDB.connection('system');
|
|
67
|
-
return coreDB;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
getSocketPort () {
|
|
71
|
-
const cdb = this.getCoreDB();
|
|
72
|
-
const port = cdb.getItem('config').socketServer.port;
|
|
73
|
-
return port;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
const { Server } = require('socket.io');
|
|
5
|
+
const constant = require('../constant');
|
|
6
|
+
const EggConsoleLogger = require('egg-logger').EggConsoleLogger;
|
|
7
|
+
const is = require('is-type-of');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* socket server
|
|
11
|
+
*/
|
|
12
|
+
class SocketServer {
|
|
13
|
+
constructor (app) {
|
|
14
|
+
this.app = app;
|
|
15
|
+
const options = this.app.config.socketServer;
|
|
16
|
+
this.consoleLogger = new EggConsoleLogger();
|
|
17
|
+
|
|
18
|
+
if (!options.enable) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
let port = process.env.EE_SOCKET_PORT ? parseInt(process.env.EE_SOCKET_PORT) : parseInt(this.getSocketPort());
|
|
23
|
+
assert(typeof port === 'number', 'socekt port required, and must be a number');
|
|
24
|
+
this.consoleLogger.info('[ee-core:socket:server] socket server port is:', port);
|
|
25
|
+
|
|
26
|
+
// let opt = Object.assign({}, options);
|
|
27
|
+
// delete opt.enable;
|
|
28
|
+
this.io = new Server(port, options);
|
|
29
|
+
this.connec();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
connec () {
|
|
33
|
+
const self = this;
|
|
34
|
+
this.consoleLogger.info('[ee-core:socket:server] connection .....');
|
|
35
|
+
this.io.on('connection', (socket) => {
|
|
36
|
+
const channel = constant.socketIo.channel.partySoftware;
|
|
37
|
+
socket.on(channel, async (message, callback) => {
|
|
38
|
+
self.consoleLogger.info('[ee-core:socket:server] socket id:' + socket.id + ' message cmd: ' + message.cmd);
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
// 找函数
|
|
42
|
+
const cmd = message.cmd;
|
|
43
|
+
const args = message.params;
|
|
44
|
+
let fn = null;
|
|
45
|
+
if (is.string(cmd)) {
|
|
46
|
+
const actions = cmd.split('.');
|
|
47
|
+
let obj = self.app;
|
|
48
|
+
actions.forEach(key => {
|
|
49
|
+
obj = obj[key];
|
|
50
|
+
if (!obj) throw new Error(`class or function '${key}' not exists`);
|
|
51
|
+
});
|
|
52
|
+
fn = obj;
|
|
53
|
+
}
|
|
54
|
+
if (!fn) throw new Error('function not exists');
|
|
55
|
+
|
|
56
|
+
const result = await fn.call(self.app, args);
|
|
57
|
+
callback(result);
|
|
58
|
+
} catch (err) {
|
|
59
|
+
self.app.console.error('[ee-core:socket:server] throw error:', err);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
getCoreDB () {
|
|
66
|
+
const coreDB = require('../storage/index').JsonDB.connection('system');
|
|
67
|
+
return coreDB;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
getSocketPort () {
|
|
71
|
+
const cdb = this.getCoreDB();
|
|
72
|
+
const port = cdb.getItem('config').socketServer.port;
|
|
73
|
+
return port;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
77
|
module.exports = SocketServer;
|
package/lib/socket/start.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const socketServer = require('./socketServer');
|
|
4
|
-
const ipcServer = require('./ipcServer');
|
|
5
|
-
const httpServer = require('./httpServer');
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* server
|
|
9
|
-
*/
|
|
10
|
-
module.exports = (app) => {
|
|
11
|
-
|
|
12
|
-
// 启动 socket server
|
|
13
|
-
new socketServer(app);
|
|
14
|
-
|
|
15
|
-
// 启动 http server
|
|
16
|
-
new httpServer(app);
|
|
17
|
-
|
|
18
|
-
// 启动 electron ipc server
|
|
19
|
-
new ipcServer(app);
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const socketServer = require('./socketServer');
|
|
4
|
+
const ipcServer = require('./ipcServer');
|
|
5
|
+
const httpServer = require('./httpServer');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* server
|
|
9
|
+
*/
|
|
10
|
+
module.exports = (app) => {
|
|
11
|
+
|
|
12
|
+
// 启动 socket server
|
|
13
|
+
new socketServer(app);
|
|
14
|
+
|
|
15
|
+
// 启动 http server
|
|
16
|
+
new httpServer(app);
|
|
17
|
+
|
|
18
|
+
// 启动 electron ipc server
|
|
19
|
+
new ipcServer(app);
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
package/lib/storage/index.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const assert = require('assert');
|
|
4
|
-
const _ = require('lodash');
|
|
5
|
-
const JsonDB = {};
|
|
6
|
-
|
|
7
|
-
JsonDB.connection = function (database, options = {}) {
|
|
8
|
-
let driver = options.driver || 'lowdb';
|
|
9
|
-
let opt = options.default || {};
|
|
10
|
-
if (!_.includes(['lowdb', 'sqlite'], driver)) {
|
|
11
|
-
assert(database, `db driver ${driver} is not supported`);
|
|
12
|
-
}
|
|
13
|
-
if (_.isEmpty(database)) {
|
|
14
|
-
assert(database, `db name ${database} Cannot be empty`);
|
|
15
|
-
}
|
|
16
|
-
let storage;
|
|
17
|
-
switch (driver) {
|
|
18
|
-
case 'lowdb':
|
|
19
|
-
const LowdbStorage = require('./lowdbStorage');
|
|
20
|
-
storage = new LowdbStorage(database);
|
|
21
|
-
break;
|
|
22
|
-
case 'sqlite':
|
|
23
|
-
const SqliteStorage = require('./sqliteStorage');
|
|
24
|
-
storage = new SqliteStorage(database, opt);
|
|
25
|
-
break;
|
|
26
|
-
default:
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return storage;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
module.exports = {
|
|
33
|
-
JsonDB
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
const _ = require('lodash');
|
|
5
|
+
const JsonDB = {};
|
|
6
|
+
|
|
7
|
+
JsonDB.connection = function (database, options = {}) {
|
|
8
|
+
let driver = options.driver || 'lowdb';
|
|
9
|
+
let opt = options.default || {};
|
|
10
|
+
if (!_.includes(['lowdb', 'sqlite'], driver)) {
|
|
11
|
+
assert(database, `db driver ${driver} is not supported`);
|
|
12
|
+
}
|
|
13
|
+
if (_.isEmpty(database)) {
|
|
14
|
+
assert(database, `db name ${database} Cannot be empty`);
|
|
15
|
+
}
|
|
16
|
+
let storage;
|
|
17
|
+
switch (driver) {
|
|
18
|
+
case 'lowdb':
|
|
19
|
+
const LowdbStorage = require('./lowdbStorage');
|
|
20
|
+
storage = new LowdbStorage(database);
|
|
21
|
+
break;
|
|
22
|
+
case 'sqlite':
|
|
23
|
+
const SqliteStorage = require('./sqliteStorage');
|
|
24
|
+
storage = new SqliteStorage(database, opt);
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return storage;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
module.exports = {
|
|
33
|
+
JsonDB
|
|
34
34
|
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
const stringify = require('./_stringify')
|
|
2
|
-
|
|
3
|
-
class Base {
|
|
4
|
-
constructor(
|
|
5
|
-
source,
|
|
6
|
-
{ defaultValue = {}, serialize = stringify, deserialize = JSON.parse } = {}
|
|
7
|
-
) {
|
|
8
|
-
this.source = source
|
|
9
|
-
this.defaultValue = defaultValue
|
|
10
|
-
this.serialize = serialize
|
|
11
|
-
this.deserialize = deserialize
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
module.exports = Base
|
|
1
|
+
const stringify = require('./_stringify')
|
|
2
|
+
|
|
3
|
+
class Base {
|
|
4
|
+
constructor(
|
|
5
|
+
source,
|
|
6
|
+
{ defaultValue = {}, serialize = stringify, deserialize = JSON.parse } = {}
|
|
7
|
+
) {
|
|
8
|
+
this.source = source
|
|
9
|
+
this.defaultValue = defaultValue
|
|
10
|
+
this.serialize = serialize
|
|
11
|
+
this.deserialize = deserialize
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module.exports = Base
|