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,51 @@
1
+ /**
2
+ * 插件,用于拓展功能
3
+ */
4
+ module.exports = {
5
+ /**
6
+ * 安装
7
+ */
8
+ async _install() {
9
+ this.log('info', `插件安装`);
10
+ },
11
+ /**
12
+ * 卸载
13
+ */
14
+ async _uninstall() {
15
+ this.log('info', `插件卸载`);
16
+ },
17
+ /**
18
+ * 初始化
19
+ * @param {object} app 应用实例
20
+ */
21
+ async _init(app) {
22
+ // this.log('debug', `初始化!`);
23
+ },
24
+ /**
25
+ * 启动
26
+ */
27
+ async _start() {
28
+ // this.log('debug', `启动!`);
29
+ },
30
+ /**
31
+ * 停止
32
+ */
33
+ async _stop() {
34
+ this.log('debug', `停止!`);
35
+ },
36
+ /**
37
+ * 销毁
38
+ * @param {...any} args 参数列表
39
+ */
40
+ async _destroy(...args) {
41
+ this.log('debug', `销毁!`, { args });
42
+ },
43
+ /**
44
+ * 主要逻辑
45
+ * @param {...any} args 参数列表
46
+ */
47
+ async main(...args) {
48
+ // 主要代码写在这
49
+ this.log('debug', `主要逻辑被调用`, { args });
50
+ }
51
+ };
@@ -0,0 +1,14 @@
1
+ {
2
+ // 名称
3
+ "name": "${name}",
4
+ // 标题
5
+ "title": "${title || '推送'}",
6
+ // 描述
7
+ "description": "${description || '推送器'}",
8
+ // 主文件
9
+ "main": "${main || 'index.js'}",
10
+ // 状态 0:禁用 1:启用
11
+ "state": 1,
12
+ // 排序,越小越靠前
13
+ "sort": 100
14
+ }
@@ -0,0 +1,161 @@
1
+ const { Drive } = require('mm_machine');
2
+
3
+ /**
4
+ * 广播器
5
+ * 进行websocket、socket、mqtt广播
6
+ */
7
+ class Pusher extends Drive {
8
+ static config = {
9
+ // 广播器名称
10
+ name: 'default',
11
+ // 推送配置
12
+ // 推送类型: websocket, mqtt、socket
13
+ type: 'websocket',
14
+ // 推送策略: realtime(实时), batch(批量)
15
+ strategy: 'realtime',
16
+ // 批量推送间隔(毫秒)
17
+ batch_interval: 100,
18
+ // 推送队列大小
19
+ queue_size: 1000,
20
+ // 最大重试次数
21
+ max_retry: 3,
22
+ // 重试间隔(毫秒)
23
+ retry_interval: 500,
24
+ // 是否启用压缩
25
+ compression: false
26
+ };
27
+ /**
28
+ * 构造函数
29
+ * @param {object} config 配置参数
30
+ * @param {object} parent 父对象
31
+ */
32
+ constructor(config, parent) {
33
+ super({ ...Pusher.config, ...config || {} }, parent);
34
+ // 推送队列
35
+ this._push_queue = [];
36
+ // 推送计时器
37
+ this._batch_timer = null;
38
+ }
39
+ }
40
+
41
+ /**
42
+ * 获取模板目录
43
+ * @returns {string} 模板目录
44
+ */
45
+ Pusher.prototype.getTplDir = function () {
46
+ return __dirname;
47
+ };
48
+
49
+ /**
50
+ * 初始化核心
51
+ * @param {object} adapter 适配器
52
+ * @param {object} eventer 事件总线
53
+ * @param {object} logger 日志管理器
54
+ */
55
+ Pusher.prototype._initCore = async function (adapter, eventer, logger) {
56
+ // 初始化依赖项
57
+ if (logger) {
58
+ this.setLogger(logger);
59
+ }
60
+ if (eventer) {
61
+ this.getEventer = function () {
62
+ return eventer;
63
+ };
64
+ }
65
+ if (adapter) {
66
+ this.getAdapter = function () {
67
+ return adapter[this.config.type];
68
+ };
69
+ }
70
+
71
+ // 初始化批量推送计时器
72
+ if (this.config.strategy === 'batch') {
73
+ this._startBatchTimer();
74
+ }
75
+
76
+ // 注册事件监听
77
+ this._registerEvents();
78
+ };
79
+
80
+ /**
81
+ * 注册事件监听
82
+ * @private
83
+ */
84
+ Pusher.prototype._registerEvents = function () {
85
+ // 监听实体数据变化事件
86
+ let eventer = this.getEventer();
87
+ eventer.on('entity_changed', (data) => {
88
+ console.log('entity_changed', data);
89
+ });
90
+
91
+ // 监听实体创建事件
92
+ eventer.on('entity_created', (data) => {
93
+ console.log('entity_created', data);
94
+ });
95
+
96
+ // 监听实体删除事件
97
+ eventer.on('entity_deleted', (data) => {
98
+ console.log('entity_deleted', data);
99
+ });
100
+ };
101
+
102
+ /**
103
+ * 广播消息给所有连接的客户端
104
+ * @param {string} method 方法名
105
+ * @param {object} params 参数
106
+ */
107
+ Pusher.prototype.broadcast = function (method, params) {
108
+ };
109
+
110
+ /**
111
+ * 启动
112
+ */
113
+ Pusher.prototype._start = async function () {
114
+ this.log('info', '启动');
115
+
116
+ // 启动批量推送计时器
117
+ if (this.config.strategy === 'batch') {
118
+ this._startBatchTimer();
119
+ }
120
+ };
121
+
122
+ /**
123
+ * 停止
124
+ */
125
+ Pusher.prototype._stop = async function () {
126
+ // 停止批量推送计时器
127
+ if (this._batch_timer) {
128
+ clearInterval(this._batch_timer);
129
+ this._batch_timer = null;
130
+ }
131
+
132
+ // 清空推送队列
133
+ this._push_queue = [];
134
+
135
+ this.log('info', 'stopped');
136
+ };
137
+
138
+ /**
139
+ * 销毁
140
+ */
141
+ Pusher.prototype._destroy = function () {
142
+ try {
143
+ // 停止批量推送计时器
144
+ if (this._batch_timer) {
145
+ clearInterval(this._batch_timer);
146
+ this._batch_timer = null;
147
+ }
148
+
149
+ // 清空存储引用
150
+ this._push_queue = [];
151
+
152
+ this.log('info', 'destroyed');
153
+
154
+ // 移除所有监听器
155
+ this.removeAllListeners();
156
+ } catch (error) {
157
+ this.log('error', `销毁失败`, error);
158
+ }
159
+ };
160
+
161
+ exports.Pusher = Pusher;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 广播器
3
+ */
4
+ module.exports = {
5
+ /**
6
+ * 初始化
7
+ * @param {object} eventer 事件总线
8
+ */
9
+ async _init(eventer) {
10
+ // this.log('debug', '初始化');
11
+ },
12
+ /**
13
+ * 主要逻辑
14
+ * @param {...any} args 参数列表
15
+ */
16
+ async main(...args) {
17
+ // 主要代码写在这
18
+ this.log('debug', 'pusher main 被调用', { args });
19
+ }
20
+ };
@@ -0,0 +1,170 @@
1
+ const {
2
+ Drive
3
+ } = require('mm_machine');
4
+
5
+ /**
6
+ * 游戏房间
7
+ */
8
+ class Room extends Drive {
9
+ static config = {
10
+ // 房间名称
11
+ 'name': '5v5',
12
+ // 房间标题
13
+ 'title': '',
14
+ // 房间等级上限
15
+ 'max_level': 1000,
16
+ // 房间最大人数
17
+ 'max_players': 5,
18
+ // 游戏类型 rpg、card
19
+ 'type': 'card',
20
+ // 游戏类型 排位赛rank、娱乐局casual
21
+ 'mode': 'rank',
22
+ // 房间主程序
23
+ 'main': ''
24
+ };
25
+
26
+ /**
27
+ * 构造函数
28
+ * @param {object} config 配置参数
29
+ */
30
+ constructor(config) {
31
+ super({
32
+ ...Room.config,
33
+ ...config
34
+ });
35
+
36
+ // 房间列表
37
+ this.list = new Map();
38
+ }
39
+ };
40
+
41
+ /**
42
+ * 获取模板目录
43
+ * @returns {string} 模板目录
44
+ */
45
+ Room.prototype.getTplDir = function() {
46
+ return __dirname;
47
+ };
48
+
49
+ /**
50
+ * 初始化核心
51
+ * @param {object} zone 游戏世界分区
52
+ * @param {object} eventer 事件管理器
53
+ * @param {object} logger 日志管理器
54
+ */
55
+ Room.prototype._initCore = async function (zone, eventer, logger) {
56
+ if (!zone) {
57
+ throw new TypeError('游戏世界分区不能为空');
58
+ }
59
+ // 游戏世界分区
60
+ this.getZone = function () {
61
+ return zone;
62
+ };
63
+ if (logger) {
64
+ this.setLogger(logger);
65
+ }
66
+ if (eventer) {
67
+ this.getEventer = function () {
68
+ return eventer;
69
+ };
70
+ }
71
+ };
72
+
73
+ /**
74
+ * 开始匹配
75
+ */
76
+ Room.prototype.startMatch = function () {
77
+ // 检查所有玩家是否已准备
78
+ if (!this.isAllPlayersReady()) {
79
+ throw new Error('房间内玩家未全部准备');
80
+ }
81
+ // 检查房间是否已开始匹配
82
+ if (this.state === 2) {
83
+ throw new Error('房间已开始匹配');
84
+ }
85
+ // 检查房间是否已开始游戏
86
+ else if (this.state === 3) {
87
+ throw new Error('房间已开始游戏');
88
+ }
89
+
90
+ this.state = 2;
91
+ // 记录匹配开始时间
92
+ this._match_time = Date.now();
93
+
94
+ // 触发开始匹配事件
95
+ this.emitEvent('room_start_match', {
96
+ room_id: this.room_id,
97
+ room_name: this.config.name,
98
+ timestamp: this._match_time
99
+ });
100
+ };
101
+
102
+ /**
103
+ * 匹配玩家
104
+ * 根据房间配置进行玩家匹配
105
+ * @returns {object} 匹配结果
106
+ */
107
+ Room.prototype._matchPlayers = function () {
108
+ var config = this.config;
109
+ var format = config.format || '5v5';
110
+ var mode = config.mode || 'rank';
111
+ var player_ids = this.getAllPlayerIds();
112
+ var player_count = player_ids.length;
113
+
114
+ var ret = this._checkMatch(player_count, config.max_players || 6);
115
+ if (!ret.valid) {
116
+ return { success: false, reason: ret.reason };
117
+ }
118
+
119
+ var teams = this._splitTeams(player_ids, format);
120
+ if (!teams) {
121
+ return { success: false, reason: '玩家数量不符合比赛格式要求' };
122
+ }
123
+
124
+ return this._buildMatch(mode, format, teams, player_count);
125
+ };
126
+
127
+ /**
128
+ * 检查匹配条件
129
+ * @param {number} player_count 玩家数量
130
+ * @param {number} max_players 最大玩家数
131
+ * @returns {object} 检查结果
132
+ */
133
+ Room.prototype._checkMatch = function (player_count, max_players) {
134
+ if (player_count === 0) {
135
+ return { valid: false, reason: '房间内没有玩家' };
136
+ }
137
+ if (player_count > max_players) {
138
+ return { valid: false, reason: '房间内玩家数量超过上限' };
139
+ }
140
+ return { valid: true };
141
+ };
142
+
143
+ /**
144
+ * 构建匹配结果
145
+ * @param {string} mode 游戏模式
146
+ * @param {string} format 比赛格式
147
+ * @param {object} teams 队伍配置
148
+ * @param {number} player_count 玩家数量
149
+ * @returns {object} 匹配结果
150
+ */
151
+ Room.prototype._buildMatch = function (mode, format, teams, player_count) {
152
+ var ret = {
153
+ success: true,
154
+ room_id: this.room_id,
155
+ mode: mode,
156
+ format: format,
157
+ teams: teams,
158
+ player_count: player_count,
159
+ timestamp: Date.now()
160
+ };
161
+
162
+ this.emitEvent('room_match_success', {
163
+ room_id: this.room_id,
164
+ ret: ret
165
+ });
166
+
167
+ return ret;
168
+ };
169
+
170
+ exports.Room = Room;