mm_os 4.1.2 → 4.1.3

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.
Files changed (3) hide show
  1. package/package.json +1 -1
  2. package/server.js +2 -2
  3. package/tcp.js +276 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mm_os",
3
3
  "description": "MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。",
4
- "version": "4.1.2",
4
+ "version": "4.1.3",
5
5
  "main": "index.js",
6
6
  "keywords": [
7
7
  "AI",
package/server.js CHANGED
@@ -12,8 +12,8 @@ const {
12
12
  Config
13
13
  } = require('mm_config');
14
14
 
15
- const { TCP } = require('./tpc');
16
- const { Software } = require('./software');
15
+ const { TCP } = require('./tcp.js');
16
+ const { Software } = require('./software.js');
17
17
 
18
18
  const {
19
19
  Com
package/tcp.js ADDED
@@ -0,0 +1,276 @@
1
+ const {
2
+ Manager
3
+ } = require('mm_machine');
4
+ const {
5
+ Web
6
+ } = require('./adapter/web.js');
7
+ const {
8
+ Mqtt
9
+ } = require('./adapter/mqtt.js');
10
+ const {
11
+ Socket
12
+ } = require('./adapter/socket.js');
13
+ const {
14
+ WebSocket
15
+ } = require('./adapter/websocket.js');
16
+
17
+ const {
18
+ Middleware
19
+ } = require('./core/middleware/index.js');
20
+ const {
21
+ Notifier
22
+ } = require('./core/notifier/index.js');
23
+ const {
24
+ Pusher
25
+ } = require('./core/pusher/index.js');
26
+ const {
27
+ Sender
28
+ } = require('./core/sender/index.js');
29
+
30
+ /**
31
+ * TCP类
32
+ * 负责管理整个应用的服务端架构
33
+ */
34
+ class TCP {
35
+ constructor(config, parent) {
36
+ this.getParent = function () {
37
+ return parent;
38
+ };
39
+ }
40
+ }
41
+
42
+ /**
43
+ * 获取适配器
44
+ */
45
+ TCP.prototype.getAdapter = function () {
46
+ return this.getParent().adapter;
47
+ };
48
+
49
+ /**
50
+ * 获取管理器
51
+ */
52
+ TCP.prototype.getManager = function () {
53
+ return this.getParent().manager;
54
+ };
55
+
56
+ /**
57
+ * 加载
58
+ */
59
+ TCP.prototype.load = async function () {
60
+ // 初始化管理器
61
+ await this._initManager();
62
+ // 加载资源
63
+ await this._loadSources();
64
+ };
65
+
66
+ /**
67
+ * 加载资源
68
+ */
69
+ TCP.prototype._loadSources = async function () {
70
+ let manager = this.getManager();
71
+ await Promise.all([
72
+ manager.middleware.runAll('load'),
73
+ manager.notifier.runAll('load'),
74
+ manager.sender.runAll('load'),
75
+ manager.pusher.runAll('load')
76
+ ]);
77
+ };
78
+
79
+ /**
80
+ * 初始化
81
+ */
82
+ TCP.prototype.init = async function () {
83
+ // 初始化适配器
84
+ await this._initAdapter();
85
+ // 初始化管理器
86
+ await this._initManager();
87
+ // 初始化资源
88
+ await this._initSources();
89
+ };
90
+
91
+ /**
92
+ * 初始化资源
93
+ */
94
+ TCP.prototype._initSources = async function () {
95
+ let server = this.getParent();
96
+ let manager = server.manager;
97
+ let adapter = server.adapter;
98
+ await Promise.all([
99
+ manager.notifier.runAll('init', adapter, server.eventer, server.logger),
100
+ manager.sender.runAll('init', adapter, server.eventer, server.logger),
101
+ manager.pusher.runAll('init', adapter, server.eventer, server.logger),
102
+ manager.middleware.runWait('init', adapter, server.eventer, server.logger)
103
+ ]);
104
+ };
105
+
106
+ /**
107
+ * 初始化适配器
108
+ */
109
+ TCP.prototype._initAdapter = async function () {
110
+ let server = this.getParent();
111
+ let config = server.config;
112
+ // http服务器
113
+ var web = new Web(config.web);
114
+ let adapter = server.adapter;
115
+ adapter.web = web;
116
+ web.init(server);
117
+ if (config.web.socket) {
118
+ // websocket服务器 - 与web服务器共享同一个端口
119
+ adapter.ws = await new WebSocket(config.web).init(web);
120
+ }
121
+ if (config.mqtt && config.mqtt.state) {
122
+ // mqtt服务器
123
+ adapter.mqtt = await new Mqtt(config.mqtt).init(server);
124
+ }
125
+ if (config.socket && config.socket.state) {
126
+ // socket服务器
127
+ adapter.socket = await new Socket(config.socket || {}).init(server);
128
+ }
129
+ };
130
+
131
+ /**
132
+ * 初始化管理器
133
+ */
134
+ TCP.prototype._initManager = async function () {
135
+ // console.time('[TIMING] _initManager');
136
+ // 管理器配置列表
137
+ var infos = [
138
+ { name: 'middleware', title: '中间件', Module: Middleware },
139
+ { name: 'notifier', title: '通知器', Module: Notifier },
140
+ { name: 'sender', title: '消息发送器', Module: Sender },
141
+ { name: 'pusher', title: '广播器', Module: Pusher }
142
+ ];
143
+
144
+ // 管理器实例集合
145
+ var managers = [];
146
+
147
+ // 使用for循环初始化所有管理器
148
+ for (var i = 0; i < infos.length; i++) {
149
+ var config = infos[i];
150
+ var manager = this._createManager(config.name, config.title, config.Module);
151
+ managers.push(manager);
152
+ }
153
+
154
+ // 并行执行所有管理器的初始化操作
155
+ var list = [];
156
+ for (var j = 0; j < managers.length; j++) {
157
+ list.push(managers[j].do('init'));
158
+ }
159
+
160
+ await Promise.all(list);
161
+ // console.timeEnd('[TIMING] _initManager');
162
+ };
163
+
164
+ /**
165
+ * 创建管理器实例
166
+ * @param {string} name 管理器名称
167
+ * @param {string} title 管理器标题
168
+ * @param {Function} cls 管理器类
169
+ * @returns {object} 管理器实例
170
+ */
171
+ TCP.prototype._createManager = function (name, title, cls) {
172
+ let server = this.getParent();
173
+ var manager = new Manager(
174
+ {
175
+ name: name,
176
+ title: title,
177
+ filename: name + '.json',
178
+ tpl_dir: `./core/${name}/`.fullname(__dirname),
179
+ base_dir: `./common/${name}/`.fullname(__dirname),
180
+ dir: `./${name}`.fullname()
181
+ },
182
+ server,
183
+ server[name],
184
+ cls
185
+ );
186
+ // 设置到对应的管理器属性
187
+ server.manager[name] = manager;
188
+ return manager;
189
+ }
190
+
191
+ /**
192
+ * 启动
193
+ */
194
+ TCP.prototype.start = async function () {
195
+ await this._startSources();
196
+ await this._startAdapter();
197
+ };
198
+
199
+ /**
200
+ * 启动资源
201
+ */
202
+ TCP.prototype._startSources = async function () {
203
+ let manager = this.getManager();
204
+ await Promise.all([
205
+ manager.middleware.runAll('start'),
206
+ manager.notifier.runAll('start'),
207
+ manager.sender.runAll('start'),
208
+ manager.pusher.runAll('start')
209
+ ]);
210
+ };
211
+
212
+ /**
213
+ * 启动适配器
214
+ */
215
+ TCP.prototype._startAdapter = async function () {
216
+ let list = [];
217
+ let adapter = this.getAdapter();
218
+ for (var k in adapter) {
219
+ try {
220
+ list.push(adapter[k].start());
221
+ } catch (error) {
222
+ this.log('error', '启动适配器失败:', error);
223
+ }
224
+ }
225
+ await Promise.all(list);
226
+ };
227
+
228
+ /**
229
+ * 停止
230
+ */
231
+ TCP.prototype.stop = async function () {
232
+ // 停止适配器
233
+ await this._stopAdapter();
234
+ // 停止资源
235
+ await this._stopSources();
236
+ };
237
+
238
+ /**
239
+ * 停止适配器
240
+ */
241
+ TCP.prototype._stopAdapter = async function () {
242
+ for (var k in this.getAdapter()) {
243
+ try {
244
+ await this.getAdapter()[k].stop();
245
+ } catch (error) {
246
+ this.log('error', '停止适配器失败:', error);
247
+ }
248
+ }
249
+ };
250
+
251
+ /**
252
+ * 停止资源
253
+ */
254
+ TCP.prototype._stopSources = async function () {
255
+ let manager = this.getManager();
256
+ await Promise.all([
257
+ manager.middleware.runAll('stop'),
258
+ manager.notifier.runAll('stop'),
259
+ manager.pusher.runAll('stop'),
260
+ manager.sender.runAll('stop')
261
+ ]);
262
+ };
263
+
264
+ /**
265
+ * 运行
266
+ */
267
+ TCP.prototype.run = async function () {
268
+ await this.load();
269
+ await this.init();
270
+ await this.start();
271
+ return this;
272
+ };
273
+
274
+ module.exports = {
275
+ TCP
276
+ };