jp.ms.common.engine 1.0.21 → 2.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 (557) hide show
  1. package/dist/base/base-figure-type.enum.d.ts +4 -0
  2. package/dist/base/base-figure-type.enum.d.ts.map +1 -0
  3. package/dist/base/base-figure-type.enum.js +8 -0
  4. package/dist/base/base-figure-type.enum.js.map +1 -0
  5. package/dist/base/base-figure.d.ts +10 -0
  6. package/dist/base/base-figure.d.ts.map +1 -0
  7. package/dist/base/base-figure.js +20 -0
  8. package/dist/base/base-figure.js.map +1 -0
  9. package/dist/base/base-move-data.d.ts +5 -4
  10. package/dist/base/base-move-data.d.ts.map +1 -1
  11. package/dist/base/base-move-data.js +3 -3
  12. package/dist/base/base-move-data.js.map +1 -1
  13. package/dist/base/base-player-move-factory.d.ts +10 -0
  14. package/dist/base/base-player-move-factory.d.ts.map +1 -0
  15. package/dist/base/base-player-move-factory.js +13 -0
  16. package/dist/base/base-player-move-factory.js.map +1 -0
  17. package/dist/base/base-player-move.d.ts +17 -0
  18. package/dist/base/base-player-move.d.ts.map +1 -0
  19. package/dist/base/base-player-move.js +24 -0
  20. package/dist/base/base-player-move.js.map +1 -0
  21. package/dist/base/game-control-player-turn.d.ts +1 -0
  22. package/dist/base/game-control-player-turn.d.ts.map +1 -1
  23. package/dist/base/game-control-player-turn.js +6 -0
  24. package/dist/base/game-control-player-turn.js.map +1 -1
  25. package/dist/base/game-control-restart.d.ts +1 -0
  26. package/dist/base/game-control-restart.d.ts.map +1 -1
  27. package/dist/base/game-control-restart.js +5 -0
  28. package/dist/base/game-control-restart.js.map +1 -1
  29. package/dist/base/game-master.d.ts +94 -30
  30. package/dist/base/game-master.d.ts.map +1 -1
  31. package/dist/base/game-master.js +351 -55
  32. package/dist/base/game-master.js.map +1 -1
  33. package/dist/base/game-player-connections-helper.d.ts +3 -12
  34. package/dist/base/game-player-connections-helper.d.ts.map +1 -1
  35. package/dist/base/game-player-connections-helper.js +10 -16
  36. package/dist/base/game-player-connections-helper.js.map +1 -1
  37. package/dist/base/game-player-exited.d.ts +15 -0
  38. package/dist/base/game-player-exited.d.ts.map +1 -0
  39. package/dist/base/game-player-exited.js +29 -0
  40. package/dist/base/game-player-exited.js.map +1 -0
  41. package/dist/base/game-player.d.ts +76 -45
  42. package/dist/base/game-player.d.ts.map +1 -1
  43. package/dist/base/game-player.js +164 -98
  44. package/dist/base/game-player.js.map +1 -1
  45. package/dist/base/game-result-equal-helper.d.ts +6 -0
  46. package/dist/base/game-result-equal-helper.d.ts.map +1 -0
  47. package/dist/base/game-result-equal-helper.js +19 -0
  48. package/dist/base/game-result-equal-helper.js.map +1 -0
  49. package/dist/base/game-result-helper.d.ts +13 -0
  50. package/dist/base/game-result-helper.d.ts.map +1 -0
  51. package/dist/base/game-result-helper.js +24 -0
  52. package/dist/base/game-result-helper.js.map +1 -0
  53. package/dist/base/game-result-rating-helper.d.ts +18 -0
  54. package/dist/base/game-result-rating-helper.d.ts.map +1 -0
  55. package/dist/base/game-result-rating-helper.js +32 -0
  56. package/dist/base/game-result-rating-helper.js.map +1 -0
  57. package/dist/base/game-room.d.ts +38 -7
  58. package/dist/base/game-room.d.ts.map +1 -1
  59. package/dist/base/game-room.js +67 -10
  60. package/dist/base/game-room.js.map +1 -1
  61. package/dist/base/game-round-history-item.d.ts +25 -0
  62. package/dist/base/game-round-history-item.d.ts.map +1 -0
  63. package/dist/base/game-round-history-item.enum.d.ts +7 -0
  64. package/dist/base/game-round-history-item.enum.d.ts.map +1 -0
  65. package/dist/base/game-round-history-item.enum.js +11 -0
  66. package/dist/base/game-round-history-item.enum.js.map +1 -0
  67. package/dist/base/game-round-history-item.js +52 -0
  68. package/dist/base/game-round-history-item.js.map +1 -0
  69. package/dist/base/game-round.d.ts +16 -9
  70. package/dist/base/game-round.d.ts.map +1 -1
  71. package/dist/base/game-round.js +34 -0
  72. package/dist/base/game-round.js.map +1 -1
  73. package/dist/base/game-state-machine.d.ts +5 -0
  74. package/dist/base/game-state-machine.d.ts.map +1 -1
  75. package/dist/base/game-state-machine.js.map +1 -1
  76. package/dist/base/game-table-seat.d.ts +10 -3
  77. package/dist/base/game-table-seat.d.ts.map +1 -1
  78. package/dist/base/game-table-seat.js +43 -2
  79. package/dist/base/game-table-seat.js.map +1 -1
  80. package/dist/base/game-table-seats.d.ts +4 -6
  81. package/dist/base/game-table-seats.d.ts.map +1 -1
  82. package/dist/base/game-table-seats.js +13 -27
  83. package/dist/base/game-table-seats.js.map +1 -1
  84. package/dist/base/game-table.d.ts +24 -21
  85. package/dist/base/game-table.d.ts.map +1 -1
  86. package/dist/base/game-table.js +72 -42
  87. package/dist/base/game-table.js.map +1 -1
  88. package/dist/base/index.d.ts +9 -4
  89. package/dist/base/index.d.ts.map +1 -1
  90. package/dist/base/index.js +15 -3
  91. package/dist/base/index.js.map +1 -1
  92. package/dist/base-rooms/simple-room.d.ts +7 -7
  93. package/dist/base-rooms/simple-room.d.ts.map +1 -1
  94. package/dist/base-rooms/simple-room.js +5 -4
  95. package/dist/base-rooms/simple-room.js.map +1 -1
  96. package/dist/base-rooms/tournament-state.d.ts +1 -1
  97. package/dist/base-rooms/tournament-state.d.ts.map +1 -1
  98. package/dist/base-rooms/tournament-state.js +1 -1
  99. package/dist/base-rooms/tournament-state.js.map +1 -1
  100. package/dist/cards-game/cards/card.d.ts +14 -14
  101. package/dist/cards-game/cards/card.d.ts.map +1 -1
  102. package/dist/cards-game/cards/card.js +36 -17
  103. package/dist/cards-game/cards/card.js.map +1 -1
  104. package/dist/cards-game/cards-deck/cards-deck-type.enum.d.ts +8 -0
  105. package/dist/cards-game/cards-deck/cards-deck-type.enum.d.ts.map +1 -0
  106. package/dist/cards-game/cards-deck/cards-deck-type.enum.js +12 -0
  107. package/dist/cards-game/cards-deck/cards-deck-type.enum.js.map +1 -0
  108. package/dist/cards-game/cards-deck/cards-deck.d.ts +23 -0
  109. package/dist/cards-game/cards-deck/cards-deck.d.ts.map +1 -0
  110. package/dist/cards-game/cards-deck/cards-deck.js +84 -0
  111. package/dist/cards-game/cards-deck/cards-deck.js.map +1 -0
  112. package/dist/cards-game/cards-deck/types/deck12.d.ts +2 -0
  113. package/dist/cards-game/cards-deck/types/deck12.d.ts.map +1 -0
  114. package/dist/cards-game/cards-deck/types/deck12.js +19 -0
  115. package/dist/cards-game/cards-deck/types/deck12.js.map +1 -0
  116. package/dist/cards-game/cards-deck/types/deck24.d.ts +2 -0
  117. package/dist/cards-game/cards-deck/types/deck24.d.ts.map +1 -0
  118. package/dist/cards-game/cards-deck/types/deck24.js +31 -0
  119. package/dist/cards-game/cards-deck/types/deck24.js.map +1 -0
  120. package/dist/cards-game/cards-deck/types/deck36.d.ts +2 -0
  121. package/dist/cards-game/cards-deck/types/deck36.d.ts.map +1 -0
  122. package/dist/cards-game/{cards → cards-deck/types}/deck36.js +1 -1
  123. package/dist/cards-game/cards-deck/types/deck36.js.map +1 -0
  124. package/dist/cards-game/cards-deck/types/deck52.d.ts +2 -0
  125. package/dist/cards-game/cards-deck/types/deck52.d.ts.map +1 -0
  126. package/dist/cards-game/{cards → cards-deck/types}/deck52.js +1 -1
  127. package/dist/cards-game/cards-deck/types/deck52.js.map +1 -0
  128. package/dist/cards-game/cards-game-master.d.ts +16 -5
  129. package/dist/cards-game/cards-game-master.d.ts.map +1 -1
  130. package/dist/cards-game/cards-game-master.js +49 -20
  131. package/dist/cards-game/cards-game-master.js.map +1 -1
  132. package/dist/cards-game/cards-pairs/card-pair-slot.d.ts +24 -0
  133. package/dist/cards-game/cards-pairs/card-pair-slot.d.ts.map +1 -0
  134. package/dist/cards-game/cards-pairs/card-pair-slot.js +56 -0
  135. package/dist/cards-game/cards-pairs/card-pair-slot.js.map +1 -0
  136. package/dist/cards-game/cards-pairs/card-pair-slots.d.ts +25 -0
  137. package/dist/cards-game/cards-pairs/card-pair-slots.d.ts.map +1 -0
  138. package/dist/cards-game/cards-pairs/card-pair-slots.js +84 -0
  139. package/dist/cards-game/cards-pairs/card-pair-slots.js.map +1 -0
  140. package/dist/cards-game/cards-player.d.ts +17 -5
  141. package/dist/cards-game/cards-player.d.ts.map +1 -1
  142. package/dist/cards-game/cards-player.js +51 -11
  143. package/dist/cards-game/cards-player.js.map +1 -1
  144. package/dist/cards-game/index.d.ts +6 -3
  145. package/dist/cards-game/index.d.ts.map +1 -1
  146. package/dist/cards-game/index.js +9 -3
  147. package/dist/cards-game/index.js.map +1 -1
  148. package/dist/events/base/base-game.event.d.ts +3 -0
  149. package/dist/events/base/base-game.event.d.ts.map +1 -0
  150. package/dist/events/base/base-game.event.js +7 -0
  151. package/dist/events/base/base-game.event.js.map +1 -0
  152. package/dist/events/base/game-player.event.d.ts +11 -0
  153. package/dist/events/base/game-player.event.d.ts.map +1 -0
  154. package/dist/events/base/game-player.event.js +23 -0
  155. package/dist/events/base/game-player.event.js.map +1 -0
  156. package/dist/events/base/game-room.event.d.ts +8 -0
  157. package/dist/events/base/game-room.event.d.ts.map +1 -0
  158. package/dist/events/base/game-room.event.js +15 -0
  159. package/dist/events/base/game-room.event.js.map +1 -0
  160. package/dist/events/base/game-table.event.d.ts +8 -0
  161. package/dist/events/base/game-table.event.d.ts.map +1 -0
  162. package/dist/events/base/game-table.event.js +15 -0
  163. package/dist/events/base/game-table.event.js.map +1 -0
  164. package/dist/events/game/game-player-activate.event.d.ts +4 -0
  165. package/dist/events/game/game-player-activate.event.d.ts.map +1 -0
  166. package/dist/events/game/game-player-activate.event.js +8 -0
  167. package/dist/events/game/game-player-activate.event.js.map +1 -0
  168. package/dist/events/game/game-player-activated.event.d.ts +4 -0
  169. package/dist/events/game/game-player-activated.event.d.ts.map +1 -0
  170. package/dist/events/game/game-player-activated.event.js +8 -0
  171. package/dist/events/game/game-player-activated.event.js.map +1 -0
  172. package/dist/events/game/game-player-deactivate.event.d.ts +4 -0
  173. package/dist/events/game/game-player-deactivate.event.d.ts.map +1 -0
  174. package/dist/events/game/game-player-deactivate.event.js +8 -0
  175. package/dist/events/game/game-player-deactivate.event.js.map +1 -0
  176. package/dist/events/game/game-player-deactivated.event.d.ts +4 -0
  177. package/dist/events/game/game-player-deactivated.event.d.ts.map +1 -0
  178. package/dist/events/game/game-player-deactivated.event.js +8 -0
  179. package/dist/events/game/game-player-deactivated.event.js.map +1 -0
  180. package/dist/events/game/game-player-enter-the-table.event.d.ts +4 -0
  181. package/dist/events/game/game-player-enter-the-table.event.d.ts.map +1 -0
  182. package/dist/events/game/game-player-enter-the-table.event.js +8 -0
  183. package/dist/events/game/game-player-enter-the-table.event.js.map +1 -0
  184. package/dist/events/game/game-player-entered-the-table.event.d.ts +4 -0
  185. package/dist/events/game/game-player-entered-the-table.event.d.ts.map +1 -0
  186. package/dist/events/game/game-player-entered-the-table.event.js +8 -0
  187. package/dist/events/game/game-player-entered-the-table.event.js.map +1 -0
  188. package/dist/events/game/game-player-exit-the-table.event.d.ts +4 -0
  189. package/dist/events/game/game-player-exit-the-table.event.d.ts.map +1 -0
  190. package/dist/events/game/game-player-exit-the-table.event.js +8 -0
  191. package/dist/events/game/game-player-exit-the-table.event.js.map +1 -0
  192. package/dist/events/game/game-player-exited-the-table.event.d.ts +4 -0
  193. package/dist/events/game/game-player-exited-the-table.event.d.ts.map +1 -0
  194. package/dist/events/game/game-player-exited-the-table.event.js +8 -0
  195. package/dist/events/game/game-player-exited-the-table.event.js.map +1 -0
  196. package/dist/events/game/game-player-kick-out-the-table.event.d.ts +4 -0
  197. package/dist/events/game/game-player-kick-out-the-table.event.d.ts.map +1 -0
  198. package/dist/events/game/game-player-kick-out-the-table.event.js +8 -0
  199. package/dist/events/game/game-player-kick-out-the-table.event.js.map +1 -0
  200. package/dist/events/game/game-player-kicked-out-the-table.event.d.ts +4 -0
  201. package/dist/events/game/game-player-kicked-out-the-table.event.d.ts.map +1 -0
  202. package/dist/events/game/game-player-kicked-out-the-table.event.js +8 -0
  203. package/dist/events/game/game-player-kicked-out-the-table.event.js.map +1 -0
  204. package/dist/events/game/game-player-move-on-the-table.event.d.ts +4 -0
  205. package/dist/events/game/game-player-move-on-the-table.event.d.ts.map +1 -0
  206. package/dist/events/game/game-player-move-on-the-table.event.js +8 -0
  207. package/dist/events/game/game-player-move-on-the-table.event.js.map +1 -0
  208. package/dist/events/game/game-player-moved-on-the-table.event.d.ts +4 -0
  209. package/dist/events/game/game-player-moved-on-the-table.event.d.ts.map +1 -0
  210. package/dist/events/game/game-player-moved-on-the-table.event.js +8 -0
  211. package/dist/events/game/game-player-moved-on-the-table.event.js.map +1 -0
  212. package/dist/events/game/game-player-turn-timer-executed.event.d.ts +4 -0
  213. package/dist/events/game/game-player-turn-timer-executed.event.d.ts.map +1 -0
  214. package/dist/events/game/game-player-turn-timer-executed.event.js +8 -0
  215. package/dist/events/game/game-player-turn-timer-executed.event.js.map +1 -0
  216. package/dist/events/game/game-player-turn-timer-set-off.event.d.ts +4 -0
  217. package/dist/events/game/game-player-turn-timer-set-off.event.d.ts.map +1 -0
  218. package/dist/events/game/game-player-turn-timer-set-off.event.js +8 -0
  219. package/dist/events/game/game-player-turn-timer-set-off.event.js.map +1 -0
  220. package/dist/events/game/game-player-turn-timer-set-on.event.d.ts +4 -0
  221. package/dist/events/game/game-player-turn-timer-set-on.event.d.ts.map +1 -0
  222. package/dist/events/game/game-player-turn-timer-set-on.event.js +8 -0
  223. package/dist/events/game/game-player-turn-timer-set-on.event.js.map +1 -0
  224. package/dist/events/game/game-player-watch-the-table.event.d.ts +4 -0
  225. package/dist/events/game/game-player-watch-the-table.event.d.ts.map +1 -0
  226. package/dist/events/game/game-player-watch-the-table.event.js +8 -0
  227. package/dist/events/game/game-player-watch-the-table.event.js.map +1 -0
  228. package/dist/events/game/game-player-watched-the-table.event.d.ts +4 -0
  229. package/dist/events/game/game-player-watched-the-table.event.d.ts.map +1 -0
  230. package/dist/events/game/game-player-watched-the-table.event.js +8 -0
  231. package/dist/events/game/game-player-watched-the-table.event.js.map +1 -0
  232. package/dist/events/game/game-room-room-created.event.d.ts +4 -0
  233. package/dist/events/game/game-room-room-created.event.d.ts.map +1 -0
  234. package/dist/events/game/game-room-room-created.event.js +8 -0
  235. package/dist/events/game/game-room-room-created.event.js.map +1 -0
  236. package/dist/events/game/game-table-finish.event.d.ts +4 -0
  237. package/dist/events/game/game-table-finish.event.d.ts.map +1 -0
  238. package/dist/events/game/game-table-finish.event.js +8 -0
  239. package/dist/events/game/game-table-finish.event.js.map +1 -0
  240. package/dist/events/game/game-table-finished.event.d.ts +4 -0
  241. package/dist/events/game/game-table-finished.event.d.ts.map +1 -0
  242. package/dist/events/game/game-table-finished.event.js +8 -0
  243. package/dist/events/game/game-table-finished.event.js.map +1 -0
  244. package/dist/events/game/game-table-master-created.event.d.ts +4 -0
  245. package/dist/events/game/game-table-master-created.event.d.ts.map +1 -0
  246. package/dist/events/game/game-table-master-created.event.js +8 -0
  247. package/dist/events/game/game-table-master-created.event.js.map +1 -0
  248. package/dist/events/game/game-table-restart-timer-executed.event.d.ts +4 -0
  249. package/dist/events/game/game-table-restart-timer-executed.event.d.ts.map +1 -0
  250. package/dist/events/game/game-table-restart-timer-executed.event.js +8 -0
  251. package/dist/events/game/game-table-restart-timer-executed.event.js.map +1 -0
  252. package/dist/events/game/game-table-restart-timer-set-on.event.d.ts +4 -0
  253. package/dist/events/game/game-table-restart-timer-set-on.event.d.ts.map +1 -0
  254. package/dist/events/game/game-table-restart-timer-set-on.event.js +8 -0
  255. package/dist/events/game/game-table-restart-timer-set-on.event.js.map +1 -0
  256. package/dist/events/game/game-table-restart.event.d.ts +4 -0
  257. package/dist/events/game/game-table-restart.event.d.ts.map +1 -0
  258. package/dist/events/game/game-table-restart.event.js +8 -0
  259. package/dist/events/game/game-table-restart.event.js.map +1 -0
  260. package/dist/events/game/game-table-restarted.event.d.ts +4 -0
  261. package/dist/events/game/game-table-restarted.event.d.ts.map +1 -0
  262. package/dist/events/game/game-table-restarted.event.js +8 -0
  263. package/dist/events/game/game-table-restarted.event.js.map +1 -0
  264. package/dist/events/game/game-table-start.event.d.ts +4 -0
  265. package/dist/events/game/game-table-start.event.d.ts.map +1 -0
  266. package/dist/events/game/game-table-start.event.js +8 -0
  267. package/dist/events/game/game-table-start.event.js.map +1 -0
  268. package/dist/events/game/game-table-started.event.d.ts +4 -0
  269. package/dist/events/game/game-table-started.event.d.ts.map +1 -0
  270. package/dist/events/game/game-table-started.event.js +8 -0
  271. package/dist/events/game/game-table-started.event.js.map +1 -0
  272. package/dist/events/game/game-table-turn-finish.event.d.ts +4 -0
  273. package/dist/events/game/game-table-turn-finish.event.d.ts.map +1 -0
  274. package/dist/events/game/game-table-turn-finish.event.js +8 -0
  275. package/dist/events/game/game-table-turn-finish.event.js.map +1 -0
  276. package/dist/events/game/game-table-turn-finished.event.d.ts +4 -0
  277. package/dist/events/game/game-table-turn-finished.event.d.ts.map +1 -0
  278. package/dist/events/game/game-table-turn-finished.event.js +8 -0
  279. package/dist/events/game/game-table-turn-finished.event.js.map +1 -0
  280. package/dist/events/game/game-table-turn-start.event.d.ts +4 -0
  281. package/dist/events/game/game-table-turn-start.event.d.ts.map +1 -0
  282. package/dist/events/game/game-table-turn-start.event.js +8 -0
  283. package/dist/events/game/game-table-turn-start.event.js.map +1 -0
  284. package/dist/events/game/game-table-turn-started.event.d.ts +4 -0
  285. package/dist/events/game/game-table-turn-started.event.d.ts.map +1 -0
  286. package/dist/events/game/game-table-turn-started.event.js +8 -0
  287. package/dist/events/game/game-table-turn-started.event.js.map +1 -0
  288. package/dist/events/game/game-table-wait.event.d.ts +4 -0
  289. package/dist/events/game/game-table-wait.event.d.ts.map +1 -0
  290. package/dist/events/game/game-table-wait.event.js +8 -0
  291. package/dist/events/game/game-table-wait.event.js.map +1 -0
  292. package/dist/events/game/game-table-waited.event.d.ts +4 -0
  293. package/dist/events/game/game-table-waited.event.d.ts.map +1 -0
  294. package/dist/events/game/game-table-waited.event.js +8 -0
  295. package/dist/events/game/game-table-waited.event.js.map +1 -0
  296. package/dist/events/index.d.ts +40 -0
  297. package/dist/events/index.d.ts.map +1 -0
  298. package/dist/events/index.js +82 -0
  299. package/dist/events/index.js.map +1 -0
  300. package/dist/events/ws/base-ws-event.d.ts +3 -0
  301. package/dist/events/ws/base-ws-event.d.ts.map +1 -0
  302. package/dist/events/ws/base-ws-event.js +7 -0
  303. package/dist/events/ws/base-ws-event.js.map +1 -0
  304. package/dist/events/ws/ws-event.d.ts +8 -0
  305. package/dist/events/ws/ws-event.d.ts.map +1 -0
  306. package/dist/events/ws/ws-event.enum.d.ts +6 -0
  307. package/dist/events/ws/ws-event.enum.d.ts.map +1 -0
  308. package/dist/events/ws/ws-event.enum.js +10 -0
  309. package/dist/events/ws/ws-event.enum.js.map +1 -0
  310. package/dist/events/ws/ws-event.js +14 -0
  311. package/dist/events/ws/ws-event.js.map +1 -0
  312. package/dist/exceptions/index.d.ts +4 -0
  313. package/dist/exceptions/index.d.ts.map +1 -0
  314. package/dist/exceptions/index.js +10 -0
  315. package/dist/exceptions/index.js.map +1 -0
  316. package/dist/exceptions/not-active-player-move.exception.d.ts +5 -0
  317. package/dist/exceptions/not-active-player-move.exception.d.ts.map +1 -0
  318. package/dist/exceptions/not-active-player-move.exception.js +13 -0
  319. package/dist/exceptions/not-active-player-move.exception.js.map +1 -0
  320. package/dist/exceptions/not-implemented.exception.d.ts +5 -0
  321. package/dist/exceptions/not-implemented.exception.d.ts.map +1 -0
  322. package/dist/exceptions/not-implemented.exception.js +13 -0
  323. package/dist/exceptions/not-implemented.exception.js.map +1 -0
  324. package/dist/exceptions/not-valid-player-move.exception.d.ts +5 -0
  325. package/dist/exceptions/not-valid-player-move.exception.d.ts.map +1 -0
  326. package/dist/exceptions/not-valid-player-move.exception.js +13 -0
  327. package/dist/exceptions/not-valid-player-move.exception.js.map +1 -0
  328. package/dist/exceptions/player-has-no-possible-move.exception.d.ts +5 -0
  329. package/dist/exceptions/player-has-no-possible-move.exception.d.ts.map +1 -0
  330. package/dist/exceptions/player-has-no-possible-move.exception.js +13 -0
  331. package/dist/exceptions/player-has-no-possible-move.exception.js.map +1 -0
  332. package/dist/index.d.ts +3 -0
  333. package/dist/index.d.ts.map +1 -1
  334. package/dist/index.js +3 -1
  335. package/dist/index.js.map +1 -1
  336. package/dist/level-helper/base-game-level-helper.d.ts +16 -0
  337. package/dist/level-helper/base-game-level-helper.d.ts.map +1 -0
  338. package/dist/level-helper/base-game-level-helper.js +60 -0
  339. package/dist/level-helper/base-game-level-helper.js.map +1 -0
  340. package/dist/level-helper/experiences-amount.enum.d.ts +6 -0
  341. package/dist/level-helper/experiences-amount.enum.d.ts.map +1 -0
  342. package/dist/level-helper/experiences-amount.enum.js +10 -0
  343. package/dist/level-helper/experiences-amount.enum.js.map +1 -0
  344. package/dist/level-helper/experiences-level-edge.enum.d.ts +5 -0
  345. package/dist/level-helper/experiences-level-edge.enum.d.ts.map +1 -0
  346. package/dist/level-helper/experiences-level-edge.enum.js +9 -0
  347. package/dist/level-helper/experiences-level-edge.enum.js.map +1 -0
  348. package/dist/level-helper/experiences-level-rank.enum.d.ts +6 -0
  349. package/dist/level-helper/experiences-level-rank.enum.d.ts.map +1 -0
  350. package/dist/level-helper/experiences-level-rank.enum.js +10 -0
  351. package/dist/level-helper/experiences-level-rank.enum.js.map +1 -0
  352. package/dist/level-helper/index.d.ts +4 -0
  353. package/dist/level-helper/index.d.ts.map +1 -0
  354. package/dist/level-helper/index.js +10 -0
  355. package/dist/level-helper/index.js.map +1 -0
  356. package/dist/strategies/index.d.ts +4 -0
  357. package/dist/strategies/index.d.ts.map +1 -0
  358. package/dist/strategies/index.js +8 -0
  359. package/dist/strategies/index.js.map +1 -0
  360. package/dist/strategies/max-players-strategy.d.ts +6 -0
  361. package/dist/strategies/max-players-strategy.d.ts.map +1 -0
  362. package/dist/strategies/max-players-strategy.js +10 -0
  363. package/dist/strategies/max-players-strategy.js.map +1 -0
  364. package/dist/strategies/min-players-strategy.d.ts +6 -0
  365. package/dist/strategies/min-players-strategy.d.ts.map +1 -0
  366. package/dist/strategies/min-players-strategy.js +10 -0
  367. package/dist/strategies/min-players-strategy.js.map +1 -0
  368. package/dist/strategies/start-strategy-interface.d.ts +5 -0
  369. package/dist/strategies/start-strategy-interface.d.ts.map +1 -0
  370. package/dist/{base/base-game-state.type.js → strategies/start-strategy-interface.js} +1 -1
  371. package/dist/strategies/start-strategy-interface.js.map +1 -0
  372. package/dist/tests/just-black-jack/domain/black-jack-dealer.d.ts +1 -1
  373. package/dist/tests/just-black-jack/domain/black-jack-dealer.d.ts.map +1 -1
  374. package/dist/tests/just-black-jack/domain/black-jack-dealer.js +10 -2
  375. package/dist/tests/just-black-jack/domain/black-jack-dealer.js.map +1 -1
  376. package/dist/tests/just-black-jack/domain/black-jack-game-master.d.ts +14 -22
  377. package/dist/tests/just-black-jack/domain/black-jack-game-master.d.ts.map +1 -1
  378. package/dist/tests/just-black-jack/domain/black-jack-game-master.js +46 -61
  379. package/dist/tests/just-black-jack/domain/black-jack-game-master.js.map +1 -1
  380. package/dist/tests/just-black-jack/domain/black-jack-game-result-helper.d.ts +8 -0
  381. package/dist/tests/just-black-jack/domain/black-jack-game-result-helper.d.ts.map +1 -0
  382. package/dist/tests/just-black-jack/domain/black-jack-game-result-helper.js +16 -0
  383. package/dist/tests/just-black-jack/domain/black-jack-game-result-helper.js.map +1 -0
  384. package/dist/tests/just-black-jack/domain/black-jack-move-data.d.ts +2 -2
  385. package/dist/tests/just-black-jack/domain/black-jack-move-data.d.ts.map +1 -1
  386. package/dist/tests/just-black-jack/domain/black-jack-move-data.js +3 -2
  387. package/dist/tests/just-black-jack/domain/black-jack-move-data.js.map +1 -1
  388. package/dist/tests/just-black-jack/domain/black-jack-player-actions.enum.d.ts +5 -0
  389. package/dist/tests/just-black-jack/domain/black-jack-player-actions.enum.d.ts.map +1 -0
  390. package/dist/tests/just-black-jack/domain/black-jack-player-actions.enum.js +9 -0
  391. package/dist/tests/just-black-jack/domain/black-jack-player-actions.enum.js.map +1 -0
  392. package/dist/tests/just-black-jack/domain/black-jack-player.d.ts +6 -4
  393. package/dist/tests/just-black-jack/domain/black-jack-player.d.ts.map +1 -1
  394. package/dist/tests/just-black-jack/domain/black-jack-player.js +10 -7
  395. package/dist/tests/just-black-jack/domain/black-jack-player.js.map +1 -1
  396. package/dist/tests/just-black-jack/domain/moves/black-jack-move-factory.d.ts +7 -0
  397. package/dist/tests/just-black-jack/domain/moves/black-jack-move-factory.d.ts.map +1 -0
  398. package/dist/tests/just-black-jack/domain/moves/black-jack-move-factory.js +25 -0
  399. package/dist/tests/just-black-jack/domain/moves/black-jack-move-factory.js.map +1 -0
  400. package/dist/tests/just-black-jack/domain/moves/list/black-jack-player-move-finish-move.d.ts +6 -0
  401. package/dist/tests/just-black-jack/domain/moves/list/black-jack-player-move-finish-move.d.ts.map +1 -0
  402. package/dist/tests/just-black-jack/domain/moves/list/black-jack-player-move-finish-move.js +14 -0
  403. package/dist/tests/just-black-jack/domain/moves/list/black-jack-player-move-finish-move.js.map +1 -0
  404. package/dist/tests/just-black-jack/domain/moves/list/black-jack-player-move-get-card.d.ts +6 -0
  405. package/dist/tests/just-black-jack/domain/moves/list/black-jack-player-move-get-card.d.ts.map +1 -0
  406. package/dist/tests/just-black-jack/domain/moves/list/black-jack-player-move-get-card.js +14 -0
  407. package/dist/tests/just-black-jack/domain/moves/list/black-jack-player-move-get-card.js.map +1 -0
  408. package/dist/tests/just-black-jack/rooms/black-jack-simple-room.d.ts.map +1 -1
  409. package/dist/tests/just-black-jack/rooms/black-jack-simple-room.js +1 -2
  410. package/dist/tests/just-black-jack/rooms/black-jack-simple-room.js.map +1 -1
  411. package/dist/tests/just-black-jack/tests/black-jack-simple-room.test.js +240 -20
  412. package/dist/tests/just-black-jack/tests/black-jack-simple-room.test.js.map +1 -1
  413. package/dist/tests/just-black-jack/tests/common.d.ts +0 -6
  414. package/dist/tests/just-black-jack/tests/common.d.ts.map +1 -1
  415. package/dist/tests/just-black-jack/tests/common.js +19 -9
  416. package/dist/tests/just-black-jack/tests/common.js.map +1 -1
  417. package/dist/utils/circle-list.d.ts +9 -13
  418. package/dist/utils/circle-list.d.ts.map +1 -1
  419. package/dist/utils/circle-list.js +11 -20
  420. package/dist/utils/circle-list.js.map +1 -1
  421. package/dist/utils/tests/circle-list.test.d.ts +5 -1
  422. package/dist/utils/tests/circle-list.test.d.ts.map +1 -1
  423. package/dist/utils/tests/circle-list.test.js +21 -13
  424. package/dist/utils/tests/circle-list.test.js.map +1 -1
  425. package/dist/utils/timer.d.ts +2 -0
  426. package/dist/utils/timer.d.ts.map +1 -0
  427. package/dist/utils/timer.js +16 -0
  428. package/dist/utils/timer.js.map +1 -0
  429. package/package.json +3 -1
  430. package/src/base/base-figure-type.enum.ts +3 -0
  431. package/src/base/base-figure.ts +23 -0
  432. package/src/base/base-move-data.ts +7 -5
  433. package/src/base/base-player-move-factory.ts +18 -0
  434. package/src/base/base-player-move.ts +37 -0
  435. package/src/base/game-control-player-turn.ts +7 -1
  436. package/src/base/game-control-restart.ts +7 -1
  437. package/src/base/game-master.ts +525 -107
  438. package/src/base/game-player-connections-helper.ts +12 -20
  439. package/src/base/game-player-exited.ts +37 -0
  440. package/src/base/game-player.ts +230 -122
  441. package/src/base/game-result-equal-helper.ts +17 -0
  442. package/src/base/game-result-helper.ts +36 -0
  443. package/src/base/game-result-rating-helper.ts +44 -0
  444. package/src/base/game-room.ts +105 -18
  445. package/src/base/game-round-history-item.enum.ts +6 -0
  446. package/src/base/game-round-history-item.ts +110 -0
  447. package/src/base/game-round.ts +56 -10
  448. package/src/base/game-state-machine.ts +10 -0
  449. package/src/base/game-table-seat.ts +57 -6
  450. package/src/base/game-table-seats.ts +14 -29
  451. package/src/base/game-table.ts +92 -59
  452. package/src/base/index.ts +16 -5
  453. package/src/base-rooms/simple-room.ts +14 -12
  454. package/src/base-rooms/tournament-state.ts +1 -1
  455. package/src/cards-game/cards/card.ts +50 -28
  456. package/src/cards-game/cards-deck/cards-deck-type.enum.ts +8 -0
  457. package/src/cards-game/cards-deck/cards-deck.ts +105 -0
  458. package/src/cards-game/cards-deck/types/deck12.ts +32 -0
  459. package/src/cards-game/cards-deck/types/deck24.ts +56 -0
  460. package/src/cards-game/{cards → cards-deck/types}/deck36.ts +1 -1
  461. package/src/cards-game/{cards → cards-deck/types}/deck52.ts +1 -1
  462. package/src/cards-game/cards-game-master.ts +64 -27
  463. package/src/cards-game/cards-pairs/card-pair-slot.ts +73 -0
  464. package/src/cards-game/cards-pairs/card-pair-slots.ts +104 -0
  465. package/src/cards-game/cards-player.ts +68 -20
  466. package/src/cards-game/index.ts +8 -2
  467. package/src/events/base/base-game.event.ts +1 -0
  468. package/src/events/base/game-player.event.ts +26 -0
  469. package/src/events/base/game-room.event.ts +16 -0
  470. package/src/events/base/game-table.event.ts +16 -0
  471. package/src/events/game/game-player-activate.event.ts +3 -0
  472. package/src/events/game/game-player-activated.event.ts +3 -0
  473. package/src/events/game/game-player-deactivate.event.ts +3 -0
  474. package/src/events/game/game-player-deactivated.event.ts +3 -0
  475. package/src/events/game/game-player-enter-the-table.event.ts +3 -0
  476. package/src/events/game/game-player-entered-the-table.event.ts +3 -0
  477. package/src/events/game/game-player-exit-the-table.event.ts +3 -0
  478. package/src/events/game/game-player-exited-the-table.event.ts +3 -0
  479. package/src/events/game/game-player-kick-out-the-table.event.ts +3 -0
  480. package/src/events/game/game-player-kicked-out-the-table.event.ts +3 -0
  481. package/src/events/game/game-player-move-on-the-table.event.ts +3 -0
  482. package/src/events/game/game-player-moved-on-the-table.event.ts +3 -0
  483. package/src/events/game/game-player-turn-timer-executed.event.ts +3 -0
  484. package/src/events/game/game-player-turn-timer-set-off.event.ts +3 -0
  485. package/src/events/game/game-player-turn-timer-set-on.event.ts +3 -0
  486. package/src/events/game/game-player-watch-the-table.event.ts +3 -0
  487. package/src/events/game/game-player-watched-the-table.event.ts +3 -0
  488. package/src/events/game/game-room-room-created.event.ts +3 -0
  489. package/src/events/game/game-table-finish.event.ts +3 -0
  490. package/src/events/game/game-table-finished.event.ts +3 -0
  491. package/src/events/game/game-table-master-created.event.ts +3 -0
  492. package/src/events/game/game-table-restart-timer-executed.event.ts +3 -0
  493. package/src/events/game/game-table-restart-timer-set-on.event.ts +3 -0
  494. package/src/events/game/game-table-restart.event.ts +3 -0
  495. package/src/events/game/game-table-restarted.event.ts +3 -0
  496. package/src/events/game/game-table-start.event.ts +3 -0
  497. package/src/events/game/game-table-started.event.ts +3 -0
  498. package/src/events/game/game-table-turn-finish.event.ts +3 -0
  499. package/src/events/game/game-table-turn-finished.event.ts +3 -0
  500. package/src/events/game/game-table-turn-start.event.ts +3 -0
  501. package/src/events/game/game-table-turn-started.event.ts +3 -0
  502. package/src/events/game/game-table-wait.event.ts +3 -0
  503. package/src/events/game/game-table-waited.event.ts +3 -0
  504. package/src/events/index.ts +40 -0
  505. package/src/events/ws/base-ws-event.ts +1 -0
  506. package/src/events/ws/ws-event.enum.ts +5 -0
  507. package/src/events/ws/ws-event.ts +14 -0
  508. package/src/exceptions/index.ts +3 -0
  509. package/src/exceptions/not-active-player-move.exception.ts +10 -0
  510. package/src/exceptions/not-implemented.exception.ts +10 -0
  511. package/src/exceptions/not-valid-player-move.exception.ts +10 -0
  512. package/src/exceptions/player-has-no-possible-move.exception.ts +10 -0
  513. package/src/index.ts +3 -1
  514. package/src/level-helper/base-game-level-helper.ts +74 -0
  515. package/src/level-helper/experiences-amount.enum.ts +5 -0
  516. package/src/level-helper/experiences-level-edge.enum.ts +4 -0
  517. package/src/level-helper/experiences-level-rank.enum.ts +5 -0
  518. package/src/level-helper/index.ts +3 -0
  519. package/src/strategies/index.ts +3 -0
  520. package/src/strategies/max-players-strategy.ts +8 -0
  521. package/src/strategies/min-players-strategy.ts +8 -0
  522. package/src/strategies/start-strategy-interface.ts +5 -0
  523. package/src/tests/just-black-jack/domain/black-jack-dealer.ts +15 -10
  524. package/src/tests/just-black-jack/domain/black-jack-game-master.ts +53 -73
  525. package/src/tests/just-black-jack/domain/black-jack-game-result-helper.ts +15 -0
  526. package/src/tests/just-black-jack/domain/black-jack-move-data.ts +4 -3
  527. package/src/tests/just-black-jack/domain/black-jack-player-actions.enum.ts +4 -0
  528. package/src/tests/just-black-jack/domain/black-jack-player.ts +19 -19
  529. package/src/tests/just-black-jack/domain/moves/black-jack-move-factory.ts +24 -0
  530. package/src/tests/just-black-jack/domain/moves/list/black-jack-player-move-finish-move.ts +12 -0
  531. package/src/tests/just-black-jack/domain/moves/list/black-jack-player-move-get-card.ts +13 -0
  532. package/src/tests/just-black-jack/rooms/black-jack-simple-room.ts +3 -4
  533. package/src/tests/just-black-jack/tests/black-jack-simple-room.test.ts +392 -75
  534. package/src/tests/just-black-jack/tests/common.ts +20 -56
  535. package/src/utils/circle-list.ts +27 -39
  536. package/src/utils/tests/circle-list.test.ts +14 -9
  537. package/src/utils/timer.ts +14 -0
  538. package/dist/base/base-game-state.type.d.ts +0 -8
  539. package/dist/base/base-game-state.type.d.ts.map +0 -1
  540. package/dist/base/base-game-state.type.js.map +0 -1
  541. package/dist/base/game-player-move.d.ts +0 -13
  542. package/dist/base/game-player-move.d.ts.map +0 -1
  543. package/dist/base/game-player-move.js +0 -28
  544. package/dist/base/game-player-move.js.map +0 -1
  545. package/dist/base/game-summary-result.d.ts +0 -3
  546. package/dist/base/game-summary-result.d.ts.map +0 -1
  547. package/dist/base/game-summary-result.js +0 -7
  548. package/dist/base/game-summary-result.js.map +0 -1
  549. package/dist/cards-game/cards/deck36.d.ts +0 -2
  550. package/dist/cards-game/cards/deck36.d.ts.map +0 -1
  551. package/dist/cards-game/cards/deck36.js.map +0 -1
  552. package/dist/cards-game/cards/deck52.d.ts +0 -2
  553. package/dist/cards-game/cards/deck52.d.ts.map +0 -1
  554. package/dist/cards-game/cards/deck52.js.map +0 -1
  555. package/src/base/base-game-state.type.ts +0 -7
  556. package/src/base/game-player-move.ts +0 -33
  557. package/src/base/game-summary-result.ts +0 -3
@@ -1,158 +1,576 @@
1
+ import { Subject } from 'rxjs';
2
+ import { IBaseMoveData, IBaseTableGameState } from 'jp.common.models';
3
+
4
+ import {
5
+ NotActivePlayerMoveException,
6
+ NotValidPlayerMoveException,
7
+ PlayerHasNoPossibleMoveException,
8
+ } from '../exceptions';
9
+ import {
10
+ GameTableTurnStartEvent,
11
+ GameTableTurnStartedEvent,
12
+ GameTableTurnFinishEvent,
13
+ GameTableTurnFinishedEvent,
14
+ GameTableWaitEvent,
15
+ GameTableWaitedEvent,
16
+ GameTableStartEvent,
17
+ GameTableStartedEvent,
18
+ GameTableFinishEvent,
19
+ GameTableFinishedEvent,
20
+ GameTableRestartEvent,
21
+ GameTableRestartedEvent,
22
+ GamePlayerActivateEvent,
23
+ GamePlayerActivatedEvent,
24
+ GamePlayerDeactivateEvent,
25
+ GamePlayerDeactivatedEvent,
26
+ GamePlayerTurnTimerSetOnEvent,
27
+ GamePlayerTurnTimerSetOffEvent,
28
+ GamePlayerTurnTimerExecutedEvent,
29
+ GameTableRestartTimerSetOnEvent,
30
+ GameTableRestartTimerExecutedEvent,
31
+ GamePlayerMoveOnTheTableEvent,
32
+ GamePlayerMovedOnTheTableEvent,
33
+ GamePlayerWatchTheTableEvent,
34
+ GamePlayerWatchedTheTableEvent,
35
+ GamePlayerEnterTheTableEvent,
36
+ GamePlayerEnteredTheTableEvent,
37
+ GamePlayerExitTheTableEvent,
38
+ GamePlayerExitedTheTableEvent,
39
+ GamePlayerKickOutTheTableEvent,
40
+ GamePlayerKickedOutTheTableEvent,
41
+ GameTableMasterCreatedEvent,
42
+ WsEvent,
43
+ WsEventEnum,
44
+ } from '../events';
45
+
1
46
  import { GamePlayer } from './game-player';
2
47
  import { GameControlPlayerTurn } from './game-control-player-turn';
3
48
  import { GameControlRestart } from './game-control-restart';
4
49
  import { GameTable } from './game-table';
5
- import { GameSummaryResult } from './game-summary-result';
6
50
  import { GameRound } from './game-round';
7
51
  import { GameRoom } from './game-room';
8
- import { BaseGameStateType } from './base-game-state.type';
9
- import { BaseMoveData } from './base-move-data';
52
+ import { GameStateMachine } from './game-state-machine';
53
+ import { GameRoundHistoryItem } from './game-round-history-item';
54
+ import { BaseGameLevelHelper } from '../level-helper';
55
+ import { BasePlayerMoveFactory } from './base-player-move-factory';
56
+ import { BasePlayerMove } from './base-player-move';
57
+ import { GameResultHelper } from './game-result-helper';
58
+ import { StandardGameState } from './standard-game-state';
10
59
 
11
60
  export abstract class GameMaster {
12
- protected readonly room: GameRoom;
13
- protected readonly table: GameTable;
14
- protected gameRound?: GameRound;
15
- public readonly controlTurn: GameControlPlayerTurn;
16
- public readonly controlRestart: GameControlRestart;
61
+ static parseTableId (roomIdWithTable: string): { roomId: string; tableId: string; } {
62
+ const pattern = /([a-zA-z0-9.]*)_([0-9]*)/;
63
+ const data = roomIdWithTable.match(pattern);
64
+
65
+ if (!data) {
66
+ const pattern2 = /([a-zA-z0-9.]*)/;
67
+ const data2 = roomIdWithTable.match(pattern2);
68
+
69
+ return {
70
+ roomId: data2?.[1] ?? '',
71
+ tableId: '1',
72
+ };
73
+ }
17
74
 
18
- protected constructor (room: GameRoom) {
19
- this.room = room;
20
- this.table = new GameTable(room.getConfigForTable());
21
- this.controlTurn = new GameControlPlayerTurn(this.table.getTurnTimeout(), this.onHandleTurnTimeout);
22
- this.controlRestart = new GameControlRestart(this.table.getRestartTimeout(), this.onHandleRestartTimeout);
75
+ return {
76
+ roomId: data?.[1] ?? '',
77
+ tableId: data?.[2] ?? '',
78
+ };
79
+ }
80
+
81
+ protected readonly room: GameRoom;
82
+ protected readonly table: GameTable;
83
+ protected gameRound?: GameRound;
84
+ private controlPlayersTurn: GameControlPlayerTurn;
85
+ private controlRestart: GameControlRestart;
86
+ private playersSubject = new Subject<Array<GamePlayer>>();
87
+ protected _levelHelper: BaseGameLevelHelper;
88
+ private _moveFactory: BasePlayerMoveFactory;
89
+ protected _turnNumber: number;
90
+
91
+ protected onGameWait (master: GameMaster): void {
92
+ this.room.onRoomEvent(new GameTableWaitEvent(this.room, this));
93
+ this.gameRound = undefined;
94
+ this.onGameWaited(master);
95
+ }
96
+
97
+ protected onGameWaited (master: GameMaster): void {
98
+ this.room.onRoomEvent(new GameTableWaitedEvent(this.room, this));
99
+ this.notifyAllObservers(WsEventEnum.STATE_UPDATE);
100
+ }
101
+
102
+ protected onGameStart (master: GameMaster): void {
103
+ this.room.onRoomEvent(new GameTableStartEvent(this.room, this));
104
+ if (this.enoughPlayersForGame()) {
105
+ this.gameRound = new GameRound(this.createGameStateMachine());
106
+ this.getGameRound()?.getState().toStart();
107
+ this._turnNumber = 0;
108
+ this.startNewRound();
109
+ this.onGameStarted(this);
23
110
  }
111
+ }
112
+
113
+ protected onGameStarted (master: GameMaster): void {
114
+ this.room.onRoomEvent(new GameTableStartedEvent(this.room, this));
115
+ this.onGameTurnStart(master);
116
+ }
117
+
118
+ protected onGameTurnStart (master: GameMaster): void {
119
+ this.room.onRoomEvent(new GameTableTurnStartEvent(this.room, this));
120
+ this._turnNumber += 1;
121
+ this.startNewTurn();
122
+ this.onGameTurnStarted(master);
123
+ }
124
+
125
+ protected onGameTurnStarted (master: GameMaster): void {
126
+ this.room.onRoomEvent(new GameTableTurnStartedEvent(this.room, this));
127
+ this.notifyAllObservers(WsEventEnum.STATE_UPDATE);
128
+ }
129
+
130
+ protected onGameTurnFinish (master: GameMaster): void {
131
+ this.room.onRoomEvent(new GameTableTurnFinishEvent(this.room, this));
132
+ this.finishTurn();
133
+ this.onGameTurnFinished(master);
134
+ }
135
+
136
+ protected onGameTurnFinished (master: GameMaster): void {
137
+ this.room.onRoomEvent(new GameTableTurnFinishedEvent(this.room, this));
138
+
139
+ if (this.isGameOver()) {
140
+ this.onGameFinish(this);
141
+ } else {
142
+ this.onGameTurnStart(master);
143
+ }
144
+ }
24
145
 
25
- static parseTableId (roomIdWithTable: string): {
26
- roomId: string;
27
- tableId: string;
28
- } {
29
- const pattern = /([a-zA-z0-9.]*)_([0-9]*)/;
30
- const data = roomIdWithTable.match(pattern);
146
+ protected onGameFinish (master: GameMaster): void {
147
+ this.room.onRoomEvent(new GameTableFinishEvent(this.room, this));
148
+ this.getGameRound()?.getState().toFinish();
31
149
 
32
- if (!data) {
33
- const pattern2 = /([a-zA-z0-9.]*)/;
34
- const data2 = roomIdWithTable.match(pattern2);
150
+ const activePlayer = this.getActivePlayer();
151
+ if (activePlayer) {
152
+ this.onGamePlayerDeactivate(this, activePlayer);
153
+ }
35
154
 
36
- return {
37
- roomId: data2?.[1] ?? '',
38
- tableId: '1',
39
- };
40
- }
155
+ this.finishRound();
156
+ this.onGameFinished(this);
157
+ }
41
158
 
42
- return {
43
- roomId: data?.[1] ?? '',
44
- tableId: data?.[2] ?? '',
45
- };
159
+ protected onGameFinished (master: GameMaster): void {
160
+ this.room.onRoomEvent(new GameTableFinishedEvent(this.room, this));
161
+ this.room.onRoomTableGameFinished(master);
162
+ this.onGameRestart(master);
163
+ }
164
+
165
+ protected onGameRestart (master: GameMaster): void {
166
+ this.room.onRoomEvent(new GameTableRestartEvent(this.room, this));
167
+ if (this.controlRestart.isEnableTimer()) {
168
+ this.onGameRestartTimerSetOn(master);
169
+ }
170
+ }
171
+
172
+ protected onGameRestarted (master: GameMaster): void {
173
+ this.room.onRoomEvent(new GameTableRestartedEvent(this.room, this));
174
+ if (this.enoughPlayersForGame()) {
175
+ this.flushAllPlayers();
176
+ this.table.moveUsersFromQueueToSeats();
177
+ this.onGameStart(master);
178
+ } else {
179
+ this.onGameWait(master);
46
180
  }
181
+ }
47
182
 
48
- abstract onHandleTurnTimeout (player: GamePlayer);
183
+ protected onGamePlayerActivate (master: GameMaster, player: GamePlayer) {
184
+ this.room.onRoomEvent(new GamePlayerActivateEvent(this.room, this, player));
185
+ if (this.controlPlayersTurn.isEnableTimer()) {
186
+ this.onGamePlayerTurnTimerSetOn(master, player);
187
+ }
188
+ }
49
189
 
50
- abstract onHandleRestartTimeout ();
190
+ protected onGamePlayerActivated (master: GameMaster, player: GamePlayer) {
191
+ this.room.onRoomEvent(new GamePlayerActivatedEvent(this.room, this, player));
192
+ }
51
193
 
52
- abstract onHandleMove<T>(player: GamePlayer, moveData: BaseMoveData): T;
194
+ protected onGamePlayerDeactivate (master: GameMaster, player: GamePlayer) {
195
+ this.room.onRoomEvent(new GamePlayerDeactivateEvent(this.room, this, player));
196
+ if (this.controlPlayersTurn.isEnableTimer()) {
197
+ this.onGamePlayerTurnTimerSetOff(master, player);
198
+ }
199
+ this.onGamePlayerDeactivated(master, player);
200
+ }
201
+
202
+ protected onGamePlayerDeactivated (master: GameMaster, player: GamePlayer) {
203
+ this.room.onRoomEvent(new GamePlayerDeactivatedEvent(this.room, this, player));
204
+ }
205
+
206
+ protected onGamePlayerTurnTimerSetOn (master: GameMaster, player: GamePlayer): void {
207
+ this.room.onRoomEvent(new GamePlayerTurnTimerSetOnEvent(this.room, this, player));
208
+ this.controlPlayersTurn.setPlayerTurnTimeout(player);
209
+ }
210
+
211
+ protected onGamePlayerTurnTimerExecuted (master: GameMaster, player: GamePlayer): void {
212
+ this.room.onRoomEvent(new GamePlayerTurnTimerExecutedEvent(this.room, this, player));
213
+ this.onPlayerKickOutFromTheTable(master, player);
214
+ }
215
+
216
+ protected onGamePlayerTurnTimerSetOff (master: GameMaster, player: GamePlayer): void {
217
+ this.room.onRoomEvent(new GamePlayerTurnTimerSetOffEvent(this.room, this, player));
218
+ this.controlPlayersTurn.clearPlayerTurnTimeout(player);
219
+ }
220
+
221
+ protected onGameRestartTimerSetOn (master: GameMaster): void {
222
+ this.room.onRoomEvent(new GameTableRestartTimerSetOnEvent(this.room, this));
223
+ this.controlRestart.setRestartTimeout();
224
+ }
225
+
226
+ protected onGameRestartTimerExecuted (master: GameMaster): void {
227
+ this.room.onRoomEvent(new GameTableRestartTimerExecutedEvent(this.room, this));
228
+ this.onGameRestarted(this);
229
+ }
230
+
231
+ protected onPlayerMoveOnTheTable (master: GameMaster, player: GamePlayer, move: BasePlayerMove): void {
232
+ this.room.onRoomEvent(new GamePlayerMoveOnTheTableEvent(this.room, this, player, move.getMoveData()));
233
+
234
+ if (!this.isActivePlayer(player.id)) {
235
+ throw new NotActivePlayerMoveException();
236
+ }
53
237
 
54
- abstract kickPlayer (player: GamePlayer);
238
+ if (!move.isValid()) {
239
+ throw new NotValidPlayerMoveException();
240
+ }
55
241
 
56
- abstract startNewRound ();
242
+ if (!master.hasPossibleMove(player, move.action)) {
243
+ throw new PlayerHasNoPossibleMoveException();
244
+ }
57
245
 
58
- abstract finishRound ();
246
+ player.lastMove = move.getMoveData();
59
247
 
60
- abstract changePlayer ();
248
+ this.gameRound?.addToHistory(GameRoundHistoryItem.createPlayerMove(
249
+ player.id,
250
+ player.fullName,
251
+ this.getStateId(),
252
+ this._turnNumber,
253
+ move.getMoveData(),
254
+ ));
61
255
 
62
- abstract getResults (): GameSummaryResult | null;
256
+ move.commit();
63
257
 
64
- getId () {
65
- return this.table.getId();
66
- }
258
+ this.processMove(player, move);
67
259
 
68
- setGameRound (gameRound: GameRound): void {
69
- this.gameRound = gameRound;
70
- }
260
+ this.onPlayerMovedOnTheTable(master, player, move);
261
+ }
71
262
 
72
- getGameRound (): GameRound | null {
73
- return this.gameRound;
74
- }
263
+ protected onPlayerMovedOnTheTable (master: GameMaster, player: GamePlayer, move: BasePlayerMove): void {
264
+ this.room.onRoomEvent(new GamePlayerMovedOnTheTableEvent(this.room, this, player, move.getMoveData()));
75
265
 
76
- getTable () {
77
- return this.table;
266
+ if (this.isActivePlayer(player.id)) {
267
+ if (this.controlPlayersTurn.isEnableTimer()) {
268
+ this.onGamePlayerTurnTimerSetOff(master, player);
269
+ }
78
270
  }
79
271
 
80
- enterTheTable<T> (player: GamePlayer): T {
81
- if (this.table.isFull()) {
82
- this.table.addPlayerToQueue(player);
83
- } else {
84
- this.table.addPlayerToSeat(player);
85
- }
272
+ const nextPlayer = this.getNextGamePlayer();
86
273
 
87
- return this.getGameState() as T;
274
+ if (this.isTurnOver()) {
275
+ this.onGameTurnFinish(master);
276
+ } else if (nextPlayer) {
277
+ this.setActivePlayer(nextPlayer);
88
278
  }
89
279
 
90
- exitTheTable<T> (player: GamePlayer): T {
91
- if (player.isPlayer()) {
92
- this.table.removePlayerFromSeat(player);
93
- } else if (player.isTableQueuer()) {
94
- this.table.removePlayerFromQueue(player);
95
- } else {
96
- this.table.removePlayerFromWatchers(player);
97
- }
280
+ this.notifyObserversWithoutPlayer(player, WsEventEnum.PLAYER_MOVED, move.action);
281
+ }
98
282
 
99
- return this.getGameState() as T;
100
- }
283
+ protected onPlayerWatchTheTable (master: GameMaster, player: GamePlayer): void {
284
+ this.room.onRoomEvent(new GamePlayerWatchTheTableEvent(this.room, this, player));
285
+ }
101
286
 
102
- watchTheTable<T> (player: GamePlayer): T {
103
- this.table.addPlayerToWatchers(player);
287
+ protected onPlayerWatchedTheTable (master: GameMaster, player: GamePlayer): void {
288
+ this.room.onRoomEvent(new GamePlayerWatchedTheTableEvent(this.room, this, player));
289
+ }
104
290
 
105
- return this.getGameState() as T;
106
- }
291
+ protected onPlayerEnterTheTable (master: GameMaster, player: GamePlayer): void {
292
+ this.room.onRoomEvent(new GamePlayerEnterTheTableEvent(this.room, this, player));
293
+ }
107
294
 
108
- startFromWhite () {
109
- const firstPlayer = this.table.getPlayers().find((item) => item.isWhite());
110
- if (firstPlayer) {
111
- this.gameRound?.setActivePlayer(firstPlayer);
112
- }
113
- }
295
+ protected onPlayerEnteredTheTable (master: GameMaster, player: GamePlayer): void {
296
+ this.room.onRoomEvent(new GamePlayerEnteredTheTableEvent(this.room, this, player));
297
+ this.playersSubject.next(this.getTable().getPlayers());
298
+ }
114
299
 
115
- changePlayerClockwise () {
116
- const activePlayer = this.getGameRound()?.getActivePlayer();
117
- const nextPlayer = this.table.getSeats().getNextPlayer(activePlayer?.getSeatNumber() ?? 0);
300
+ protected onPlayerExitTheTable (master: GameMaster, player: GamePlayer): void {
301
+ this.room.onRoomEvent(new GamePlayerExitTheTableEvent(this.room, this, player));
118
302
 
119
- if (nextPlayer) {
120
- this.gameRound?.setActivePlayer(nextPlayer);
121
- }
303
+ if (this.isActivePlayer(player.id)) {
304
+ this.onGamePlayerDeactivated(this, player);
305
+ this.setActivePlayer(this.getNextGamePlayer());
306
+ }
307
+ }
308
+
309
+ protected onPlayerExitedTheTable (master: GameMaster, player: GamePlayer): void {
310
+ this.room.onRoomEvent(new GamePlayerExitedTheTableEvent(this.room, this, player));
311
+ this.table.addPlayerToExited(player);
312
+ this.playersSubject.next(this.getTable().getPlayers());
313
+ this.notifyAllObservers(WsEventEnum.STATE_UPDATE);
314
+ }
315
+
316
+ protected onPlayerKickOutFromTheTable (master: GameMaster, player: GamePlayer): void {
317
+ this.room.onRoomEvent(new GamePlayerKickOutTheTableEvent(this.room, this, player));
318
+ if (this.isActivePlayer(player.id)) {
319
+ this.setActivePlayer(this.getNextGamePlayer());
122
320
  }
321
+ this.table.removePlayerFromSeat(player);
322
+ this.onPlayerKickedOutFromTheTable(master, player);
323
+ this.notifyObserver(player, WsEventEnum.PLAYER_KICKED_OUT);
324
+ this.notifyAllObservers(WsEventEnum.STATE_UPDATE);
325
+ }
326
+
327
+ protected onPlayerKickedOutFromTheTable (master: GameMaster, player: GamePlayer): void {
328
+ this.room.onRoomEvent(new GamePlayerKickedOutTheTableEvent(this.room, this, player));
329
+ this.playersSubject.next(this.getTable().getPlayers());
330
+ }
331
+
332
+ protected constructor (room: GameRoom) {
333
+ this.room = room;
334
+ this.table = new GameTable(room.getConfigForTable());
335
+ this.controlPlayersTurn = new GameControlPlayerTurn(
336
+ this.table.getTurnTimeout(),
337
+ (player: GamePlayer) => this.onGamePlayerTurnTimerExecuted(this, player),
338
+ );
339
+ this.controlRestart = new GameControlRestart(
340
+ this.table.getRestartTimeout(),
341
+ () => this.onGameRestartTimerExecuted(this),
342
+ );
343
+ this.playersSubject.subscribe(this.observePlayers);
344
+ this.onGameWait(this);
345
+ this.room.onRoomEvent(new GameTableMasterCreatedEvent(this.room, this));
346
+ this._levelHelper = new BaseGameLevelHelper(this);
347
+ this._moveFactory = this.createMoveFactory();
348
+ this._turnNumber = 0;
349
+ }
350
+
351
+ private observePlayers = (players: Array<GamePlayer>) => {
352
+ if (this.isWaiting() && this.enoughPlayersForGame()) {
353
+ this.onGameStart(this);
354
+ } else if (this.isInProgress() && !this.enoughPlayersForGame()) {
355
+ this.onGameFinish(this);
356
+ }
357
+ };
123
358
 
124
- changePlayerCounterClockwise () {
125
- const activePlayer = this.getGameRound()?.getActivePlayer();
126
- const prevPlayer = this.table.getSeats().getPrevPlayer(activePlayer?.getSeatNumber() ?? 0);
359
+ abstract startNewRound ();
127
360
 
128
- if (prevPlayer) {
129
- this.gameRound?.setActivePlayer(prevPlayer);
130
- }
131
- }
361
+ abstract finishRound ();
132
362
 
133
- getActivePlayer (): GamePlayer | null {
134
- return this.getGameRound()?.getActivePlayer() ?? null;
135
- }
363
+ abstract startNewTurn ();
364
+
365
+ abstract finishTurn ();
366
+
367
+ abstract createGameStateDto (player: GamePlayer): IBaseTableGameState;
368
+
369
+ abstract createMoveFactory (): BasePlayerMoveFactory;
370
+
371
+ abstract isGameOver (): boolean;
372
+
373
+ abstract isTurnOver (): boolean;
374
+
375
+ abstract getNextGamePlayer (): GamePlayer | null;
136
376
 
137
- getNextPlayer () {
138
- return this.table.getSeats().getNextPlayer(this.getActivePlayer()?.getSeatNumber() ?? 0);
377
+ abstract getPossibleMoves (player: GamePlayer): Array<string>;
378
+
379
+ abstract getGameResultHelper (): GameResultHelper;
380
+
381
+ createGameStateMachine (): GameStateMachine {
382
+ return new StandardGameState();
383
+ }
384
+
385
+ hasPossibleMove (player: GamePlayer, action: string) {
386
+ return this.getPossibleMoves(player).includes(action);
387
+ }
388
+
389
+ processMove (player: GamePlayer, move: BasePlayerMove): void {
390
+ }
391
+
392
+ watchTheTable (player: GamePlayer): void {
393
+ this.onPlayerWatchTheTable(this, player);
394
+
395
+ if (player.isNew()) {
396
+ this.table.addPlayerToWatchers(player);
139
397
  }
140
398
 
141
- getNextAfterNextPlayer () {
142
- return this.table.getSeats().getNextPlayer(this.getNextPlayer()?.getSeatNumber() ?? 0);
399
+ this.onPlayerWatchedTheTable(this, player);
400
+ }
401
+
402
+ enterTheTable (player: GamePlayer): void {
403
+ this.onPlayerEnterTheTable(this, player);
404
+
405
+ this.table.removePlayerFromWatchers(player);
406
+
407
+ if (this.table.isFull() || this.isInProgress()) {
408
+ this.table.addPlayerToQueue(player);
409
+ } else if (!player.isPlayer()) {
410
+ this.table.addPlayerToSeat(player);
143
411
  }
144
412
 
145
- getNextPlayerBySeat (seat: number) {
146
- return this.table.getSeats().getNextPlayer(seat);
413
+ this.onPlayerEnteredTheTable(this, player);
414
+ }
415
+
416
+ exitTheTable (player: GamePlayer): void {
417
+ this.onPlayerExitTheTable(this, player);
418
+
419
+ if (player.isPlayer()) {
420
+ this.table.removePlayerFromSeat(player);
421
+ } else if (player.isTableQueuer()) {
422
+ this.table.removePlayerFromQueue(player);
423
+ } else {
424
+ this.table.removePlayerFromWatchers(player);
147
425
  }
148
426
 
149
- getGameState (): BaseGameStateType {
150
- return {
151
- roomId: this.room.getId(),
152
- tableId: this.table.getId(),
153
- gameId: this.gameRound?.getId(),
154
- pot: this.gameRound?.getPot() ?? 0,
155
- players: this.getTable().getPlayers().map((item) => item.getFullName()),
156
- };
427
+ this.onPlayerExitedTheTable(this, player);
428
+ }
429
+
430
+ moveOnTheTable (player: GamePlayer, moveData: IBaseMoveData): void {
431
+ this.onPlayerMoveOnTheTable(this, player, this._moveFactory.createMove(player, moveData));
432
+ }
433
+
434
+ getId () {
435
+ return this.table.getId();
436
+ }
437
+
438
+ getRoom () {
439
+ return this.room;
440
+ }
441
+
442
+ getGameRound (): GameRound | undefined {
443
+ return this.gameRound;
444
+ }
445
+
446
+ getTable () {
447
+ return this.table;
448
+ }
449
+
450
+ getTicketPrice () {
451
+ return this.room.getTicketPrice();
452
+ }
453
+
454
+ getRestartTimerRemain (): number | undefined {
455
+ return this.controlRestart.getTimerRemain();
456
+ }
457
+
458
+ getPlayerTurnTimerRemain (): number | undefined {
459
+ return this.controlPlayersTurn.getTimerRemain();
460
+ }
461
+
462
+ isTechBreak () {
463
+ return this.room.isTechBreak();
464
+ }
465
+
466
+ getWhitePlayer (): GamePlayer | null {
467
+ return this.table.getPlayers().find((item) => item.isWhite()) ?? null;
468
+ }
469
+
470
+ getBlackPlayer (): GamePlayer | null {
471
+ return this.table.getPlayers().find((item) => item.isBlack()) ?? null;
472
+ }
473
+
474
+ getNextPlayerClockwise (): GamePlayer | null {
475
+ return this.getActivePlayer()?.getSeat()?.getNextPlayer() ?? null;
476
+ }
477
+
478
+ getNextPlayerCounterClockwise (): GamePlayer | null {
479
+ return this.getActivePlayer()?.getSeat()?.getPrevPlayer() ?? null;
480
+ }
481
+
482
+ getActivePlayer<T extends GamePlayer> (): T | undefined {
483
+ return this.getGameRound()?.getActivePlayer() as T | undefined;
484
+ }
485
+
486
+ setActivePlayer (player: GamePlayer | null) {
487
+ if (player) {
488
+ this.onGamePlayerActivate(this, player);
489
+ this.gameRound?.setActivePlayer(player);
490
+ this.onGamePlayerActivated(this, player);
157
491
  }
492
+ }
493
+
494
+ clearActivePlayer (player: GamePlayer) {
495
+ this.onGamePlayerDeactivate(this, player);
496
+ this.gameRound?.clearActivePlayer();
497
+ this.onGamePlayerDeactivated(this, player);
498
+ }
499
+
500
+ isActivePlayer (playerId: string): boolean {
501
+ return this.getActivePlayer()?.id === playerId;
502
+ }
503
+
504
+ setStackForAllPlayers () {
505
+ this.table.getPlayers().forEach((player) => {
506
+ player.stack = this.getTicketPrice();
507
+ });
508
+ }
509
+
510
+ takeRequiredBids () {
511
+ this.table.getPlayers().forEach((player) => {
512
+ player.increaseBet(this.room.getBet());
513
+ this.getGameRound()?.addToPot(this.room.getBet());
514
+ });
515
+ }
516
+
517
+ flushAllPlayers () {
518
+ this.table.getPlayers().forEach((player) => player.flush());
519
+ }
520
+
521
+ getMaxBet () {
522
+ const bids = this.table.getPlayers().map((player) => player.bet);
523
+ const roomBet = this.table.getBet();
524
+
525
+ return Math.max(...bids, roomBet);
526
+ }
527
+
528
+ getState () {
529
+ return this.gameRound?.getState();
530
+ }
531
+
532
+ getStateId () {
533
+ return this.getState()?.getCurrentState() ?? '';
534
+ }
535
+
536
+ isWaiting () {
537
+ return this.getState()?.isWaiting() ?? true;
538
+ }
539
+
540
+ isInProgress () {
541
+ return this.getState()?.isInProgress();
542
+ }
543
+
544
+ isFinish () {
545
+ return this.getState()?.isFinish();
546
+ }
547
+
548
+ enoughPlayersForGame () {
549
+ return this.room.startStrategy.shouldStart(this.getTable());
550
+ }
551
+
552
+ notifyAllObservers (eventType: WsEventEnum, action?: string) {
553
+ this.table.getAllObservers()
554
+ .forEach((player) =>
555
+ player.sendMessage(new WsEvent(eventType, this.createGameStateDto(player), action)));
556
+ }
557
+
558
+ notifyObserversWithoutPlayer (player: GamePlayer, eventType: WsEventEnum, action?: string) {
559
+ this.table.getAllObservers()
560
+ .filter((item) => item.id !== player.id)
561
+ .forEach((player) =>
562
+ player.sendMessage(new WsEvent(eventType, this.createGameStateDto(player), action)));
563
+ }
564
+
565
+ notifyObserver (player: GamePlayer, eventType: WsEventEnum) {
566
+ player.sendMessage(new WsEvent(eventType, this.createGameStateDto(player)));
567
+ }
568
+
569
+ get levelHelper (): BaseGameLevelHelper {
570
+ return this._levelHelper;
571
+ }
572
+
573
+ isFirstTurn () {
574
+ return this._turnNumber === 1;
575
+ }
158
576
  }