mm_os 4.2.6 → 4.2.8

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 (74) hide show
  1. package/README.md +1 -1
  2. package/README_EN.md +2 -2
  3. package/adapter/adapter.js +105 -52
  4. package/adapter/custom_persistence.js +32 -31
  5. package/adapter/mqtt.js +59 -79
  6. package/adapter/socket.js +188 -58
  7. package/adapter/web.js +92 -68
  8. package/adapter/websocket.js +43 -146
  9. package/com/api/drive.js +732 -708
  10. package/com/api/index.js +196 -198
  11. package/com/cmd/config.tpl.json +48 -122
  12. package/com/cmd/drive.js +176 -1548
  13. package/com/cmd/index.js +287 -1066
  14. package/com/cmd/job/config.json +66 -0
  15. package/com/cmd/job/index.js +241 -0
  16. package/com/cmd/job/test.js +188 -0
  17. package/com/cmd/script.tpl.js +12 -33
  18. package/com/db/drive.js +2206 -2019
  19. package/com/db/index.js +241 -242
  20. package/com/event/config.tpl.json +3 -1
  21. package/com/event/drive.js +3 -1
  22. package/com/event/index.js +73 -49
  23. package/com/event/script.tpl.js +1 -1
  24. package/com/mqtt/config.tpl.json +16 -8
  25. package/com/mqtt/drive.js +696 -676
  26. package/com/mqtt/index.js +1012 -822
  27. package/com/mqtt/index.test.js +503 -0
  28. package/com/mqtt/mm_mqtt.js +446 -420
  29. package/com/mqtt/script.tpl.js +3 -7
  30. package/com/nav/drive.js +7 -7
  31. package/com/nav/index.js +228 -231
  32. package/com/param/index.js +19 -17
  33. package/com/pendant/index.js +467 -441
  34. package/com/socket/drive.js +679 -616
  35. package/com/socket/index.js +94 -48
  36. package/com/sql/drive.js +1283 -1259
  37. package/com/sql/index.js +152 -150
  38. package/com/static/drive.js +1 -1
  39. package/com/static/index.js +232 -226
  40. package/com/task/drive.js +428 -405
  41. package/com/task/index.js +154 -148
  42. package/com/template/drive.js +1 -1
  43. package/com/template/index.js +141 -138
  44. package/com.js +87 -6
  45. package/common/middleware/web_after/index.js +4 -10
  46. package/common/middleware/web_base/index.js +1 -1
  47. package/common/middleware/web_cors/index.js +1 -1
  48. package/common/middleware/web_error/index.js +131 -119
  49. package/common/middleware/web_error/middleware.json +2 -1
  50. package/common/middleware/web_logger/index.js +1 -1
  51. package/common/middleware/web_main/index.js +2 -0
  52. package/common/middleware/web_static/index.js +2 -2
  53. package/common/middleware/web_waf/index.js +1 -1
  54. package/core/app/config.tpl.json +4 -4
  55. package/core/app/index.js +710 -534
  56. package/core/middleware/index.js +1 -9
  57. package/core/mod/config.tpl.json +1 -1
  58. package/core/model/config.tpl.json +1 -1
  59. package/core/plugin/config.tpl.json +15 -3
  60. package/core/plugin/index.js +31 -0
  61. package/core/pusher/index.js +158 -161
  62. package/core/scene/loop.js +1306 -1255
  63. package/core/store/index.js +1794 -1755
  64. package/core/store/sql.js +1488 -1464
  65. package/core/zone/bat/index.js +744 -728
  66. package/core/zone/config.tpl.json +3 -3
  67. package/core/zone/index.js +655 -616
  68. package/os.js +0 -4
  69. package/package.json +16 -16
  70. package/server.js +583 -427
  71. package/com/cmd/nlp.js +0 -525
  72. package/core/app/index copy.js +0 -611
  73. package/software.js +0 -194
  74. package/tcp.js +0 -279
@@ -1,5 +1,5 @@
1
- const Manager = require('mm_machine').Manager;
2
- const Drive = require('./drive');
1
+ const Manager = require("mm_machine").Manager;
2
+ const Drive = require("./drive");
3
3
 
4
4
  /**
5
5
  * Event事件类
@@ -16,22 +16,22 @@ class Event extends Manager {
16
16
  * 名称
17
17
  * @type {string}
18
18
  */
19
- name: '',
19
+ name: "",
20
20
  /**
21
21
  * 标题
22
22
  * @type {string}
23
23
  */
24
- title: '事件管理',
24
+ title: "事件管理",
25
25
  /**
26
26
  * 描述
27
27
  * @type {string}
28
28
  */
29
- description: '这是事件管理器',
29
+ description: "这是事件管理器",
30
30
  /**
31
31
  * 检索文件名
32
32
  * @type {string}
33
33
  */
34
- filename: 'event.json',
34
+ filename: "event.json",
35
35
  /**
36
36
  * 模板目录
37
37
  * @type {string}
@@ -41,17 +41,17 @@ class Event extends Manager {
41
41
  * 基础目录
42
42
  * @type {string}
43
43
  */
44
- base_dir: '../common/event'.fullname(__dirname),
44
+ base_dir: "../common/event".fullname(__dirname),
45
45
  /**
46
46
  * 自定义目录,加载项目自定义资源
47
47
  * @type {string}
48
48
  */
49
- dir: './app'.fullname(),
49
+ dir: "./app".fullname(),
50
50
  /**
51
51
  * 搜索模式 dir按目录搜索 | file按文件名搜索
52
52
  * @type {string}
53
53
  */
54
- search_way: 'dir',
54
+ search_way: "dir",
55
55
  /**
56
56
  * 是否懒加载
57
57
  * @type {boolean}
@@ -66,7 +66,7 @@ class Event extends Manager {
66
66
  * 5.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本
67
67
  * @type {number}
68
68
  */
69
- mode: 3
69
+ mode: process.env.NODE_ENV === "production" ? 1 : 3,
70
70
  };
71
71
 
72
72
  /**
@@ -101,16 +101,42 @@ Event.prototype._preset = function () {
101
101
  */
102
102
  Event.prototype.Drive = Drive;
103
103
 
104
+ /**
105
+ * 更新配置,注册模块后重建事件列表
106
+ * @param {string} dir 检索路径
107
+ * @param {boolean} clear 是否清除缓存
108
+ */
109
+ Event.prototype.update = async function (dir, clear = true) {
110
+ try {
111
+ if (clear) {
112
+ this.clearMods();
113
+ }
114
+ var search_dir = dir || this.config.dir;
115
+ var files = await this._findFiles(search_dir);
116
+ this.regMods(files);
117
+ this.updateInfo();
118
+ if (!this.config.lazy_load) {
119
+ await this.loadMods();
120
+ }
121
+ this._is_loaded = true;
122
+ } catch (err) {
123
+ this.log("error", "更新配置失败", err);
124
+ }
125
+ };
126
+
104
127
  /**
105
128
  * 清除事件
106
129
  * @param {string} stage 阶段
107
130
  */
108
131
  Event.prototype.clear = function (stage) {
109
132
  if (stage) {
110
- if (this['list_' + stage]) {
111
- this['list_' + stage] = [];
133
+ if (this["list_" + stage]) {
134
+ this["list_" + stage] = [];
112
135
  } else {
113
- this.log('debug', '清空失败,事件发展阶段{0}不存在!'.replace('{0}', stage));
136
+ this.log(
137
+ "debug",
138
+ "清空失败,事件发展阶段{0}不存在!".replace("{0}", stage),
139
+ );
114
140
  }
115
141
  } else {
116
142
  this.list_before = [];
@@ -125,12 +151,20 @@ Event.prototype.clear = function (stage) {
125
151
  * 更新模块信息
126
152
  */
127
153
  Event.prototype.updateInfo = function () {
154
+ this._preset();
155
+ this.infos = [];
128
156
  for (let name in this.mods) {
129
157
  let o = this.mods[name];
130
- let info = this.newInfo(name, o.config.sort, o.config.state, o.config_file);
158
+ let info = {
159
+ name: o.config.name,
160
+ sort: o.config.sort,
161
+ state: o.config.state,
162
+ config_file: o.config_file,
163
+ };
164
+ this.infos.push(info);
131
165
  this.pushList(o.config.stage, info);
132
166
  }
133
- this.sort();
167
+ this._sort();
134
168
  };
135
169
 
136
170
  /**
@@ -140,19 +174,19 @@ Event.prototype.updateInfo = function () {
140
174
  */
141
175
  Event.prototype.pushList = function (stage, info) {
142
176
  switch (stage) {
143
- case 'before':
177
+ case "before":
144
178
  this.list_before.push(info);
145
179
  break;
146
- case 'check':
180
+ case "check":
147
181
  this.list_check.push(info);
148
182
  break;
149
- case 'main':
183
+ case "main":
150
184
  this.list_main.push(info);
151
185
  break;
152
- case 'render':
186
+ case "render":
153
187
  this.list_render.push(info);
154
188
  break;
155
- case 'after':
189
+ case "after":
156
190
  this.list_after.push(info);
157
191
  break;
158
192
  default:
@@ -176,7 +210,7 @@ Event.prototype._sort = function () {
176
210
  * @param {Array} list 列表
177
211
  */
178
212
  Event.prototype._sortSub = function (list) {
179
- var sort_key = this.config.sort_key || 'sort';
213
+ var sort_key = this.config.sort_key || "sort";
180
214
  list.sort((o1, o2) => {
181
215
  let s1 = o1[sort_key] || 100;
182
216
  let s2 = o2[sort_key] || 100;
@@ -194,21 +228,18 @@ Event.prototype._sortSub = function (list) {
194
228
 
195
229
  /**
196
230
  * 执行事件
197
- * @param {object} o 事件项
231
+ * @param {object} mod 模块
198
232
  * @param {object} ctx 请求上下文
199
233
  * @param {object} db 数据管理器
200
234
  * @returns {object} 执行结果
201
235
  */
202
- Event.prototype.doing = async function (o, ctx, db) {
203
- if (o.isLoaded()) {
204
- await o.call('loadScript');
205
- }
206
- var ret = o.run(ctx, db);
207
- if (types.isPromise(ret)) {
208
- ret = await ret;
236
+ Event.prototype.doing = async function (mod, ctx, db) {
237
+ if (!mod.isLoaded()) {
238
+ await mod.do("load");
209
239
  }
240
+ var ret = await mod.run(ctx, db);
210
241
  if (this.mode > 4) {
211
- o.do('reload');
242
+ mod.do("reload");
212
243
  }
213
244
  return ret;
214
245
  };
@@ -222,18 +253,17 @@ Event.prototype.doing = async function (o, ctx, db) {
222
253
  Event.prototype.isMatch = function (str, pattern) {
223
254
  if (str === pattern) {
224
255
  return true;
225
- } else if (pattern.startsWith('*')) {
226
- let clean = pattern.replaceAll('*', '');
227
- if (pattern.endsWith('*')) {
256
+ } else if (pattern.startsWith("*")) {
257
+ let clean = pattern.replaceAll("*", "");
258
+ if (pattern.endsWith("*")) {
228
259
  return str.indexOf(clean) !== -1;
229
260
  } else {
230
261
  return str.endsWith(clean);
231
262
  }
232
- } else if (pattern.endsWith('*')) {
233
- let clean = pattern.replaceAll('*', '');
263
+ } else if (pattern.endsWith("*")) {
264
+ let clean = pattern.replaceAll("*", "");
234
265
  return str.startsWith(clean);
235
- }
236
- else {
266
+ } else {
237
267
  return false;
238
268
  }
239
269
  };
@@ -247,18 +277,12 @@ Event.prototype.isMatch = function (str, pattern) {
247
277
  * @returns {object} 执行结果
248
278
  */
249
279
  Event.prototype.runSub = async function (list, target, ctx, db) {
250
- for (var i = 0, info; info = list[i++];) {
280
+ for (var i = 0, info; (info = list[i++]);) {
251
281
  if (info.state === 1) {
252
282
  let mod = this.getMod(info.name);
253
283
  if (mod && this.isMatch(target, mod.config.target)) {
254
284
  try {
255
- if (!mod.isLoaded()) {
256
- await mod.call('loadScript');
257
- }
258
- var ret = await mod.run(ctx, db);
259
- if (this.mode > 4) {
260
- mod.do('reload');
261
- }
285
+ let ret = await this.doing(mod, ctx, db);
262
286
  if (ret) {
263
287
  db.ret = ret;
264
288
  if (mod.config.end) {
@@ -267,7 +291,7 @@ Event.prototype.runSub = async function (list, target, ctx, db) {
267
291
  }
268
292
  } catch (error) {
269
293
  // 事件执行异常时继续执行下一个事件
270
- this.log('error', `事件${info.name}执行失败`, error);
294
+ this.log("error", `事件${info.name}执行失败`, error);
271
295
  }
272
296
  }
273
297
  }
@@ -358,9 +382,9 @@ Event.prototype.run = async function (target, ctx, db = {}) {
358
382
  * @param {string} stage 阶段
359
383
  * @returns {object} 返回单项配置
360
384
  */
361
- Event.prototype.get = function (name, stage = 'main') {
385
+ Event.prototype.get = function (name, stage = "main") {
362
386
  var obj;
363
- var lt = this['list_' + stage];
387
+ var lt = this["list_" + stage];
364
388
  var len = lt.length;
365
389
  for (var i = 0; i < len; i++) {
366
390
  var o = lt[i];
@@ -391,7 +415,7 @@ if (!$.pool.event) {
391
415
  * @returns {object} 返回一个事件类
392
416
  */
393
417
  function eventAdmin(scope, title) {
394
- var sc = scope || $.val.scope + '';
418
+ var sc = scope || $.val.scope + "";
395
419
  var obj = $.pool.event[sc];
396
420
  if (!obj) {
397
421
  $.pool.event[sc] = new Event({
@@ -20,4 +20,4 @@ exports = {
20
20
  $.push(db, sql.db(), true);
21
21
  return api.run(ctx, db);
22
22
  }
23
- }
23
+ };
@@ -7,12 +7,20 @@
7
7
  "description": "${description || '描述mqtt服务使用方法'}",
8
8
  // 状态 0未启用,1启用
9
9
  "state": 1,
10
- // 订阅的主题
11
- "topic": ["mqtt/face/#", "face/+/response", "mqtt/server/#"],
10
+ // 订阅的主题 {产品类型}/{设备ID}/{数据类型}/{子类型}
11
+ // 接收设备状态、事件、命令回复、设备请求
12
+ "topic": [
13
+ "face/+/status",
14
+ "face/+/event/recognition",
15
+ "face/+/cmd/+/response",
16
+ "face/+/request/+"
17
+ ],
12
18
  // 回复订阅主题
13
- "topic_receive": ["mqtt/face/${clientid}", "face/${clientid}/request"],
19
+ "topic_receive": [
20
+ "face/${clientid}/response/${method}"
21
+ ],
14
22
  // 给客户端推送的主题
15
- "topic_push": "mqtt/face/${clientid}",
23
+ "topic_push": "face/${clientid}/cmd/${method}",
16
24
  // 接收方式
17
25
  "qos": 2,
18
26
  // 保持接收
@@ -22,13 +30,13 @@
22
30
  // 客户端ID
23
31
  "clientid": "clientid",
24
32
  // 消息ID
25
- "msgid": "messageId",
33
+ "msgid": "msgid",
26
34
  // 请求方法
27
- "method": "operator",
35
+ "method": "method",
28
36
  // 参数
29
- "params": "info",
37
+ "params": "params",
30
38
  // 结果
31
39
  "result": "result",
32
40
  // 回复方法
33
- "method_receive": "${method}-Ack"
41
+ "method_receive": "${method}_ask"
34
42
  }