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.
- package/README.md +1 -1
- package/README_EN.md +2 -2
- package/adapter/adapter.js +105 -52
- package/adapter/custom_persistence.js +32 -31
- package/adapter/mqtt.js +59 -79
- package/adapter/socket.js +188 -58
- package/adapter/web.js +92 -68
- package/adapter/websocket.js +43 -146
- package/com/api/drive.js +732 -708
- package/com/api/index.js +196 -198
- package/com/cmd/config.tpl.json +48 -122
- package/com/cmd/drive.js +176 -1548
- package/com/cmd/index.js +287 -1066
- package/com/cmd/job/config.json +66 -0
- package/com/cmd/job/index.js +241 -0
- package/com/cmd/job/test.js +188 -0
- package/com/cmd/script.tpl.js +12 -33
- package/com/db/drive.js +2206 -2019
- package/com/db/index.js +241 -242
- package/com/event/config.tpl.json +3 -1
- package/com/event/drive.js +3 -1
- package/com/event/index.js +73 -49
- package/com/event/script.tpl.js +1 -1
- package/com/mqtt/config.tpl.json +16 -8
- package/com/mqtt/drive.js +696 -676
- package/com/mqtt/index.js +1012 -822
- package/com/mqtt/index.test.js +503 -0
- package/com/mqtt/mm_mqtt.js +446 -420
- package/com/mqtt/script.tpl.js +3 -7
- package/com/nav/drive.js +7 -7
- package/com/nav/index.js +228 -231
- package/com/param/index.js +19 -17
- package/com/pendant/index.js +467 -441
- package/com/socket/drive.js +679 -616
- package/com/socket/index.js +94 -48
- package/com/sql/drive.js +1283 -1259
- package/com/sql/index.js +152 -150
- package/com/static/drive.js +1 -1
- package/com/static/index.js +232 -226
- package/com/task/drive.js +428 -405
- package/com/task/index.js +154 -148
- package/com/template/drive.js +1 -1
- package/com/template/index.js +141 -138
- package/com.js +87 -6
- package/common/middleware/web_after/index.js +4 -10
- package/common/middleware/web_base/index.js +1 -1
- package/common/middleware/web_cors/index.js +1 -1
- package/common/middleware/web_error/index.js +131 -119
- package/common/middleware/web_error/middleware.json +2 -1
- package/common/middleware/web_logger/index.js +1 -1
- package/common/middleware/web_main/index.js +2 -0
- package/common/middleware/web_static/index.js +2 -2
- package/common/middleware/web_waf/index.js +1 -1
- package/core/app/config.tpl.json +4 -4
- package/core/app/index.js +710 -534
- package/core/middleware/index.js +1 -9
- package/core/mod/config.tpl.json +1 -1
- package/core/model/config.tpl.json +1 -1
- package/core/plugin/config.tpl.json +15 -3
- package/core/plugin/index.js +31 -0
- package/core/pusher/index.js +158 -161
- package/core/scene/loop.js +1306 -1255
- package/core/store/index.js +1794 -1755
- package/core/store/sql.js +1488 -1464
- package/core/zone/bat/index.js +744 -728
- package/core/zone/config.tpl.json +3 -3
- package/core/zone/index.js +655 -616
- package/os.js +0 -4
- package/package.json +16 -16
- package/server.js +583 -427
- package/com/cmd/nlp.js +0 -525
- package/core/app/index copy.js +0 -611
- package/software.js +0 -194
- package/tcp.js +0 -279
package/com/event/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const Manager = require(
|
|
2
|
-
const Drive = require(
|
|
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:
|
|
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:
|
|
44
|
+
base_dir: "../common/event".fullname(__dirname),
|
|
45
45
|
/**
|
|
46
46
|
* 自定义目录,加载项目自定义资源
|
|
47
47
|
* @type {string}
|
|
48
48
|
*/
|
|
49
|
-
dir:
|
|
49
|
+
dir: "./app".fullname(),
|
|
50
50
|
/**
|
|
51
51
|
* 搜索模式 dir按目录搜索 | file按文件名搜索
|
|
52
52
|
* @type {string}
|
|
53
53
|
*/
|
|
54
|
-
search_way:
|
|
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[
|
|
111
|
-
this[
|
|
133
|
+
if (this["list_" + stage]) {
|
|
134
|
+
this["list_" + stage] = [];
|
|
112
135
|
} else {
|
|
113
|
-
this.log(
|
|
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 =
|
|
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.
|
|
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
|
|
177
|
+
case "before":
|
|
144
178
|
this.list_before.push(info);
|
|
145
179
|
break;
|
|
146
|
-
case
|
|
180
|
+
case "check":
|
|
147
181
|
this.list_check.push(info);
|
|
148
182
|
break;
|
|
149
|
-
case
|
|
183
|
+
case "main":
|
|
150
184
|
this.list_main.push(info);
|
|
151
185
|
break;
|
|
152
|
-
case
|
|
186
|
+
case "render":
|
|
153
187
|
this.list_render.push(info);
|
|
154
188
|
break;
|
|
155
|
-
case
|
|
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 ||
|
|
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}
|
|
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 (
|
|
203
|
-
if (
|
|
204
|
-
await
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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 =
|
|
385
|
+
Event.prototype.get = function (name, stage = "main") {
|
|
362
386
|
var obj;
|
|
363
|
-
var lt = this[
|
|
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({
|
package/com/event/script.tpl.js
CHANGED
package/com/mqtt/config.tpl.json
CHANGED
|
@@ -7,12 +7,20 @@
|
|
|
7
7
|
"description": "${description || '描述mqtt服务使用方法'}",
|
|
8
8
|
// 状态 0未启用,1启用
|
|
9
9
|
"state": 1,
|
|
10
|
-
// 订阅的主题
|
|
11
|
-
|
|
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": [
|
|
19
|
+
"topic_receive": [
|
|
20
|
+
"face/${clientid}/response/${method}"
|
|
21
|
+
],
|
|
14
22
|
// 给客户端推送的主题
|
|
15
|
-
"topic_push": "
|
|
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": "
|
|
33
|
+
"msgid": "msgid",
|
|
26
34
|
// 请求方法
|
|
27
|
-
"method": "
|
|
35
|
+
"method": "method",
|
|
28
36
|
// 参数
|
|
29
|
-
"params": "
|
|
37
|
+
"params": "params",
|
|
30
38
|
// 结果
|
|
31
39
|
"result": "result",
|
|
32
40
|
// 回复方法
|
|
33
|
-
"method_receive": "${method}
|
|
41
|
+
"method_receive": "${method}_ask"
|
|
34
42
|
}
|