mm_os 3.3.1 → 4.0.0

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 (380) hide show
  1. package/LICENSE +21 -201
  2. package/README.md +491 -99
  3. package/README_EN.md +498 -0
  4. package/adapter/adapter.js +431 -0
  5. package/adapter/custom_persistence.js +660 -0
  6. package/adapter/mqtt.js +273 -0
  7. package/adapter/socket.js +113 -0
  8. package/adapter/web.js +67 -0
  9. package/adapter/websocket.js +146 -0
  10. package/com/api/com.json +5 -0
  11. package/{core/com → com}/api/config.tpl.json +8 -8
  12. package/com/api/drive.js +708 -0
  13. package/com/api/index.js +198 -0
  14. package/com/api/oauth.js +200 -0
  15. package/com/api/script.tpl.js +32 -0
  16. package/com/cmd/README.md +11 -0
  17. package/com/cmd/com.json +5 -0
  18. package/com/cmd/config.tpl.json +122 -0
  19. package/com/cmd/drive.js +1548 -0
  20. package/com/cmd/index.js +1066 -0
  21. package/com/cmd/msg.json +48 -0
  22. package/com/cmd/nlp.js +525 -0
  23. package/com/cmd/script.tpl.js +32 -0
  24. package/com/db/com.json +5 -0
  25. package/com/db/drive.js +1999 -0
  26. package/com/db/index.js +242 -0
  27. package/{core/com → com}/event/README.md +4 -4
  28. package/com/event/com.json +5 -0
  29. package/{core/com → com}/event/config.tpl.json +18 -18
  30. package/com/event/drive.js +59 -0
  31. package/com/event/index.js +409 -0
  32. package/com/event/script.tpl.js +23 -0
  33. package/com/mqtt/com.json +5 -0
  34. package/{core/com → com}/mqtt/config.tpl.json +3 -5
  35. package/com/mqtt/drive.js +676 -0
  36. package/com/mqtt/index.js +822 -0
  37. package/com/mqtt/mm_mqtt.js +425 -0
  38. package/com/mqtt/script.tpl.js +723 -0
  39. package/com/nav/com.json +5 -0
  40. package/com/nav/config.tpl.json +84 -0
  41. package/com/nav/drive.js +702 -0
  42. package/com/nav/index.js +231 -0
  43. package/{core/com → com}/nav/tpl/admin_pc/page_config.vue +280 -280
  44. package/{core/com → com}/nav/tpl/admin_pc/page_config_form.vue +194 -194
  45. package/com/nav/tpl/admin_pc/page_form.vue +180 -0
  46. package/com/nav/tpl/admin_pc/page_view.vue +124 -0
  47. package/com/nav/tpl/dev_pc/page_default.vue +247 -0
  48. package/com/nav/tpl/dev_pc/page_type.vue +313 -0
  49. package/com/nav/tpl/home_pc/page_default.vue +234 -0
  50. package/com/nav/tpl/home_pc/page_form.vue +137 -0
  51. package/com/nav/tpl/home_pc/page_list.vue +234 -0
  52. package/com/nav/tpl/home_pc/page_nav.vue +221 -0
  53. package/com/nav/tpl/home_pc/page_type.vue +234 -0
  54. package/com/nav/tpl/home_pc/page_view.vue +125 -0
  55. package/com/nav/tpl/home_phone/page_channel.vue +234 -0
  56. package/com/nav/tpl/home_phone/page_default.vue +234 -0
  57. package/com/nav/tpl/home_phone/page_form.vue +137 -0
  58. package/com/nav/tpl/home_phone/page_nav.vue +237 -0
  59. package/com/nav/tpl/home_phone/page_type.vue +234 -0
  60. package/com/nav/tpl/home_phone/page_view.vue +125 -0
  61. package/com/nav/viewmodel.js +446 -0
  62. package/com/param/com.json +5 -0
  63. package/{core/com → com}/param/config.tpl.json +7 -1
  64. package/com/param/drive.js +502 -0
  65. package/com/param/index.js +155 -0
  66. package/com/param/script.tpl.js +12 -0
  67. package/com/pendant/com.json +5 -0
  68. package/{core/com/component → com/pendant}/config.tpl.json +15 -13
  69. package/com/pendant/drive.js +204 -0
  70. package/com/pendant/index.js +441 -0
  71. package/com/pendant/pendant.html +16 -0
  72. package/com/pendant/script.tpl.js +18 -0
  73. package/com/socket/com.json +5 -0
  74. package/com/socket/config.tpl.json +12 -0
  75. package/com/socket/drive.js +651 -0
  76. package/com/socket/index.js +351 -0
  77. package/com/socket/script.tpl.js +41 -0
  78. package/com/sql/com.json +5 -0
  79. package/{core/com → com}/sql/config.tpl.json +13 -9
  80. package/com/sql/drive.js +1259 -0
  81. package/com/sql/index.js +150 -0
  82. package/com/sql/script.tpl.js +47 -0
  83. package/com/static/com.json +5 -0
  84. package/{core/com → com}/static/config.tpl.json +10 -6
  85. package/com/static/drive.js +194 -0
  86. package/com/static/index.js +226 -0
  87. package/com/static/script.tpl.js +28 -0
  88. package/com/task/com.json +5 -0
  89. package/{core/com → com}/task/config.tpl.json +4 -6
  90. package/com/task/drive.js +405 -0
  91. package/com/task/index.js +148 -0
  92. package/com/task/script.tpl.js +37 -0
  93. package/com/template/com.json +5 -0
  94. package/com/template/config.tpl.json +16 -0
  95. package/com/template/drive.js +80 -0
  96. package/com/template/index.js +141 -0
  97. package/com.js +156 -0
  98. package/common/README.md +2 -0
  99. package/common/handler/msg/handler.json +22 -0
  100. package/common/handler/msg/index.js +23 -0
  101. package/common/handler/player/handler.json +22 -0
  102. package/common/handler/player/index.js +287 -0
  103. package/common/handler/user/handler.json +22 -0
  104. package/common/handler/user/index.js +23 -0
  105. package/common/middleware/web_after/index.js +29 -0
  106. package/common/middleware/web_after/middleware.json +9 -0
  107. package/common/middleware/web_base/index.js +113 -0
  108. package/common/middleware/web_base/middleware.json +19 -0
  109. package/common/middleware/web_before/index.js +33 -0
  110. package/common/middleware/web_before/middleware.json +9 -0
  111. package/common/middleware/web_cors/index.js +87 -0
  112. package/common/middleware/web_cors/middleware.json +24 -0
  113. package/common/middleware/web_error/index.js +119 -0
  114. package/common/middleware/web_error/middleware.json +18 -0
  115. package/common/middleware/web_ip/index.js +15 -0
  116. package/common/middleware/web_ip/middleware.json +14 -0
  117. package/common/middleware/web_logger/index.js +156 -0
  118. package/common/middleware/web_logger/middleware.json +14 -0
  119. package/common/middleware/web_main/index.js +24 -0
  120. package/common/middleware/web_main/middleware.json +9 -0
  121. package/common/middleware/web_static/index.js +73 -0
  122. package/common/middleware/web_static/middleware.json +54 -0
  123. package/common/middleware/web_waf/index.js +385 -0
  124. package/common/middleware/web_waf/middleware.json +13 -0
  125. package/common/model/msg/index.js +88 -0
  126. package/common/model/msg/model.json +401 -0
  127. package/common/model/player/index.js +63 -0
  128. package/common/model/player/model.json +185 -0
  129. package/common/model/user/index.js +11 -0
  130. package/common/model/user/model.json +219 -0
  131. package/core/app/config.tpl.json +67 -0
  132. package/core/app/index.js +632 -0
  133. package/core/app/script.tpl.js +52 -0
  134. package/core/channel/index.js +899 -0
  135. package/core/channel/matcher.js +585 -0
  136. package/core/com/config.tpl.json +16 -0
  137. package/core/com/index.js +74 -0
  138. package/core/com/script.tpl.js +5 -0
  139. package/core/component/component.js +42 -0
  140. package/core/component/config.tpl.json +63 -0
  141. package/core/component/index.js +273 -0
  142. package/core/component/script.tpl.js +19 -0
  143. package/core/controller/config.tpl.json +14 -0
  144. package/core/controller/index.js +373 -0
  145. package/core/controller/script.tpl.js +27 -0
  146. package/core/factory/config.tpl.json +14 -0
  147. package/core/factory/entity.js +275 -0
  148. package/core/factory/index.js +241 -0
  149. package/core/factory/script.tpl.js +16 -0
  150. package/core/game/bat/index.js +137 -0
  151. package/core/game/bat/world.js +622 -0
  152. package/core/game/config.tpl.json +16 -0
  153. package/core/game/entity_admin.js +230 -0
  154. package/core/game/index.js +186 -0
  155. package/core/handler/config.tpl.json +22 -0
  156. package/core/handler/index.js +181 -0
  157. package/core/handler/script.tpl.js +23 -0
  158. package/core/logic/config.tpl.json +14 -0
  159. package/core/logic/index.js +59 -0
  160. package/core/logic/script.tpl.js +19 -0
  161. package/core/middleware/config.tpl.json +16 -0
  162. package/core/middleware/index.js +125 -0
  163. package/core/middleware/script.tpl.js +37 -0
  164. package/core/mod/config.tpl.json +22 -0
  165. package/core/mod/index.js +130 -0
  166. package/core/mod/script.tpl.js +34 -0
  167. package/core/model/config.tpl.json +219 -0
  168. package/core/model/index.js +272 -0
  169. package/core/model/model.js +27 -0
  170. package/core/model/script.tpl.js +20 -0
  171. package/core/notifier/config.tpl.json +14 -0
  172. package/core/notifier/index.js +77 -0
  173. package/core/notifier/script.tpl.js +20 -0
  174. package/core/plugin/config.tpl.json +24 -0
  175. package/core/plugin/index.js +232 -0
  176. package/core/plugin/script.tpl.js +51 -0
  177. package/core/pusher/config.tpl.json +14 -0
  178. package/core/pusher/index.js +161 -0
  179. package/core/pusher/script.tpl.js +20 -0
  180. package/core/room/bat/index.js +170 -0
  181. package/core/room/bat/room.js +524 -0
  182. package/core/room/config.tpl.json +20 -0
  183. package/core/room/index.js +249 -0
  184. package/core/room/room.js +61 -0
  185. package/core/scene/config.tpl.json +14 -0
  186. package/core/scene/index.js +466 -0
  187. package/core/scene/loop.js +1255 -0
  188. package/core/scene/map.js +28 -0
  189. package/core/scene/script.tpl.js +22 -0
  190. package/core/sender/config.tpl.json +14 -0
  191. package/core/sender/index.js +79 -0
  192. package/core/sender/script.tpl.js +20 -0
  193. package/core/service/config.tpl.json +14 -0
  194. package/core/service/index.js +100 -0
  195. package/core/service/script.tpl.js +25 -0
  196. package/core/store/config.tpl.json +26 -0
  197. package/core/store/index.js +1755 -0
  198. package/core/store/script.tpl.js +22 -0
  199. package/core/store/sql.js +1464 -0
  200. package/core/system/config.tpl.json +18 -0
  201. package/core/system/index.js +312 -0
  202. package/core/system/script.tpl.js +77 -0
  203. package/core/view/config.tpl.json +14 -0
  204. package/core/view/index.js +91 -0
  205. package/core/view/script.tpl.js +20 -0
  206. package/core/zone/bat/index.js +725 -0
  207. package/core/zone/config.tpl.json +54 -0
  208. package/core/zone/index.js +614 -0
  209. package/core/zone/script.tpl.js +10 -0
  210. package/core/zone/zone_bat.js +136 -0
  211. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +24 -0
  212. package/index.js +17 -333
  213. package/os.js +57 -0
  214. package/package.json +58 -58
  215. package/server.js +598 -0
  216. package/README.en.md +0 -36
  217. package/conf.json +0 -3
  218. package/core/base/mqtt/index.js +0 -1110
  219. package/core/base/mqtt/lib.js +0 -40
  220. package/core/base/web/index.js +0 -245
  221. package/core/com/api/com.json +0 -4
  222. package/core/com/api/drive.js +0 -668
  223. package/core/com/api/index.js +0 -108
  224. package/core/com/api/oauth.js +0 -158
  225. package/core/com/api/script.js +0 -32
  226. package/core/com/app/README.md +0 -3
  227. package/core/com/app/com.json +0 -4
  228. package/core/com/app/config.tpl.json +0 -16
  229. package/core/com/app/drive.js +0 -309
  230. package/core/com/app/index.js +0 -211
  231. package/core/com/app/script.js +0 -155
  232. package/core/com/cmd/com.json +0 -4
  233. package/core/com/cmd/config.tpl.json +0 -66
  234. package/core/com/cmd/drive.js +0 -513
  235. package/core/com/cmd/index.js +0 -354
  236. package/core/com/cmd/old/5w2h.js +0 -54
  237. package/core/com/cmd/old/drive.js +0 -423
  238. package/core/com/cmd/script.js +0 -11
  239. package/core/com/component/README.md +0 -3
  240. package/core/com/component/com.json +0 -4
  241. package/core/com/component/component.html +0 -16
  242. package/core/com/component/drive.js +0 -197
  243. package/core/com/component/index.js +0 -312
  244. package/core/com/component/script.js +0 -18
  245. package/core/com/db/com.json +0 -4
  246. package/core/com/db/drive.js +0 -1160
  247. package/core/com/db/index.js +0 -176
  248. package/core/com/event/com.json +0 -4
  249. package/core/com/event/drive.js +0 -133
  250. package/core/com/event/index.js +0 -345
  251. package/core/com/event/script.js +0 -26
  252. package/core/com/eventer/com.js +0 -477
  253. package/core/com/eventer/com.json +0 -4
  254. package/core/com/middleware/com.js +0 -154
  255. package/core/com/middleware/com.json +0 -4
  256. package/core/com/middleware/config.tpl.json +0 -8
  257. package/core/com/middleware/script.js +0 -9
  258. package/core/com/mqtt/com.json +0 -4
  259. package/core/com/mqtt/drive.js +0 -600
  260. package/core/com/mqtt/index.js +0 -572
  261. package/core/com/mqtt/mm_mqtt.js +0 -330
  262. package/core/com/mqtt/script.js +0 -604
  263. package/core/com/msg/com.js +0 -296
  264. package/core/com/msg/com.json +0 -4
  265. package/core/com/nav/com.json +0 -4
  266. package/core/com/nav/config.tpl.json +0 -75
  267. package/core/com/nav/drive.js +0 -549
  268. package/core/com/nav/index.js +0 -182
  269. package/core/com/nav/tpl/admin_pc/page_form.vue +0 -180
  270. package/core/com/nav/tpl/admin_pc/page_view.vue +0 -124
  271. package/core/com/nav/tpl/dev_pc/page_default.vue +0 -247
  272. package/core/com/nav/tpl/dev_pc/page_type.vue +0 -313
  273. package/core/com/nav/tpl/home_pc/page_default.vue +0 -234
  274. package/core/com/nav/tpl/home_pc/page_form.vue +0 -137
  275. package/core/com/nav/tpl/home_pc/page_list.vue +0 -234
  276. package/core/com/nav/tpl/home_pc/page_nav.vue +0 -221
  277. package/core/com/nav/tpl/home_pc/page_type.vue +0 -234
  278. package/core/com/nav/tpl/home_pc/page_view.vue +0 -125
  279. package/core/com/nav/tpl/home_phone/page_channel.vue +0 -234
  280. package/core/com/nav/tpl/home_phone/page_default.vue +0 -234
  281. package/core/com/nav/tpl/home_phone/page_form.vue +0 -137
  282. package/core/com/nav/tpl/home_phone/page_nav.vue +0 -237
  283. package/core/com/nav/tpl/home_phone/page_type.vue +0 -234
  284. package/core/com/nav/tpl/home_phone/page_view.vue +0 -125
  285. package/core/com/nav/viewmodel.js +0 -296
  286. package/core/com/param/drive.js +0 -366
  287. package/core/com/param/index.js +0 -80
  288. package/core/com/param/script.js +0 -12
  289. package/core/com/param/test.js +0 -98
  290. package/core/com/plugin/README.md +0 -3
  291. package/core/com/plugin/com.json +0 -4
  292. package/core/com/plugin/config.tpl.json +0 -26
  293. package/core/com/plugin/drive.js +0 -536
  294. package/core/com/plugin/index.js +0 -259
  295. package/core/com/plugin/script.js +0 -213
  296. package/core/com/rpc/com.json +0 -4
  297. package/core/com/rpc/drive.js +0 -160
  298. package/core/com/rpc/index.js +0 -87
  299. package/core/com/rpc/rpc.js +0 -118
  300. package/core/com/socket/com.json +0 -4
  301. package/core/com/socket/config.tpl.json +0 -14
  302. package/core/com/socket/drive.js +0 -403
  303. package/core/com/socket/index.js +0 -62
  304. package/core/com/socket/script.js +0 -42
  305. package/core/com/sql/drive.js +0 -1087
  306. package/core/com/sql/index.js +0 -83
  307. package/core/com/sql/script.js +0 -48
  308. package/core/com/static/com.json +0 -4
  309. package/core/com/static/drive.js +0 -220
  310. package/core/com/static/index.js +0 -149
  311. package/core/com/static/script.js +0 -28
  312. package/core/com/task/com.json +0 -4
  313. package/core/com/task/drive.js +0 -403
  314. package/core/com/task/index.js +0 -110
  315. package/core/com/task/script.js +0 -37
  316. package/core/com/timer/com.js +0 -217
  317. package/core/com/timer/com.json +0 -4
  318. package/core/com/tpl/com.js +0 -19
  319. package/core/com/tpl/com.json +0 -4
  320. package/lib/actions.js +0 -50
  321. package/lib/base.js +0 -361
  322. package/lib/com.js +0 -29
  323. package/lib/ref.js +0 -121
  324. package/middleware/cors/index.js +0 -119
  325. package/middleware/cors/middleware.json +0 -20
  326. package/middleware/csrf/index.js +0 -202
  327. package/middleware/csrf/middleware.json +0 -24
  328. package/middleware/ip_firewall/index.js +0 -476
  329. package/middleware/ip_firewall/middleware.json +0 -109
  330. package/middleware/mqtt_base/index.js +0 -10
  331. package/middleware/mqtt_base/middleware.json +0 -11
  332. package/middleware/security_audit/index.js +0 -543
  333. package/middleware/security_audit/middleware.json +0 -48
  334. package/middleware/waf/index.js +0 -343
  335. package/middleware/waf/middleware.json +0 -10
  336. package/middleware/waf_ddos/index.js +0 -520
  337. package/middleware/waf_ddos/middleware.json +0 -38
  338. package/middleware/waf_xss/index.js +0 -269
  339. package/middleware/waf_xss/middleware.json +0 -18
  340. package/middleware/web_after/index.js +0 -33
  341. package/middleware/web_after/middleware.json +0 -10
  342. package/middleware/web_base/index.js +0 -90
  343. package/middleware/web_base/middleware.json +0 -10
  344. package/middleware/web_before/index.js +0 -27
  345. package/middleware/web_before/middleware.json +0 -10
  346. package/middleware/web_check/index.js +0 -28
  347. package/middleware/web_check/middleware.json +0 -10
  348. package/middleware/web_main/index.js +0 -28
  349. package/middleware/web_main/middleware.json +0 -10
  350. package/middleware/web_proxy/index.js +0 -37
  351. package/middleware/web_proxy/middleware.json +0 -10
  352. package/middleware/web_render/index.js +0 -87
  353. package/middleware/web_render/middleware.json +0 -10
  354. package/middleware/web_socket/index.js +0 -34
  355. package/middleware/web_socket/middleware.json +0 -10
  356. package/middleware/web_static/index.js +0 -115
  357. package/middleware/web_static/middleware.json +0 -10
  358. /package/{core/com → com}/api/README.md +0 -0
  359. /package/{core/com → com}/db/README.md +0 -0
  360. /package/{core/com → com}/mqtt/README.md +0 -0
  361. /package/{core/com → com}/nav/README.md +0 -0
  362. /package/{core/com → com}/nav/tpl/admin_pc/page_channel.vue +0 -0
  363. /package/{core/com → com}/nav/tpl/admin_pc/page_default.vue +0 -0
  364. /package/{core/com → com}/nav/tpl/admin_pc/page_lang.vue +0 -0
  365. /package/{core/com → com}/nav/tpl/admin_pc/page_nav.vue +0 -0
  366. /package/{core/com → com}/nav/tpl/admin_pc/page_table.vue +0 -0
  367. /package/{core/com → com}/nav/tpl/admin_pc/page_type.vue +0 -0
  368. /package/{core/com → com}/nav/tpl/dev_pc/page_channel.vue +0 -0
  369. /package/{core/com → com}/nav/tpl/dev_pc/page_config.vue +0 -0
  370. /package/{core/com → com}/nav/tpl/dev_pc/page_form.vue +0 -0
  371. /package/{core/com → com}/nav/tpl/dev_pc/page_nav.vue +0 -0
  372. /package/{core/com → com}/nav/tpl/dev_pc/page_table.vue +0 -0
  373. /package/{core/com → com}/nav/tpl/home_pc/page_channel.vue +0 -0
  374. /package/{core/com → com}/nav/tpl/home_phone/page_list.vue +0 -0
  375. /package/{core/com → com}/param/README.md +0 -0
  376. /package/{core/com/cmd → com/pendant}/README.md +0 -0
  377. /package/{core/com → com}/socket/README.md +0 -0
  378. /package/{core/com → com}/sql/README.md +0 -0
  379. /package/{core/com → com}/static/README.md +0 -0
  380. /package/{core/com → com}/task/README.md +0 -0
@@ -1,572 +0,0 @@
1
- const MQTT_client = require('mqtt');
2
- const Index = require('mm_machine').Index;
3
- const Drive = require('./drive');
4
-
5
- /**
6
- * MQTT通讯类
7
- * @extends {Index}
8
- * @class
9
- */
10
- class MQTT extends Index {
11
- /**
12
- * 构造函数
13
- * @param {Object} scope 作用域
14
- * @param {String} title 标题
15
- * @constructor
16
- */
17
- constructor(scope, title) {
18
- super(scope, __dirname);
19
- this.Drive = Drive;
20
- // 更新并重载脚本
21
- this.mode = 3;
22
- this.type = "mqtt";
23
- this.title = title;
24
- this.dict = {};
25
- this.config = {
26
- hostname: "127.0.0.1",
27
- port: "1883",
28
- protocol: "mqtt",
29
- clientId: "iot_test",
30
- subscribe_qos: 2,
31
- publish_qos: 2,
32
- username: "iot_test",
33
- password: "asd123",
34
- table: "iot_device",
35
- clean: false,
36
- longtime: 15000,
37
- requestTimeout: 3000,
38
- // 在线有效期时长判断 单位:毫秒,150000毫秒为2.5分钟
39
- online_expires: 150000,
40
- // 在线有效期检测间隔
41
- online_interval: 10000,
42
- // 连接超时
43
- connectTimeout: 30000,
44
- // maxInflight: 20,
45
- // 重连间隔
46
- reconnectPeriod: 6000 // 重连间隔1秒
47
- }
48
- // 定时器
49
- this.timer = null;
50
- // mqtt客户端服务器
51
- this.client = null;
52
- /**
53
- * message queue
54
- */
55
- this.list_msg = [
56
- /*
57
- {
58
- // information ID
59
- id: "",
60
- // request method
61
- method: "",
62
- // message parameters
63
- params: {},
64
- // Callback
65
- func: function(res){}
66
- }
67
- */
68
- ];
69
-
70
- /**
71
- * 订阅集合 (主题 => 函数列表)
72
- */
73
- this.dict_subscribe = {};
74
-
75
- /**
76
- * method collection
77
- */
78
- this.methods = {
79
- /**
80
- * Provide to the server to see how many open functions there are
81
- */
82
- get_method: function() {
83
- return Object.keys(_this.methods)
84
- }
85
- };
86
-
87
- this.retryTimes = 0;
88
- this.connecting = false;
89
- }
90
- }
91
-
92
- /**
93
- * 设置配置
94
- * @param {Object} config 配置
95
- */
96
- MQTT.prototype.set_config = function(config) {
97
- Object.assign(this.config, config);
98
- }
99
-
100
- /**
101
- * 主题匹配
102
- * @param {String} topic 接收到的主题
103
- * @param {String} top 匹配用的主题
104
- * @@return {Boolean} 返回匹配结果,正确返回true,错误返回false
105
- */
106
- MQTT.prototype.match = function(topic, top) {
107
- if (topic === top) {
108
- return true;
109
- }
110
- var str = "^" + top.replace("#", ".*").replace("+", "~~~").replace("~~~", "[a-zA-Z0-9_-]+").replace("$", "~~~")
111
- .replace("~~~", "\\$");
112
- var s = str.substring(str.length - 1, str.length);
113
- if (s !== "#") {
114
- str += "$";
115
- }
116
- var mh = new RegExp(str);
117
- return mh.test(topic);
118
- }
119
-
120
- /**
121
- * 初始化
122
- */
123
- MQTT.prototype.update_after = async function() {
124
- var _this = this;
125
- var list = this.list;
126
- for (var i = 0; i < list.length; i++) {
127
- var o = list[i];
128
- if (o.config && o.config.state === 1) {
129
- o.send = function(topic, msg, qos = 0, retain = false) {
130
- if (topic) {
131
- _this.send(topic, msg, qos, retain);
132
- }
133
- };
134
- await o.exec('init');
135
- var topics = o.config.topic;
136
- if (topics) {
137
- for (var n = 0; n < topics.length; n++) {
138
- var tc = topics[n];
139
- var retain = o.config.retain || false;
140
- var qos = o.config.qos || 0;
141
- if (tc.indexOf("heartbeat") !== -1) {
142
- retain = false;
143
- qos = 0;
144
- }
145
- this.subscribe(tc, null, qos, retain);
146
- }
147
- }
148
- }
149
- }
150
- }
151
-
152
- /**
153
- * 重新连接
154
- */
155
- MQTT.prototype.reconnect = function() {
156
- // $.sleep(this.config.interval);
157
- // this.retryTimes += 1;
158
- // if (this.retryTimes > 5) {
159
- // try {
160
- // this.client.end();
161
- // this.init();
162
- // } catch (error) {
163
- // this.$message.error(error.toString());
164
- // }
165
- // }
166
- }
167
-
168
- /**
169
- * 初始化
170
- * @param {Object} config 配置参数
171
- */
172
- MQTT.prototype.init = function(config) {
173
- this.config = Object.assign(this.config, config);
174
- this.retryTimes = 0;
175
- this.connecting = false;
176
- };
177
-
178
- /**
179
- * 运行MQTT
180
- * @param {Object} config 配置参数
181
- */
182
- MQTT.prototype.start = function() {
183
- setTimeout(() => {
184
- this.start_timer();
185
- }, 2000)
186
- this.connecting = true;
187
- var err;
188
- try {
189
- var cg = this.config;
190
- if (cg.host) {
191
- delete cg.hostname;
192
- delete cg.port;
193
- this.client = MQTT_client.connect(cg.host, cg);
194
- } else {
195
- this.client = MQTT_client.connect(cg);
196
- }
197
- if (this.client && this.client.on) {
198
- return new Promise((resolve, reject) => {
199
- this.client.on('connect', (packet, err) => {
200
- this.connecting = false;
201
- if (err) {
202
- resolve(null);
203
- reject(err);
204
- } else {
205
- this.client.on('message', async (topic, message) => {
206
- await this.receive(topic, message.toString());
207
- });
208
- resolve(packet);
209
- }
210
- });
211
- this.client.on("reconnect", () => {
212
- this.reconnect();
213
- });
214
- this.client.on("error", (error) => {
215
- console.error("Connection failed", error);
216
- });
217
- });
218
- }
219
- } catch (error) {
220
- this.connecting = false;
221
- err = error;
222
- }
223
- return new Promise((resolve, reject) => {
224
- resolve(null);
225
- reject(err);
226
- });
227
- };
228
-
229
- /**
230
- * 监听事件
231
- * @param {String} topic 事件名称
232
- * @param {Function} func 回调函数
233
- */
234
- MQTT.prototype.on = function(topic, func) {
235
- this.client.on(topic, func);
236
- }
237
-
238
- /**
239
- * 接收消息
240
- * @param {String} topic 订阅板块
241
- * @param {Object} msg 消息主体
242
- */
243
- MQTT.prototype.message = async function(topic, msg) {
244
- if (this.dict_subscribe[topic]) {
245
- var list = this.dict_subscribe[topic];
246
- try {
247
- for (var key in list) {
248
- list[key](msg);
249
- }
250
- } catch (err) {
251
- console.error(err);
252
- }
253
- }
254
- }
255
-
256
- /**
257
- * 接收消息
258
- * @param {String} push_topic 推送过来的主题
259
- * @param {Object} msg 消息主体
260
- */
261
- MQTT.prototype.receive = async function(push_topic, msg) {
262
- if (msg && (msg.indexOf('[') === 0) || msg.indexOf('{') === 0) {
263
- try {
264
- msg = JSON.parse(msg);
265
- } catch (error) {
266
- $.log.error("消息结构体不对", push_topic, error);
267
- return
268
- }
269
- }
270
- var ret;
271
- var list = this.list;
272
- for (var i = 0; i < list.length; i++) {
273
- var o = list[i];
274
- if (o.config.state === 1) {
275
- var topics = o.config.topic;
276
- if (topics) {
277
- for (var n = 0; n < topics.length; n++) {
278
- var topic = topics[n];
279
- if (this.match(push_topic, topic)) {
280
- ret = await o.exec('handle', push_topic, msg, topic, n);
281
- }
282
- }
283
- }
284
- }
285
- }
286
- try {
287
- await this.message(topic, msg);
288
- } catch (error) {
289
- $.log.error("mqtt处理程序错误", error);
290
- return
291
- }
292
- };
293
-
294
- /**
295
- * 订阅
296
- * @param {String} topic 主题
297
- * @param {Function} func 回调函数
298
- * @param {Number} qos 推送方式 0
299
- * @param {Boolean} retain 保持
300
- */
301
- MQTT.prototype.subscribe = function(topic, func, qos = null, retain = false) {
302
- if (!this.client) {
303
- return;
304
- }
305
- if (qos === null || qos === undefined) {
306
- qos = this.config.subscribe_qos || 0;
307
- }
308
- this.client.subscribe(topic, {
309
- // 订阅消息方式,0为保留 , 1为确认收到1次
310
- qos,
311
- retain
312
- });
313
- if (func) {
314
- if (!this.dict_subscribe[topic]) {
315
- this.dict_subscribe[topic] = {};
316
- }
317
- var key = this.key_num + 1;
318
- this.dict_subscribe[topic][key] = func;
319
- return key;
320
- }
321
- }
322
-
323
- /**
324
- * 取消订阅
325
- * @param {String} topic 主题
326
- * @param {String} key 主键
327
- */
328
- MQTT.prototype.unsubscribe = function(topic, key) {
329
- this.client.unsubscribe(topic);
330
- if (this.dict_subscribe[topic]) {
331
- delete this.dict_subscribe[topic][key];
332
- }
333
- }
334
-
335
- /**
336
- * 结束客户端
337
- */
338
- MQTT.prototype.end = function() {
339
- if (this.client) {
340
- this.client.end();
341
- }
342
- if (this.timer) {
343
- clearInterval(this.timer);
344
- this.timer = null;
345
- }
346
- };
347
-
348
- /**
349
- * 发布主题
350
- * @param {String} topic 主题
351
- * @param {Object} message 消息对象
352
- * @param {Number} qos 推送方式 0
353
- * @param {Boolean} retain 保持
354
- */
355
- MQTT.prototype.publish = function(topic, message, qos = null, retain = false) {
356
- if (qos === null || qos === undefined) {
357
- qos = this.config.publish_qos || 0;
358
- }
359
- // console.log("发布", qos, topic);
360
- this.client.publish(topic, message, {
361
- qos,
362
- retain
363
- });
364
- };
365
-
366
- /**
367
- * 主题推送
368
- * @param {String} topic 主题
369
- * @param {Object} msgObj 消息对象
370
- * @param {Number} qos 推送方式 0
371
- * @param {Boolean} retain 保持
372
- */
373
- MQTT.prototype.send = function(topic, msgObj, qos = null, retain = false) {
374
- this.publish(topic, JSON.stringify(msgObj), qos, retain);
375
- };
376
-
377
- /**
378
- * 请求
379
- * @param {String} topic 主题
380
- * @param {String} method 请求方法
381
- * @param {Object} params 请求参数
382
- * @param {Function} func 回调函数
383
- */
384
- MQTT.prototype.req = function(topic, method, params, func) {
385
- var data = {
386
- id: this.client.options.clientId + "_" + Date.parse(new Date()),
387
- method,
388
- params
389
- };
390
-
391
- if (func) {
392
- data.func = func;
393
- this.list_msg.push(data);
394
- }
395
- this.send(topic, data);
396
- };
397
-
398
- /**
399
- * 同步请求 - 可及时取回消息
400
- * @param {String} method 请求方法
401
- * @param {Object} params 传递参数
402
- * @returns {Object} 返回响应结果
403
- */
404
- MQTT.prototype.reqASync = function(topic, method, params) {
405
- var _this = this;
406
- return new Promise((resolve, reject) => {
407
- var hasMsg;
408
- _this.req(topic, method, params, (res) => {
409
- hasMsg = true;
410
- resolve(res);
411
- });
412
- setTimeout(function() {
413
- if (!hasMsg) {
414
- resolve(null);
415
- reject("request timeout!");
416
- }
417
- }, _this.config.requestTimeout);
418
- });
419
- };
420
-
421
- /**
422
- * 保存在线到数据库
423
- * @param {Array} arr 客户端ID数组
424
- * @param {Number} online 在线情况 0为不在线,1为在线
425
- */
426
- MQTT.prototype.save_online = async function(arr, online = 1) {
427
- if (!arr || !arr.length) {
428
- return
429
- }
430
- var body = {
431
- online
432
- }
433
- var db = $.sql.db();
434
- db.table = this.config.table || "iot_device";
435
- db.size = 0;
436
- var query = {};
437
- if (arr) {
438
- query.clientid_has = arr.join(",");
439
- }
440
- await db.set(query, body);
441
- }
442
-
443
- /**
444
- * 获取所有设备
445
- */
446
- MQTT.prototype.get_drives = async function() {
447
- var db = $.sql.db();
448
- db.table = this.config.table || "iot_device";
449
- db.size = 0;
450
- return await db.get({}, "", "clientid, online");
451
- }
452
-
453
- /**
454
- * 更新在线设备
455
- */
456
- MQTT.prototype.update_online = async function() {
457
- // 获取所有方案
458
- var list = this.list;
459
- var list_online = [];
460
- var list_offline = [];
461
- var list_has = [];
462
-
463
- var now = new Date().getTime();
464
- var online_expires = this.config.online_expires; // 180
465
-
466
- // 获取所有设备
467
- var drives = await this.get_drives();
468
- for (var i = 0; i < list.length; i++) {
469
- var dict = list[i].drives;
470
- for (var clientid in dict) {
471
- list_has.push(clientid);
472
- var drive = drives.getObj({
473
- clientid
474
- });
475
- var o = dict[clientid];
476
- if (o.online === 1) {
477
- if (o.time_last) {
478
- var cha = now - o.time_last;
479
- if (cha > online_expires) {
480
- if (drive && drive.online) {
481
- // 如果设备本身在线,需要改为离线
482
- list_offline.push(clientid);
483
- }
484
- o.online = 0;
485
- delete dict[clientid];
486
- } else {
487
- if (drive && !drive.online) {
488
- // 如果设备本身离线,需要改为在线
489
- list_online.push(clientid);
490
- }
491
- }
492
- }
493
- } else {
494
- if (drive && drive.online) {
495
- // 如果设备本身在线,需要改为离线
496
- list_offline.push(clientid);
497
- }
498
- }
499
- }
500
- }
501
-
502
- // 如果设备没有出现过,则视为离线
503
- for (var i = 0; i < drives.length; i++) {
504
- var {
505
- clientid,
506
- online
507
- } = drives[i];
508
- if (online && list_has.indexOf(clientid) === -1) {
509
- list_offline.push(clientid);
510
- }
511
- }
512
-
513
- // console.log("在线设备变化", list_online);
514
- // console.log("离线设备变化", list_offline);
515
-
516
- // 先将设备离线
517
- var list_off = list_offline.to2D(30);
518
- for (var i = 0; i < list_off.length; i++) {
519
- await this.save_online(list_off[i], 0);
520
- }
521
-
522
- // 再将设备在线
523
- var list_on = list_online.to2D(30);
524
- for (var i = 0; i < list_on.length; i++) {
525
- await this.save_online(list_on[i], 1);
526
- }
527
- }
528
-
529
- /**
530
- * 开始计时器
531
- */
532
- MQTT.prototype.start_timer = function() {
533
- if (!this.timer) {
534
- this.timer = setInterval(() => {
535
- try {
536
- this.update_online();
537
- } catch (err) {
538
-
539
- }
540
- }, this.config.online_interval);
541
- }
542
- }
543
-
544
- module.exports = MQTT;
545
-
546
-
547
- /**
548
- * 创建全局管理器
549
- */
550
- if (!$.pool.mqtt) {
551
- $.pool.mqtt = {};
552
- }
553
-
554
- function mqtt_admin(scope, title) {
555
- if (!scope) {
556
- scope = $.val.scope + '';
557
- }
558
- var obj = $.pool.mqtt[scope];
559
- if (!obj) {
560
- $.pool.mqtt[scope] = new MQTT(scope, title);
561
- obj = $.pool.mqtt[scope];
562
- }
563
- return obj;
564
- }
565
-
566
- /**
567
- * mqtt管理器, 用于管理插件
568
- * @param {string} scope 作用域
569
- * @param {string} title 标题
570
- * @return {Object} 返回一个缓存类
571
- */
572
- $.mqtt_admin = mqtt_admin;