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,241 @@
1
+ const { Drive } = require('mm_machine');
2
+ const { Entity } = require('./entity.js');
3
+
4
+ /**
5
+ * 实体管理器类
6
+ * 负责实体的创建、查询、更新和删除操作
7
+ * 管理实体与组件的关联关系
8
+ */
9
+ class Factory extends Drive {
10
+ static config = {
11
+ 'name': 'default',
12
+ 'title': '工厂',
13
+ 'description': '数据模型工厂类,负责创建和管理数据模型实例',
14
+ 'main': '',
15
+ 'components': []
16
+ };
17
+
18
+ /**
19
+ * 构造函数
20
+ * @param {object} config 配置参数
21
+ */
22
+ constructor(config) {
23
+ super({ ...Factory.config, ...config || {} });
24
+ // 组件注册表
25
+ this._component = {};
26
+ }
27
+ }
28
+
29
+ /**
30
+ * 获取模板目录
31
+ * @returns {string} 模板目录
32
+ */
33
+ Factory.prototype.getTplDir = function () {
34
+ return __dirname;
35
+ };
36
+
37
+ /**
38
+ * 初始化核心
39
+ * @param {object} component 组件注册表
40
+ * @param {object} eventer 事件管理器
41
+ * @param {object} logger 日志管理器
42
+ */
43
+ Factory.prototype._initCore = async function (component, eventer, logger) {
44
+ // 初始化依赖项
45
+ if (logger) {
46
+ this.setLogger(logger);
47
+ }
48
+
49
+ if (eventer) {
50
+ this.getEventer = function () {
51
+ return eventer;
52
+ };
53
+ }
54
+
55
+ if (component) {
56
+ this._component = component;
57
+ }
58
+
59
+ this._checkDeps();
60
+ };
61
+
62
+ /**
63
+ * 检查依赖项
64
+ */
65
+ Factory.prototype._checkDeps = function () {
66
+ let { components } = this.config;
67
+ components = components || [];
68
+ for (let i = 0; i < components.length; i++) {
69
+ let name = components[i];
70
+ if (!this._component[name]) {
71
+ this.log('error', `组件 ${name} 不存在`);
72
+ }
73
+ }
74
+ };
75
+
76
+ /**
77
+ * 注册组件类型
78
+ * @param {string} name 组件类型
79
+ * @param {object} component 组件类
80
+ */
81
+ Factory.prototype.registerComponent = function (name, component) {
82
+ // 参数校验
83
+ if (typeof name !== 'string') {
84
+ throw new TypeError('组件类型必须是字符串');
85
+ }
86
+
87
+ if (typeof component !== 'object') {
88
+ throw new TypeError('组件类必须是对象');
89
+ }
90
+ this._component[name] = component;
91
+ };
92
+
93
+ /**
94
+ * 注销组件类型
95
+ * @param {string} name 组件类型
96
+ * @returns {boolean} 是否注销成功
97
+ */
98
+ Factory.prototype.unregisterComponent = function (name) {
99
+ // 参数校验
100
+ if (typeof name !== 'string') {
101
+ throw new TypeError('组件类型必须是字符串');
102
+ }
103
+
104
+ delete this._component[name];
105
+ return true;
106
+ };
107
+
108
+ /**
109
+ * 创建实体
110
+ * @param {object} model 实体模型
111
+ * @param {string} model.entity_id 实体ID - 可选,默认自动生成
112
+ * @param {string} model.player_id 玩家ID - 可选,默认空字符串
113
+ * @param {string} model.type 实体类型 - 可选,默认空字符串
114
+ * @returns {object} 实体对象
115
+ */
116
+ Factory.prototype.createEntity = function (model = {}) {
117
+ let entity = new Entity(model.entity_id, model.player_id, model.type);
118
+ let { components } = this.config;
119
+ for (let i = 0; i < components.length; i++) {
120
+ let name = components[i];
121
+ if (this._component[name]) {
122
+ entity.addComponent(name, this._component[name].create(model[name]));
123
+ }
124
+ }
125
+ // 触发实体创建事件
126
+ this.emitEvent('factory_entity_create', {
127
+ factory_name: this.config.name,
128
+ entity_id: entity.entity_id,
129
+ entity_type: entity.type,
130
+ timestamp: Date.now()
131
+ });
132
+ return entity;
133
+ };
134
+
135
+ /**
136
+ * 设置实体模型
137
+ * @param {Entity} entity 实体对象
138
+ * @param {object} model 实体模型
139
+ */
140
+ Factory.prototype.setModel = function (entity, model) {
141
+ // 初始化实体
142
+ entity.setModel(model);
143
+ };
144
+
145
+ /**
146
+ * 为实体添加组件
147
+ * @param {Entity} entity 实体对象
148
+ * @param {string} name 组件类型
149
+ * @param {object} component_data 组件数据
150
+ * @returns {boolean} 是否添加成功
151
+ */
152
+ Factory.prototype.addComponent = function (entity, name, component_data) {
153
+ // 参数校验
154
+ if (typeof entity !== 'object' || !entity.isActive()) {
155
+ throw new TypeError('实体必须是有效实体对象');
156
+ }
157
+
158
+ if (typeof name !== 'string') {
159
+ throw new TypeError('组件类型必须是字符串');
160
+ }
161
+
162
+ if (typeof component_data !== 'object' || Array.isArray(component_data)) {
163
+ throw new TypeError('组件数据必须是对象');
164
+ }
165
+
166
+ let result = entity.addComponent(name, component_data);
167
+ // 触发组件添加事件
168
+ this.emitEvent('factory_component_add', {
169
+ factory_name: this.config.name,
170
+ entity_id: entity.entity_id,
171
+ component: name,
172
+ timestamp: Date.now()
173
+ });
174
+ return result;
175
+ };
176
+
177
+ /**
178
+ * 从实体移除组件
179
+ * @param {Entity} entity 实体对象
180
+ * @param {string} name 组件类型
181
+ * @returns {boolean} 是否移除成功
182
+ */
183
+ Factory.prototype.delComponent = function (entity, name) {
184
+ // 参数校验
185
+ if (typeof entity !== 'object' || !entity.isActive()) {
186
+ throw new TypeError('实体必须是有效实体对象');
187
+ }
188
+
189
+ if (typeof name !== 'string') {
190
+ throw new TypeError('组件类型必须是字符串');
191
+ }
192
+
193
+ let result = entity.delComponent(name);
194
+ // 触发组件移除事件
195
+ this.emitEvent('factory_component_del', {
196
+ factory_name: this.config.name,
197
+ entity_id: entity.entity_id,
198
+ component: name,
199
+ timestamp: Date.now()
200
+ });
201
+ return result;
202
+ };
203
+
204
+ /**
205
+ * 创建模型
206
+ * @param {object} data 模型数据
207
+ * @returns {object} 模型对象
208
+ */
209
+ Factory.prototype.createModel = function (data) {
210
+ if (typeof data !== 'object' || Array.isArray(data)) {
211
+ throw new TypeError('模型数据必须是对象');
212
+ }
213
+ let entity = new Entity(model.entity_id, model.player_id);
214
+ // let { components } = this.config;
215
+ return entity;
216
+ };
217
+
218
+ /**
219
+ * 创建实体
220
+ * @param {object} data 实体数据
221
+ * @returns {object} 实体对象
222
+ */
223
+ Factory.prototype.create = function (data) {
224
+ if (typeof data !== 'object') {
225
+ throw new TypeError('实体数据必须是对象');
226
+ }
227
+
228
+ let entity = this.createEntity(data);
229
+ this.addMethod(entity);
230
+ return entity;
231
+ };
232
+
233
+ /**
234
+ * 为实体添加方法
235
+ * @param {Entity} entity 实体对象
236
+ */
237
+ Factory.prototype.addMethod = function (entity) {
238
+
239
+ };
240
+
241
+ exports.Factory = Factory;
@@ -0,0 +1,16 @@
1
+ module.exports = {
2
+ /**
3
+ * 组件工厂方法
4
+ * @param {object} component 组件对象
5
+ */
6
+ async _init(component) {
7
+ // this.log('debug', '初始化');
8
+ },
9
+ /**
10
+ * 追加方法到实体
11
+ * @param {object} entity 实体对象
12
+ */
13
+ async addMethod(entity) {
14
+
15
+ }
16
+ };
@@ -0,0 +1,137 @@
1
+ const { Drive } = require('mm_machine');
2
+ const { GameWorld } = require('./world.js');
3
+
4
+ /**
5
+ * 游戏
6
+ */
7
+ class Game extends Drive {
8
+ static config = {
9
+ name: 'default',
10
+ // 世界类型 可选值:角色扮演RPG、动作游戏ACT、冒险游戏AVG、AAG、SLG、SRPG、RTS、FTG、STG、FPS、TPS、PZL、SPG、RCG(RAC)、CAG、TAB、MSC、WAG、MUD、MOBA
11
+ type: 'RPG',
12
+ };
13
+
14
+ /**
15
+ * 构造函数
16
+ * @param {object} config 配置参数
17
+ * @param {object} parent 父对象
18
+ */
19
+ constructor(config, parent) {
20
+ super({ ...Game.config, ...config || {} }, parent);
21
+ // // 世界列表
22
+ // this._worlds = new Map();
23
+ }
24
+ }
25
+
26
+ /**
27
+ * 初始化游戏
28
+ * @param {object} server 游戏服务器
29
+ * @param {object} eventer 事件管理器
30
+ * @param {object} logger 日志管理器
31
+ */
32
+ Game.prototype._initCore = async function (server, eventer, logger) {
33
+ if (logger) {
34
+ this.setLogger(logger);
35
+ }
36
+ if (eventer) {
37
+ this.getEventer = function () {
38
+ return eventer;
39
+ };
40
+ }
41
+ if (!server) {
42
+ throw new TypeError('游戏服务器不能为空');
43
+ }
44
+ else {
45
+ this.getServer = function () {
46
+ return server;
47
+ };
48
+ }
49
+ };
50
+
51
+ /**
52
+ * 创建世界
53
+ * @param {object} config 世界配置
54
+ * @param {string} world_id 世界ID
55
+ * @returns {object} 创建的世界对象
56
+ */
57
+ Game.prototype.createWorld = async function (config, world_id) {
58
+ // 参数校验
59
+ if (!config.name) {
60
+ throw new TypeError('世界配置必须包含名称');
61
+ }
62
+
63
+ let world = new GameWorld(config, this);
64
+ world.world_id = world_id;
65
+ await world.do('init', this._channel, this.getEventer(), this.getLogger());
66
+ this._worlds.set(world.world_id, world);
67
+ return world;
68
+ };
69
+
70
+ /**
71
+ * 获取世界
72
+ * @param {string} world_id 世界ID
73
+ * @returns {object} 世界对象
74
+ */
75
+ Game.prototype.get = function (world_id) {
76
+ return this._worlds.get(world_id);
77
+ };
78
+
79
+ /**
80
+ * 创建主城世界
81
+ * @param {object} config 世界配置
82
+ * @returns {object} 游戏世界对象
83
+ */
84
+ Game.prototype._createMainWorld = async function (config = {}) {
85
+ var world = await this.createWorld({
86
+ name: 'main_world',
87
+ title: '主城世界',
88
+ type: 'safe',
89
+ max_players: this.config.max_players || 5000,
90
+ ...config
91
+ });
92
+ this._channel.main_world_id = world.world_id;
93
+ return world;
94
+ };
95
+
96
+ /**
97
+ * 获取世界
98
+ * @param {string} world_id 世界ID
99
+ * @returns {object} 世界对象
100
+ */
101
+ Game.prototype.getById = function (world_id) {
102
+ return this._worlds.get(world_id);
103
+ };
104
+
105
+ /**
106
+ * 进入世界
107
+ * @param {string} world_id 世界ID
108
+ * @param {string} player_id 玩家ID
109
+ * @returns {object} 世界对象
110
+ * @throws {Error} 进入世界失败时抛出
111
+ */
112
+ Game.prototype.enter = function (world_id, player_id) {
113
+ let game = this.getById(world_id);
114
+ if (!game) {
115
+ throw new Error(`${world_id} 不存在`);
116
+ }
117
+ game.enter(player_id);
118
+ return game;
119
+ };
120
+
121
+ /**
122
+ * 根据世界名称获取世界对象
123
+ * @param {string} name 世界名称
124
+ * @returns {object|null} 世界对象,如果不存在则返回null
125
+ */
126
+ Game.prototype.getByName = function (name) {
127
+ for (let game of this._worlds.values()) {
128
+ if (game.config.name === name) {
129
+ return game;
130
+ }
131
+ }
132
+ return null;
133
+ };
134
+
135
+ module.exports = {
136
+ Game
137
+ };