mm_os 3.3.0 → 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/com/event/com.json +5 -0
  28. package/{core/com → com}/event/config.tpl.json +8 -8
  29. package/com/event/drive.js +59 -0
  30. package/com/event/index.js +409 -0
  31. package/com/event/script.tpl.js +23 -0
  32. package/com/mqtt/com.json +5 -0
  33. package/{core/com → com}/mqtt/config.tpl.json +3 -5
  34. package/com/mqtt/drive.js +676 -0
  35. package/com/mqtt/index.js +822 -0
  36. package/com/mqtt/mm_mqtt.js +425 -0
  37. package/com/mqtt/script.tpl.js +723 -0
  38. package/com/nav/com.json +5 -0
  39. package/com/nav/config.tpl.json +84 -0
  40. package/com/nav/drive.js +702 -0
  41. package/com/nav/index.js +231 -0
  42. package/{core/com → com}/nav/tpl/admin_pc/page_config.vue +280 -280
  43. package/{core/com → com}/nav/tpl/admin_pc/page_config_form.vue +194 -194
  44. package/com/nav/tpl/admin_pc/page_form.vue +180 -0
  45. package/com/nav/tpl/admin_pc/page_view.vue +124 -0
  46. package/com/nav/tpl/dev_pc/page_default.vue +247 -0
  47. package/com/nav/tpl/dev_pc/page_type.vue +313 -0
  48. package/com/nav/tpl/home_pc/page_default.vue +234 -0
  49. package/com/nav/tpl/home_pc/page_form.vue +137 -0
  50. package/com/nav/tpl/home_pc/page_list.vue +234 -0
  51. package/com/nav/tpl/home_pc/page_nav.vue +221 -0
  52. package/com/nav/tpl/home_pc/page_type.vue +234 -0
  53. package/com/nav/tpl/home_pc/page_view.vue +125 -0
  54. package/com/nav/tpl/home_phone/page_channel.vue +234 -0
  55. package/com/nav/tpl/home_phone/page_default.vue +234 -0
  56. package/com/nav/tpl/home_phone/page_form.vue +137 -0
  57. package/com/nav/tpl/home_phone/page_nav.vue +237 -0
  58. package/com/nav/tpl/home_phone/page_type.vue +234 -0
  59. package/com/nav/tpl/home_phone/page_view.vue +125 -0
  60. package/com/nav/viewmodel.js +446 -0
  61. package/com/param/com.json +5 -0
  62. package/{core/com → com}/param/config.tpl.json +7 -1
  63. package/com/param/drive.js +502 -0
  64. package/com/param/index.js +155 -0
  65. package/com/param/script.tpl.js +12 -0
  66. package/com/pendant/com.json +5 -0
  67. package/{core/com/component → com/pendant}/config.tpl.json +15 -13
  68. package/com/pendant/drive.js +204 -0
  69. package/com/pendant/index.js +441 -0
  70. package/com/pendant/pendant.html +16 -0
  71. package/com/pendant/script.tpl.js +18 -0
  72. package/com/socket/com.json +5 -0
  73. package/com/socket/config.tpl.json +12 -0
  74. package/com/socket/drive.js +651 -0
  75. package/com/socket/index.js +351 -0
  76. package/com/socket/script.tpl.js +41 -0
  77. package/com/sql/com.json +5 -0
  78. package/{core/com → com}/sql/config.tpl.json +13 -9
  79. package/com/sql/drive.js +1259 -0
  80. package/com/sql/index.js +150 -0
  81. package/com/sql/script.tpl.js +47 -0
  82. package/com/static/com.json +5 -0
  83. package/{core/com → com}/static/config.tpl.json +10 -6
  84. package/com/static/drive.js +194 -0
  85. package/com/static/index.js +226 -0
  86. package/com/static/script.tpl.js +28 -0
  87. package/com/task/com.json +5 -0
  88. package/{core/com → com}/task/config.tpl.json +4 -6
  89. package/com/task/drive.js +405 -0
  90. package/com/task/index.js +148 -0
  91. package/com/task/script.tpl.js +37 -0
  92. package/com/template/com.json +5 -0
  93. package/com/template/config.tpl.json +16 -0
  94. package/com/template/drive.js +80 -0
  95. package/com/template/index.js +141 -0
  96. package/com.js +156 -0
  97. package/common/README.md +2 -0
  98. package/common/handler/msg/handler.json +22 -0
  99. package/common/handler/msg/index.js +23 -0
  100. package/common/handler/player/handler.json +22 -0
  101. package/common/handler/player/index.js +287 -0
  102. package/common/handler/user/handler.json +22 -0
  103. package/common/handler/user/index.js +23 -0
  104. package/common/middleware/web_after/index.js +29 -0
  105. package/common/middleware/web_after/middleware.json +9 -0
  106. package/common/middleware/web_base/index.js +113 -0
  107. package/common/middleware/web_base/middleware.json +19 -0
  108. package/common/middleware/web_before/index.js +33 -0
  109. package/common/middleware/web_before/middleware.json +9 -0
  110. package/common/middleware/web_cors/index.js +87 -0
  111. package/common/middleware/web_cors/middleware.json +24 -0
  112. package/common/middleware/web_error/index.js +119 -0
  113. package/common/middleware/web_error/middleware.json +18 -0
  114. package/common/middleware/web_ip/index.js +15 -0
  115. package/common/middleware/web_ip/middleware.json +14 -0
  116. package/common/middleware/web_logger/index.js +156 -0
  117. package/common/middleware/web_logger/middleware.json +14 -0
  118. package/common/middleware/web_main/index.js +24 -0
  119. package/common/middleware/web_main/middleware.json +9 -0
  120. package/common/middleware/web_static/index.js +73 -0
  121. package/common/middleware/web_static/middleware.json +54 -0
  122. package/common/middleware/web_waf/index.js +385 -0
  123. package/common/middleware/web_waf/middleware.json +13 -0
  124. package/common/model/msg/index.js +88 -0
  125. package/common/model/msg/model.json +401 -0
  126. package/common/model/player/index.js +63 -0
  127. package/common/model/player/model.json +185 -0
  128. package/common/model/user/index.js +11 -0
  129. package/common/model/user/model.json +219 -0
  130. package/core/app/config.tpl.json +67 -0
  131. package/core/app/index.js +632 -0
  132. package/core/app/script.tpl.js +52 -0
  133. package/core/channel/index.js +899 -0
  134. package/core/channel/matcher.js +585 -0
  135. package/core/com/config.tpl.json +16 -0
  136. package/core/com/index.js +74 -0
  137. package/core/com/script.tpl.js +5 -0
  138. package/core/component/component.js +42 -0
  139. package/core/component/config.tpl.json +63 -0
  140. package/core/component/index.js +273 -0
  141. package/core/component/script.tpl.js +19 -0
  142. package/core/controller/config.tpl.json +14 -0
  143. package/core/controller/index.js +373 -0
  144. package/core/controller/script.tpl.js +27 -0
  145. package/core/factory/config.tpl.json +14 -0
  146. package/core/factory/entity.js +275 -0
  147. package/core/factory/index.js +241 -0
  148. package/core/factory/script.tpl.js +16 -0
  149. package/core/game/bat/index.js +137 -0
  150. package/core/game/bat/world.js +622 -0
  151. package/core/game/config.tpl.json +16 -0
  152. package/core/game/entity_admin.js +230 -0
  153. package/core/game/index.js +186 -0
  154. package/core/handler/config.tpl.json +22 -0
  155. package/core/handler/index.js +181 -0
  156. package/core/handler/script.tpl.js +23 -0
  157. package/core/logic/config.tpl.json +14 -0
  158. package/core/logic/index.js +59 -0
  159. package/core/logic/script.tpl.js +19 -0
  160. package/core/middleware/config.tpl.json +16 -0
  161. package/core/middleware/index.js +125 -0
  162. package/core/middleware/script.tpl.js +37 -0
  163. package/core/mod/config.tpl.json +22 -0
  164. package/core/mod/index.js +130 -0
  165. package/core/mod/script.tpl.js +34 -0
  166. package/core/model/config.tpl.json +219 -0
  167. package/core/model/index.js +272 -0
  168. package/core/model/model.js +27 -0
  169. package/core/model/script.tpl.js +20 -0
  170. package/core/notifier/config.tpl.json +14 -0
  171. package/core/notifier/index.js +77 -0
  172. package/core/notifier/script.tpl.js +20 -0
  173. package/core/plugin/config.tpl.json +24 -0
  174. package/core/plugin/index.js +232 -0
  175. package/core/plugin/script.tpl.js +51 -0
  176. package/core/pusher/config.tpl.json +14 -0
  177. package/core/pusher/index.js +161 -0
  178. package/core/pusher/script.tpl.js +20 -0
  179. package/core/room/bat/index.js +170 -0
  180. package/core/room/bat/room.js +524 -0
  181. package/core/room/config.tpl.json +20 -0
  182. package/core/room/index.js +249 -0
  183. package/core/room/room.js +61 -0
  184. package/core/scene/config.tpl.json +14 -0
  185. package/core/scene/index.js +466 -0
  186. package/core/scene/loop.js +1255 -0
  187. package/core/scene/map.js +28 -0
  188. package/core/scene/script.tpl.js +22 -0
  189. package/core/sender/config.tpl.json +14 -0
  190. package/core/sender/index.js +79 -0
  191. package/core/sender/script.tpl.js +20 -0
  192. package/core/service/config.tpl.json +14 -0
  193. package/core/service/index.js +100 -0
  194. package/core/service/script.tpl.js +25 -0
  195. package/core/store/config.tpl.json +26 -0
  196. package/core/store/index.js +1755 -0
  197. package/core/store/script.tpl.js +22 -0
  198. package/core/store/sql.js +1464 -0
  199. package/core/system/config.tpl.json +18 -0
  200. package/core/system/index.js +312 -0
  201. package/core/system/script.tpl.js +77 -0
  202. package/core/view/config.tpl.json +14 -0
  203. package/core/view/index.js +91 -0
  204. package/core/view/script.tpl.js +20 -0
  205. package/core/zone/bat/index.js +725 -0
  206. package/core/zone/config.tpl.json +54 -0
  207. package/core/zone/index.js +614 -0
  208. package/core/zone/script.tpl.js +10 -0
  209. package/core/zone/zone_bat.js +136 -0
  210. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +24 -0
  211. package/index.js +17 -314
  212. package/os.js +57 -0
  213. package/package.json +60 -58
  214. package/server.js +598 -0
  215. package/README.en.md +0 -36
  216. package/conf.json +0 -3
  217. package/core/base/mqtt/index.js +0 -1107
  218. package/core/base/mqtt/lib.js +0 -40
  219. package/core/base/web/index.js +0 -243
  220. package/core/com/api/com.json +0 -4
  221. package/core/com/api/drive.js +0 -668
  222. package/core/com/api/index.js +0 -108
  223. package/core/com/api/oauth.js +0 -158
  224. package/core/com/api/script.js +0 -32
  225. package/core/com/app/README.md +0 -3
  226. package/core/com/app/com.json +0 -4
  227. package/core/com/app/config.tpl.json +0 -16
  228. package/core/com/app/drive.js +0 -309
  229. package/core/com/app/index.js +0 -211
  230. package/core/com/app/script.js +0 -155
  231. package/core/com/cmd/com.json +0 -4
  232. package/core/com/cmd/config.tpl.json +0 -66
  233. package/core/com/cmd/drive.js +0 -513
  234. package/core/com/cmd/index.js +0 -354
  235. package/core/com/cmd/old/5w2h.js +0 -54
  236. package/core/com/cmd/old/drive.js +0 -423
  237. package/core/com/cmd/script.js +0 -11
  238. package/core/com/component/README.md +0 -3
  239. package/core/com/component/com.json +0 -4
  240. package/core/com/component/component.html +0 -16
  241. package/core/com/component/drive.js +0 -197
  242. package/core/com/component/index.js +0 -312
  243. package/core/com/component/script.js +0 -18
  244. package/core/com/db/com.json +0 -4
  245. package/core/com/db/drive.js +0 -1160
  246. package/core/com/db/index.js +0 -176
  247. package/core/com/event/com.json +0 -4
  248. package/core/com/event/drive.js +0 -133
  249. package/core/com/event/index.js +0 -345
  250. package/core/com/event/script.js +0 -26
  251. package/core/com/eventer/com.js +0 -477
  252. package/core/com/eventer/com.json +0 -4
  253. package/core/com/middleware/com.js +0 -153
  254. package/core/com/middleware/com.json +0 -4
  255. package/core/com/middleware/config.tpl.json +0 -8
  256. package/core/com/middleware/script.js +0 -9
  257. package/core/com/mqtt/com.json +0 -4
  258. package/core/com/mqtt/drive.js +0 -600
  259. package/core/com/mqtt/index.js +0 -572
  260. package/core/com/mqtt/mm_mqtt.js +0 -330
  261. package/core/com/mqtt/script.js +0 -604
  262. package/core/com/msg/com.js +0 -296
  263. package/core/com/msg/com.json +0 -4
  264. package/core/com/nav/com.json +0 -4
  265. package/core/com/nav/config.tpl.json +0 -75
  266. package/core/com/nav/drive.js +0 -549
  267. package/core/com/nav/index.js +0 -182
  268. package/core/com/nav/tpl/admin_pc/page_form.vue +0 -180
  269. package/core/com/nav/tpl/admin_pc/page_view.vue +0 -124
  270. package/core/com/nav/tpl/dev_pc/page_default.vue +0 -247
  271. package/core/com/nav/tpl/dev_pc/page_type.vue +0 -313
  272. package/core/com/nav/tpl/home_pc/page_default.vue +0 -234
  273. package/core/com/nav/tpl/home_pc/page_form.vue +0 -137
  274. package/core/com/nav/tpl/home_pc/page_list.vue +0 -234
  275. package/core/com/nav/tpl/home_pc/page_nav.vue +0 -221
  276. package/core/com/nav/tpl/home_pc/page_type.vue +0 -234
  277. package/core/com/nav/tpl/home_pc/page_view.vue +0 -125
  278. package/core/com/nav/tpl/home_phone/page_channel.vue +0 -234
  279. package/core/com/nav/tpl/home_phone/page_default.vue +0 -234
  280. package/core/com/nav/tpl/home_phone/page_form.vue +0 -137
  281. package/core/com/nav/tpl/home_phone/page_nav.vue +0 -237
  282. package/core/com/nav/tpl/home_phone/page_type.vue +0 -234
  283. package/core/com/nav/tpl/home_phone/page_view.vue +0 -125
  284. package/core/com/nav/viewmodel.js +0 -296
  285. package/core/com/param/drive.js +0 -366
  286. package/core/com/param/index.js +0 -80
  287. package/core/com/param/script.js +0 -12
  288. package/core/com/param/test.js +0 -98
  289. package/core/com/plugin/README.md +0 -3
  290. package/core/com/plugin/com.json +0 -4
  291. package/core/com/plugin/config.tpl.json +0 -26
  292. package/core/com/plugin/drive.js +0 -536
  293. package/core/com/plugin/index.js +0 -259
  294. package/core/com/plugin/script.js +0 -213
  295. package/core/com/rpc/com.json +0 -4
  296. package/core/com/rpc/drive.js +0 -160
  297. package/core/com/rpc/index.js +0 -87
  298. package/core/com/rpc/rpc.js +0 -118
  299. package/core/com/socket/com.json +0 -4
  300. package/core/com/socket/config.tpl.json +0 -14
  301. package/core/com/socket/drive.js +0 -403
  302. package/core/com/socket/index.js +0 -62
  303. package/core/com/socket/script.js +0 -42
  304. package/core/com/sql/drive.js +0 -1087
  305. package/core/com/sql/index.js +0 -83
  306. package/core/com/sql/script.js +0 -48
  307. package/core/com/static/com.json +0 -4
  308. package/core/com/static/drive.js +0 -220
  309. package/core/com/static/index.js +0 -149
  310. package/core/com/static/script.js +0 -28
  311. package/core/com/task/com.json +0 -4
  312. package/core/com/task/drive.js +0 -403
  313. package/core/com/task/index.js +0 -110
  314. package/core/com/task/script.js +0 -37
  315. package/core/com/timer/com.js +0 -217
  316. package/core/com/timer/com.json +0 -4
  317. package/core/com/tpl/com.js +0 -19
  318. package/core/com/tpl/com.json +0 -4
  319. package/lib/actions.js +0 -50
  320. package/lib/base.js +0 -361
  321. package/lib/com.js +0 -29
  322. package/lib/ref.js +0 -121
  323. package/middleware/mqtt_base/index.js +0 -10
  324. package/middleware/mqtt_base/middleware.json +0 -10
  325. package/middleware/performance/index.js +0 -151
  326. package/middleware/performance/middleware.json +0 -16
  327. package/middleware/security_audit/index.js +0 -549
  328. package/middleware/security_audit/middleware.json +0 -48
  329. package/middleware/security_headers/index.js +0 -487
  330. package/middleware/security_headers/middleware.json +0 -45
  331. package/middleware/waf/index.js +0 -348
  332. package/middleware/waf/middleware.json +0 -10
  333. package/middleware/waf_ddos/index.js +0 -520
  334. package/middleware/waf_ddos/middleware.json +0 -38
  335. package/middleware/waf_ip/index.js +0 -379
  336. package/middleware/waf_ip/middleware.json +0 -49
  337. package/middleware/waf_xss/index.js +0 -269
  338. package/middleware/waf_xss/middleware.json +0 -18
  339. package/middleware/web_after/index.js +0 -33
  340. package/middleware/web_after/middleware.json +0 -9
  341. package/middleware/web_base/index.js +0 -90
  342. package/middleware/web_base/middleware.json +0 -9
  343. package/middleware/web_before/index.js +0 -27
  344. package/middleware/web_before/middleware.json +0 -9
  345. package/middleware/web_check/index.js +0 -28
  346. package/middleware/web_check/middleware.json +0 -9
  347. package/middleware/web_main/index.js +0 -28
  348. package/middleware/web_main/middleware.json +0 -9
  349. package/middleware/web_proxy/index.js +0 -37
  350. package/middleware/web_proxy/middleware.json +0 -9
  351. package/middleware/web_render/index.js +0 -87
  352. package/middleware/web_render/middleware.json +0 -9
  353. package/middleware/web_socket/index.js +0 -34
  354. package/middleware/web_socket/middleware.json +0 -9
  355. package/middleware/web_static/index.js +0 -115
  356. package/middleware/web_static/middleware.json +0 -9
  357. /package/{core/com → com}/api/README.md +0 -0
  358. /package/{core/com → com}/db/README.md +0 -0
  359. /package/{core/com → com}/event/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
@@ -0,0 +1,425 @@
1
+ const MQTT = require('mqtt');
2
+ const {
3
+ v4
4
+ } = require('uuid');
5
+
6
+
7
+ /**
8
+ * @module MQTT客户端
9
+ */
10
+ class Mqtt {
11
+ static config = {
12
+ hostname: '127.0.0.1',
13
+ port: '',
14
+ protocol: 'ws',
15
+ client_id,
16
+ subs_qos: 0,
17
+ publish_qos: 1,
18
+ username: 'demo',
19
+ password: 'asd123',
20
+ clean: false,
21
+ topic_receive: 'client/message/',
22
+ longtime: 15000,
23
+ // maxInflight: 20,
24
+ // 重连间隔时间,单位为毫秒, 默认6秒
25
+ reco_period: 6000,
26
+ // 连接超时时间,单位为毫秒, 默认30秒, 即尝试连接5次
27
+ connect_timeout: 30000, ...config
28
+ };
29
+ /**
30
+ * 构造函数
31
+ * @param {object} config 配置参数
32
+ */
33
+ constructor(config) {
34
+ this.config = {...Mqtt.config, ...config};
35
+ var client_id = v4();
36
+ // mqtt客户端服务器
37
+ this.client = null;
38
+
39
+ /**
40
+ * message queue
41
+ */
42
+ this.list_msg = [
43
+ /*
44
+ {
45
+ // information ID
46
+ id: "",
47
+ // request method
48
+ method: "",
49
+ // message parameters
50
+ params: {},
51
+ // Callback
52
+ func: function(res){}
53
+ }
54
+ */
55
+ ];
56
+
57
+ /**
58
+ * 订阅集合 (主题 => 函数列表)
59
+ */
60
+ this.dict_subscribe = {};
61
+
62
+ /**
63
+ * method collection
64
+ */
65
+ this.methods = {
66
+ /**
67
+ * 获取所有方法
68
+ * @returns {Array} 方法列表
69
+ */
70
+ getMethod: function () {
71
+ return Object.keys(_this.methods);
72
+ }
73
+ };
74
+
75
+ this.retry_times = 0;
76
+ this.connecting = false;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * 重新连接
82
+ */
83
+ Mqtt.prototype.reconnect = function () {
84
+ this.retry_times += 1;
85
+ if (this.retryTimes > 5) {
86
+ try {
87
+ this.client.end();
88
+ setTimeout(() => {
89
+ this.init();
90
+ }, this.config.reconnectPeriod);
91
+ } catch (error) {
92
+ this.$message.error(error.toString());
93
+ }
94
+ }
95
+ };
96
+
97
+ /**
98
+ * 初始化
99
+ * @param {object} config 配置参数
100
+ */
101
+ Mqtt.prototype.init = function (config) {
102
+ this.config = Object.assign(this.config, config);
103
+ this.client = {
104
+ connected: false,
105
+ };
106
+ this.retry_times = 0;
107
+ this.connecting = false;
108
+ };
109
+
110
+ /**
111
+ * 运行MQTT
112
+ * @param {object} config 配置参数
113
+ * @returns {Promise} 连接结果
114
+ */
115
+ Mqtt.prototype.run = function (config) {
116
+ this.connecting = true;
117
+
118
+ try {
119
+ var cg = Object.assign(this.config, config);
120
+ this._createClient(cg);
121
+
122
+ if (this.client.on) {
123
+ return this._setupClientEvents();
124
+ }
125
+ } catch (error) {
126
+ this.connecting = false;
127
+ return this._rejectPromise(error);
128
+ }
129
+
130
+ return this._rejectPromise();
131
+ };
132
+
133
+ /**
134
+ * 创建客户端
135
+ * @param {object} config 配置参数
136
+ * @private
137
+ */
138
+ Mqtt.prototype._createClient = function (config) {
139
+ // 创建配置副本以避免修改原始参数
140
+ var cg = { ...config };
141
+ if (cg.host) {
142
+ delete cg.hostname;
143
+ delete cg.port;
144
+ this.client = MQTT.connect(cg.host, cg);
145
+ } else {
146
+ this.client = MQTT.connect(cg);
147
+ }
148
+ };
149
+
150
+ /**
151
+ * 设置客户端事件
152
+ * @returns {Promise} 连接结果
153
+ * @private
154
+ */
155
+ Mqtt.prototype._setupClientEvents = function () {
156
+ return new Promise((resolve, reject) => {
157
+ this.client.on('connect', (packet, err) => {
158
+ this.connecting = false;
159
+ if (err) {
160
+ resolve(null);
161
+ reject(err);
162
+ } else {
163
+ this.client.on('message', async (topic, message) => {
164
+ await this.receive(topic, message.toString());
165
+ });
166
+ resolve(packet);
167
+ }
168
+ });
169
+ this.client.on('reconnect', this.reconnect);
170
+ this.client.on('error', (error) => {
171
+ console.error('Connection failed', error);
172
+ });
173
+ });
174
+ };
175
+
176
+ /**
177
+ * 创建被拒绝的Promise
178
+ * @param {Error} error 错误对象
179
+ * @returns {Promise} 被拒绝的Promise
180
+ * @private
181
+ */
182
+ Mqtt.prototype._rejectPromise = function (error) {
183
+ return new Promise((resolve, reject) => {
184
+ resolve(null);
185
+ reject(error);
186
+ });
187
+ };
188
+
189
+ /**
190
+ * 监听事件
191
+ * @param {string} event_name 事件名称
192
+ * @param {Function} func 事件处理函数
193
+ */
194
+ Mqtt.prototype.on = function (event_name, func) {
195
+ this.client.on(event_name, func);
196
+ };
197
+
198
+ /**
199
+ * 接收消息
200
+ * @param {string} topic 订阅板块
201
+ * @param {object} msg 消息主体
202
+ */
203
+ Mqtt.prototype.message = async function (topic, msg) {
204
+ if (this.dict_subscribe[topic]) {
205
+ var list = this.dict_subscribe[topic];
206
+ try {
207
+ for (var key in list) {
208
+ list[key](msg);
209
+ }
210
+ } catch (err) {
211
+ console.error(err);
212
+ }
213
+ }
214
+ };
215
+
216
+
217
+ /**
218
+ * 接收消息
219
+ * @param {string} topic 订阅
220
+ * @param {string} body_str 消息主体字符串
221
+ * @returns {object} 解析后的消息主体
222
+ */
223
+ Mqtt.prototype.receive = async function (topic, body_str) {
224
+ var json = this._parseMessage(body_str);
225
+
226
+ if (json) {
227
+ if (this._handleMessage(json)) {
228
+ return;
229
+ }
230
+
231
+ if (this._handleMethodMessage(json)) {
232
+ return;
233
+ }
234
+
235
+ await this.message(topic, json);
236
+ return;
237
+ }
238
+
239
+ await this.message(topic, body_str);
240
+ };
241
+
242
+ /**
243
+ * 解析消息
244
+ * @param {string} body_str 消息主体字符串
245
+ * @returns {object|null} 解析后的消息
246
+ * @private
247
+ */
248
+ Mqtt.prototype._parseMessage = function (body_str) {
249
+ if (body_str && (body_str.indexOf('[') === 0 || body_str.indexOf('{') === 0)) {
250
+ try {
251
+ return JSON.parse(body_str);
252
+ } catch { }
253
+ }
254
+ return null;
255
+ };
256
+
257
+ /**
258
+ * 处理消息
259
+ * @param {object} json 消息对象
260
+ * @returns {boolean} 是否处理成功
261
+ * @private
262
+ */
263
+ Mqtt.prototype._handleMessage = function (json) {
264
+ var id = json.id;
265
+ if (json.result && id) {
266
+ var lt = this.list_msg;
267
+ var len = lt.length;
268
+ for (var i = 0; i < len; i++) {
269
+ var o = lt[i];
270
+ if (id === o.id) {
271
+ o.func(json.result);
272
+ lt.splice(i, 1);
273
+ return true;
274
+ }
275
+ }
276
+ }
277
+ return false;
278
+ };
279
+
280
+ /**
281
+ * 处理方法消息
282
+ * @param {object} json 消息对象
283
+ * @returns {boolean} 是否处理成功
284
+ * @private
285
+ */
286
+ Mqtt.prototype._handleMethodMessage = function (json) {
287
+ if (json.method) {
288
+ var func = this._getMethod(json.method);
289
+ if (func) {
290
+ this._execMethod(func, json);
291
+ return true;
292
+ }
293
+ }
294
+ return false;
295
+ };
296
+
297
+ /**
298
+ * 获取方法
299
+ * @param {string} methodStr 方法字符串
300
+ * @returns {Function|null} 方法函数
301
+ * @private
302
+ */
303
+ Mqtt.prototype._getMethod = function (methodStr) {
304
+ var methods = this.methods;
305
+ var arr = methodStr.split('.');
306
+
307
+ for (var i = 0; i < arr.length; i++) {
308
+ var m = methods[arr[i]];
309
+ if (m) {
310
+ methods = m;
311
+ } else {
312
+ return null;
313
+ }
314
+ }
315
+
316
+ return typeof (methods) == 'function' ? methods : null;
317
+ };
318
+
319
+ /**
320
+ * 执行方法
321
+ * @param {Function} func 方法函数
322
+ * @param {object} json 消息对象
323
+ * @private
324
+ */
325
+ Mqtt.prototype._execMethod = function (func, json) {
326
+ var params = json.params;
327
+ var from = params.from;
328
+ var id = json.id;
329
+ var ret = func(params);
330
+
331
+ if (ret) {
332
+ var obj = {};
333
+ if (id) {
334
+ obj.id = id;
335
+ }
336
+ obj.result = ret;
337
+
338
+ if (from) {
339
+ var topic_receive = this.config.topic_receive + from;
340
+ this.send(topic_receive, obj);
341
+ }
342
+ }
343
+ };
344
+
345
+
346
+ Mqtt.prototype.subscribe = function (topic, func, qos = null, retain = false) {
347
+ // console.log("订阅", qos);
348
+ this.client.subscribe(topic, {
349
+ // 订阅消息方式,0为保留 , 1为确认收到1次
350
+ qos: qos || 0,
351
+ retain
352
+ });
353
+ if (func) {
354
+ if (!this.dict_subscribe[topic]) {
355
+ this.dict_subscribe[topic] = {};
356
+ }
357
+ var key = this.key_num + 1;
358
+ this.dict_subscribe[topic][key] = func;
359
+ return key;
360
+ }
361
+ return '';
362
+ };
363
+
364
+ Mqtt.prototype.unsubscribe = function (topic, key) {
365
+ this.client.unsubscribe(topic);
366
+ if (this.dict_subscribe[topic]) {
367
+ delete this.dict_subscribe[topic][key];
368
+ }
369
+ };
370
+
371
+ Mqtt.prototype.end = function () {
372
+ this.client.end();
373
+ };
374
+
375
+ Mqtt.prototype.publish = function (topic, message, qos = null, retain = false) {
376
+ this.client.publish(topic, message, {
377
+ qos: qos || 0,
378
+ retain
379
+ });
380
+ };
381
+
382
+ Mqtt.prototype.send = function (topic, msg_obj) {
383
+ this.publish(topic, JSON.stringify(msg_obj));
384
+ };
385
+
386
+ Mqtt.prototype.req = function (topic, method, params, func) {
387
+ var data = {
388
+ id: this.client.options.clientId + '_' + Date.parse(new Date()),
389
+ method,
390
+ params
391
+ };
392
+
393
+ if (func) {
394
+ data.func = func;
395
+ this.list_msg.push(data);
396
+ }
397
+ this.send(topic, data);
398
+ };
399
+
400
+ /**
401
+ * 同步请求 - 可及时取回消息
402
+ * @param {string} topic 订阅板块
403
+ * @param {string} method 请求方法
404
+ * @param {object} params 传递参数
405
+ * @returns {object} 返回响应结果
406
+ */
407
+ Mqtt.prototype.reqASync = function (topic, method, params) {
408
+ var _this = this;
409
+ return new Promise((resolve, reject) => {
410
+ var has_msg;
411
+ _this.req(topic, method, params, (res) => {
412
+ has_msg = true;
413
+ resolve(res);
414
+ });
415
+ setTimeout(() => {
416
+ if (!has_msg) {
417
+ resolve(null);
418
+ var err = new Error('request timeout!');
419
+ reject(err);
420
+ }
421
+ }, 3000);
422
+ });
423
+ };
424
+
425
+ module.exports = Mqtt;