jp.ms.common.modules 1.0.41 → 1.0.43

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 (234) hide show
  1. package/dist/dto/app-table/card.dto.d.ts +1 -0
  2. package/dist/dto/app-table/card.dto.js +11 -0
  3. package/dist/dto/app-table/card.dto.js.map +1 -1
  4. package/dist/dto/app-table/player.dto.d.ts +1 -0
  5. package/dist/dto/app-table/player.dto.js +11 -0
  6. package/dist/dto/app-table/player.dto.js.map +1 -1
  7. package/dist/dto/games/fool/fool-table.dto.d.ts +1 -0
  8. package/dist/dto/games/fool/fool-table.dto.js +10 -0
  9. package/dist/dto/games/fool/fool-table.dto.js.map +1 -1
  10. package/dist/modules/anti-freeze-system/anti-freeze-system.module.d.ts +3 -1
  11. package/dist/modules/anti-freeze-system/anti-freeze-system.module.js +8 -4
  12. package/dist/modules/anti-freeze-system/anti-freeze-system.module.js.map +1 -1
  13. package/dist/modules/anti-freeze-system/anti-freeze-system.service.d.ts +6 -2
  14. package/dist/modules/anti-freeze-system/anti-freeze-system.service.js +37 -10
  15. package/dist/modules/anti-freeze-system/anti-freeze-system.service.js.map +1 -1
  16. package/dist/modules/base-achievements/base-achievements.module.js +2 -2
  17. package/dist/modules/base-achievements/base-achievements.module.js.map +1 -1
  18. package/dist/modules/confirmation-message-manager/confirmation-message-manager.constants.d.ts +1 -0
  19. package/dist/modules/confirmation-message-manager/confirmation-message-manager.constants.js +5 -0
  20. package/dist/modules/confirmation-message-manager/confirmation-message-manager.constants.js.map +1 -0
  21. package/dist/modules/confirmation-message-manager/confirmation-message-manager.interfaces.d.ts +13 -0
  22. package/dist/modules/confirmation-message-manager/confirmation-message-manager.interfaces.js +3 -0
  23. package/dist/modules/confirmation-message-manager/confirmation-message-manager.interfaces.js.map +1 -0
  24. package/dist/modules/confirmation-message-manager/confirmation-message-manager.module.d.ts +15 -0
  25. package/dist/modules/confirmation-message-manager/confirmation-message-manager.module.js +77 -0
  26. package/dist/modules/confirmation-message-manager/confirmation-message-manager.module.js.map +1 -0
  27. package/dist/modules/confirmation-message-manager/confirmation-message-manager.service.d.ts +19 -0
  28. package/dist/modules/confirmation-message-manager/confirmation-message-manager.service.js +83 -0
  29. package/dist/modules/confirmation-message-manager/confirmation-message-manager.service.js.map +1 -0
  30. package/dist/modules/event-bus/events-bus.module.js +3 -0
  31. package/dist/modules/event-bus/events-bus.module.js.map +1 -1
  32. package/dist/modules/event-bus/events-bus.player-ws-message.subscribe.service.d.ts +10 -0
  33. package/dist/modules/event-bus/events-bus.player-ws-message.subscribe.service.js +26 -0
  34. package/dist/modules/event-bus/events-bus.player-ws-message.subscribe.service.js.map +1 -0
  35. package/dist/modules/event-bus/index.d.ts +1 -0
  36. package/dist/modules/event-bus/index.js +3 -1
  37. package/dist/modules/event-bus/index.js.map +1 -1
  38. package/dist/modules/events/events.gateway.d.ts +6 -1
  39. package/dist/modules/events/events.gateway.js +19 -5
  40. package/dist/modules/events/events.gateway.js.map +1 -1
  41. package/dist/modules/index.d.ts +1 -0
  42. package/dist/modules/index.js +3 -1
  43. package/dist/modules/index.js.map +1 -1
  44. package/dist/modules/main/main.controller.d.ts +0 -1
  45. package/dist/modules/main/main.controller.js +0 -12
  46. package/dist/modules/main/main.controller.js.map +1 -1
  47. package/dist/modules/main/main.module.js +1 -1
  48. package/dist/modules/main/main.module.js.map +1 -1
  49. package/dist/modules/main/main.service.d.ts +0 -1
  50. package/dist/modules/main/main.service.js +0 -13
  51. package/dist/modules/main/main.service.js.map +1 -1
  52. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.d.ts +1 -0
  53. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +12 -0
  54. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
  55. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +7 -2
  56. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
  57. package/dist/modules/many-tables-tournament/many-tables-tournament.service.d.ts +4 -1
  58. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +18 -2
  59. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
  60. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js +2 -0
  61. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js.map +1 -1
  62. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.d.ts +3 -2
  63. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js +9 -6
  64. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js.map +1 -1
  65. package/dist/modules/menu/menu-screen.view.d.ts +2 -1
  66. package/dist/modules/menu/menu-screen.view.js +9 -3
  67. package/dist/modules/menu/menu-screen.view.js.map +1 -1
  68. package/dist/modules/menu/menu.interfaces.d.ts +1 -0
  69. package/dist/modules/menu/menu.service.js +1 -1
  70. package/dist/modules/menu/menu.service.js.map +1 -1
  71. package/dist/modules/one-table-tournament/one-table-tournament.module.js +1 -1
  72. package/dist/modules/one-table-tournament/one-table-tournament.module.js.map +1 -1
  73. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js +2 -0
  74. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js.map +1 -1
  75. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.d.ts +3 -2
  76. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js +9 -6
  77. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js.map +1 -1
  78. package/dist/modules/simple-rooms-manager/simple-rooms-manager.module.js +2 -0
  79. package/dist/modules/simple-rooms-manager/simple-rooms-manager.module.js.map +1 -1
  80. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.d.ts +3 -2
  81. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +8 -5
  82. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
  83. package/dist/tsconfig.tsbuildinfo +1 -1
  84. package/dist/utils/game-table-result.d.ts +4 -3
  85. package/dist/utils/game-table-result.js +54 -4
  86. package/dist/utils/game-table-result.js.map +1 -1
  87. package/package.json +57 -57
  88. package/src/dto/app-screen/app-screen-app-bar.dto.ts +36 -36
  89. package/src/dto/app-screen/app-screen-dialog.dto.ts +64 -64
  90. package/src/dto/app-screen/app-screen-field-list-item.dto.ts +42 -42
  91. package/src/dto/app-screen/app-screen-field.dto.ts +59 -59
  92. package/src/dto/app-screen/app-screen-section-button.dto.ts +60 -60
  93. package/src/dto/app-screen/app-screen-section-buttons.dto.ts +14 -14
  94. package/src/dto/app-screen/app-screen-section-image.dto.ts +33 -33
  95. package/src/dto/app-screen/app-screen-section-list-item.dto.ts +105 -105
  96. package/src/dto/app-screen/app-screen-section-req.dto.ts +33 -33
  97. package/src/dto/app-screen/app-screen-section.dto.ts +76 -76
  98. package/src/dto/app-screen/app-screen.dto.ts +50 -50
  99. package/src/dto/app-screen/base-app-screen.dto.ts +16 -16
  100. package/src/dto/app-screen/index.ts +10 -10
  101. package/src/dto/app-table/bids-panel-item.dto.ts +33 -33
  102. package/src/dto/app-table/bids-panel.dto.ts +32 -32
  103. package/src/dto/app-table/card.dto.ts +63 -54
  104. package/src/dto/app-table/cards-deck.dto.ts +22 -22
  105. package/src/dto/app-table/cards-pair-slots-item.dto.ts +45 -45
  106. package/src/dto/app-table/cards-pair-slots.dto.ts +13 -13
  107. package/src/dto/app-table/cards-panel.dto.ts +48 -48
  108. package/src/dto/app-table/cards-player.dto.ts +14 -14
  109. package/src/dto/app-table/cards-slots-item.dto.ts +40 -40
  110. package/src/dto/app-table/cards-slots.dto.ts +13 -13
  111. package/src/dto/app-table/index.ts +15 -15
  112. package/src/dto/app-table/moves-panel-button.dto.ts +24 -24
  113. package/src/dto/app-table/moves-panel.dto.ts +23 -23
  114. package/src/dto/app-table/player.dto.ts +78 -69
  115. package/src/dto/app-table/summary-item.dto.ts +51 -51
  116. package/src/dto/app-table/summary.dto.ts +13 -13
  117. package/src/dto/common/find-free-table.dto.ts +3 -3
  118. package/src/dto/common/index.ts +2 -2
  119. package/src/dto/common/join-tournament.dto.ts +33 -33
  120. package/src/dto/common/log.dto.ts +9 -9
  121. package/src/dto/common/many-tables-tournament-create.dto.ts +125 -125
  122. package/src/dto/common/many-tables-tournament-update.dto.ts +3 -3
  123. package/src/dto/common/player-check-state.dto.ts +33 -33
  124. package/src/dto/common/player-connected.dto.ts +58 -58
  125. package/src/dto/games/fool/fool-player.dto.ts +3 -3
  126. package/src/dto/games/fool/fool-table.dto.ts +89 -81
  127. package/src/dto/games/index.ts +2 -2
  128. package/src/dto/games/poker/poker-player.dto.ts +3 -3
  129. package/src/dto/games/poker/poker-table.dto.ts +81 -81
  130. package/src/dto/index.ts +4 -4
  131. package/src/exception/error-code.enum.ts +4 -4
  132. package/src/exception/global-exception-filter.ts +53 -53
  133. package/src/exception/http-exception-wth-snackbar.ts +27 -27
  134. package/src/exception/index.ts +4 -4
  135. package/src/exception/not-enough-money-for-purchase.exception.ts +14 -14
  136. package/src/exception/not-found-free-room-for-fast-game.exception.ts +14 -14
  137. package/src/index.ts +4 -4
  138. package/src/modules/anti-freeze-system/anti-freeze-system.constants.ts +1 -1
  139. package/src/modules/anti-freeze-system/anti-freeze-system.interfaces.ts +20 -20
  140. package/src/modules/anti-freeze-system/anti-freeze-system.module.ts +59 -55
  141. package/src/modules/anti-freeze-system/anti-freeze-system.service.ts +136 -105
  142. package/src/modules/anti-freeze-system/index.ts +1 -1
  143. package/src/modules/base-achievements/base-achievements.module.ts +324 -322
  144. package/src/modules/base-achievements/index.ts +1 -1
  145. package/src/modules/confirmation-message-manager/confirmation-message-manager.constants.ts +3 -0
  146. package/src/modules/confirmation-message-manager/confirmation-message-manager.interfaces.ts +20 -0
  147. package/src/modules/confirmation-message-manager/confirmation-message-manager.module.ts +77 -0
  148. package/src/modules/confirmation-message-manager/confirmation-message-manager.service.ts +91 -0
  149. package/src/modules/event-bus/events-bus.app.subscribe.service.ts +20 -20
  150. package/src/modules/event-bus/events-bus.main-tables.subscribe.service.ts +34 -34
  151. package/src/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.ts +6 -6
  152. package/src/modules/event-bus/events-bus.module.ts +26 -23
  153. package/src/modules/event-bus/events-bus.one-table-tournament.subscribe.service.ts +6 -6
  154. package/src/modules/event-bus/events-bus.player-ws-message.subscribe.service.ts +30 -0
  155. package/src/modules/event-bus/events-bus.tournament.subscribe.service.ts +18 -18
  156. package/src/modules/event-bus/index.ts +6 -5
  157. package/src/modules/events/events.constants.ts +1 -1
  158. package/src/modules/events/events.gateway.ts +84 -70
  159. package/src/modules/events/events.interfaces.ts +17 -17
  160. package/src/modules/events/events.module.ts +32 -32
  161. package/src/modules/events/index.ts +1 -1
  162. package/src/modules/index.ts +28 -27
  163. package/src/modules/logger/index.ts +2 -2
  164. package/src/modules/logger/jp-logger.module.ts +10 -10
  165. package/src/modules/logger/jp-logger.service.ts +38 -38
  166. package/src/modules/main/index.ts +1 -1
  167. package/src/modules/main/main-tables-list-screen.view.ts +275 -275
  168. package/src/modules/main/main.constants.ts +1 -1
  169. package/src/modules/main/main.controller.ts +51 -72
  170. package/src/modules/main/main.interfaces.ts +17 -17
  171. package/src/modules/main/main.module.ts +73 -73
  172. package/src/modules/main/main.service.ts +154 -183
  173. package/src/modules/many-tables-tournament/index.ts +1 -1
  174. package/src/modules/many-tables-tournament/many-tables-tournament-status-screen.view.ts +143 -143
  175. package/src/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.ts +63 -63
  176. package/src/modules/many-tables-tournament/many-tables-tournament.constants.ts +3 -3
  177. package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +164 -151
  178. package/src/modules/many-tables-tournament/many-tables-tournament.interfaces.ts +20 -20
  179. package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +89 -80
  180. package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +241 -208
  181. package/src/modules/many-tables-tournament-rooms-manager/index.ts +2 -2
  182. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.constants.ts +3 -3
  183. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.ts +37 -37
  184. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.ts +89 -84
  185. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.ts +333 -331
  186. package/src/modules/menu/index.ts +1 -1
  187. package/src/modules/menu/menu-screen.view.ts +78 -71
  188. package/src/modules/menu/menu.constants.ts +1 -1
  189. package/src/modules/menu/menu.controller.ts +16 -16
  190. package/src/modules/menu/menu.interfaces.ts +18 -17
  191. package/src/modules/menu/menu.module.ts +39 -39
  192. package/src/modules/menu/menu.service.ts +40 -39
  193. package/src/modules/one-table-tournament/index.ts +1 -1
  194. package/src/modules/one-table-tournament/one-table-tournament-status-screen.view.ts +166 -166
  195. package/src/modules/one-table-tournament/one-table-tournament.constants.ts +3 -3
  196. package/src/modules/one-table-tournament/one-table-tournament.controller.ts +104 -104
  197. package/src/modules/one-table-tournament/one-table-tournament.interfaces.ts +20 -20
  198. package/src/modules/one-table-tournament/one-table-tournament.module.ts +80 -76
  199. package/src/modules/one-table-tournament/one-table-tournament.service.ts +146 -146
  200. package/src/modules/one-table-tournament-rooms-manager/index.ts +2 -2
  201. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.constants.ts +3 -3
  202. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.ts +31 -31
  203. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.ts +71 -66
  204. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.ts +222 -220
  205. package/src/modules/players-manager/index.ts +2 -2
  206. package/src/modules/players-manager/players-manager.module.ts +9 -9
  207. package/src/modules/players-manager/players-manager.service.ts +27 -27
  208. package/src/modules/simple-rooms/index.ts +1 -1
  209. package/src/modules/simple-rooms/simple-rooms.constants.ts +1 -1
  210. package/src/modules/simple-rooms/simple-rooms.controller.ts +63 -63
  211. package/src/modules/simple-rooms/simple-rooms.interfaces.ts +20 -20
  212. package/src/modules/simple-rooms/simple-rooms.module.ts +39 -39
  213. package/src/modules/simple-rooms/simple-rooms.service.ts +95 -95
  214. package/src/modules/simple-rooms-manager/index.ts +2 -2
  215. package/src/modules/simple-rooms-manager/simple-rooms-manager.constants.ts +3 -3
  216. package/src/modules/simple-rooms-manager/simple-rooms-manager.interfaces.ts +26 -26
  217. package/src/modules/simple-rooms-manager/simple-rooms-manager.module.ts +65 -60
  218. package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +192 -190
  219. package/src/modules/support/dump.service.ts +11 -11
  220. package/src/modules/support/index.ts +1 -1
  221. package/src/modules/support/metric.service.ts +41 -41
  222. package/src/modules/support/support.constants.ts +1 -1
  223. package/src/modules/support/support.controller.ts +79 -79
  224. package/src/modules/support/support.interfaces.ts +16 -16
  225. package/src/modules/support/support.module.ts +35 -35
  226. package/src/modules/support/support.service.ts +27 -27
  227. package/src/utils/date.ts +7 -7
  228. package/src/utils/game-table-result.ts +190 -129
  229. package/src/views/index.ts +5 -5
  230. package/src/views/many-tables-tournament-conifrm-exit-dialog.view.ts +37 -37
  231. package/src/views/one-table-tournament-conifrm-exit-dialog.view.ts +37 -37
  232. package/src/views/simple-room-conifrm-exit-dialog.view.ts +37 -37
  233. package/src/views/table-summary.view.ts +104 -104
  234. package/src/views/tournament-buy-ticket-dialog.view.ts +34 -34
@@ -1,190 +1,192 @@
1
- import { Inject, Injectable } from '@nestjs/common';
2
- import { InjectConnection } from '@nestjs/mongoose';
3
- import { Connection } from 'mongoose';
4
- import {
5
- BaseGameEvent,
6
- GameMaster,
7
- MinPlayersStartStrategy,
8
- SimpleRoom,
9
- GameRoomConfig,
10
- RoomUpdateStateEvent,
11
- UserWonTheGameAppEvent,
12
- GameTableFinishedEvent,
13
- GamePlayerEnteredTheTableEvent,
14
- GamePlayerExitedTheTableEvent,
15
- LocalService,
16
- } from 'jp.ms.common.engine';
17
- import {
18
- GameResultRepository,
19
- SimpleRoomDocument,
20
- SimpleRoomsRepository,
21
- UsersRepository,
22
- } from 'jp.db.schemas';
23
-
24
- import { JpLoggerService } from '../logger/jp-logger.service';
25
- import { saveGameTablesResult } from '../../utils/game-table-result';
26
- import { EventsBusMainTablesSubscribeService } from '../event-bus/events-bus.main-tables.subscribe.service';
27
- import { EventsBusAppSubscribeService } from '../event-bus/events-bus.app.subscribe.service';
28
-
29
- import { SIMPLE_ROOMS_MANAGER_OPTIONS } from './simple-rooms-manager.constants';
30
- import { SimpleRoomsFactoryOptions } from './simple-rooms-manager.interfaces';
31
-
32
- @Injectable()
33
- export class SimpleRoomsManagerService {
34
- private readonly rooms: Map<string, SimpleRoom>;
35
-
36
- constructor(
37
- private readonly roomsRepository: SimpleRoomsRepository,
38
- private readonly usersRepository: UsersRepository,
39
- private readonly gameResultRepository: GameResultRepository,
40
- private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
41
- private readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
42
- @Inject(SIMPLE_ROOMS_MANAGER_OPTIONS)
43
- private readonly options: SimpleRoomsFactoryOptions,
44
- @InjectConnection() private readonly connection: Connection,
45
- @Inject() private readonly logger: JpLoggerService,
46
- ) {
47
- this.rooms = new Map<string, SimpleRoom>();
48
- }
49
-
50
- get gameType() {
51
- return this.options.gameType;
52
- }
53
-
54
- getRoomById(roomId: string): SimpleRoom | undefined {
55
- return this.rooms.get(roomId);
56
- }
57
-
58
- getRoomByTableId(tableId: string): SimpleRoom | undefined {
59
- const { roomId } = GameMaster.parseTableId(tableId);
60
-
61
- return this.getRoomById(roomId);
62
- }
63
-
64
- getRooms(): Array<SimpleRoom> {
65
- return Array.from(this.rooms.values());
66
- }
67
-
68
- getTables(): Array<GameMaster> {
69
- return this.getRooms().reduce((result, currentValue) => {
70
- return [...result, ...currentValue.getMasters()];
71
- }, [] as Array<GameMaster>);
72
- }
73
-
74
- addRoom(room: SimpleRoom) {
75
- this.rooms.set(room.getId(), room);
76
- }
77
-
78
- async hydrateRoomsFromDB() {
79
- const templates = await this.roomsRepository.findRooms(this.gameType);
80
-
81
- templates.forEach((item) => {
82
- const newRoom = this.options.createRoom(
83
- this.simpleRoomDocumentToRoom(item),
84
- );
85
- this.addRoom(newRoom);
86
- });
87
- }
88
-
89
- /*
90
- 1. Сначала ищем стол в котором один игрок
91
- 2. Далее ищем стол за которым есть игроки и свободные места
92
- 3. Отправляем на стол для быстрой игры если там есть места
93
- 4. Наконец создаем стол для быстрой игры и отправляем туда
94
- */
95
- getFreeFastGameRoom(): GameMaster | undefined {
96
- if (this.getRooms().some((item) => item.isTechBreak())) {
97
- return;
98
- }
99
-
100
- const tables = this.getTables();
101
-
102
- let freeTable = tables.find(
103
- (master) =>
104
- master.getTable().remainOnePlayer() &&
105
- master.getTable().getPlayers()[0].hasOpenConnection(),
106
- );
107
-
108
- if (!freeTable) {
109
- freeTable = tables.find(
110
- (master) =>
111
- master.getTable().hasMinPlayers() &&
112
- !master.getTable().isFullWithQueue(),
113
- );
114
- }
115
-
116
- if (!freeTable) {
117
- freeTable = tables
118
- .filter((item) => item.getRoom().getEnableForFastGame())
119
- .find((master) => !master.getTable().isFullWithQueue());
120
- }
121
-
122
- if (!freeTable) {
123
- const fastGameRoom = this.getRooms().find((item) =>
124
- item.getEnableForFastGame(),
125
- );
126
- if (fastGameRoom) {
127
- freeTable = fastGameRoom.addMaster();
128
- }
129
- }
130
-
131
- return freeTable;
132
- }
133
-
134
- private simpleRoomDocumentToRoom(room: SimpleRoomDocument): GameRoomConfig {
135
- return {
136
- id: room.roomId,
137
- gameType: room.gameType,
138
- roomType: room.roomType,
139
- rulesType: room.rulesType,
140
- deckType: room.deckType,
141
- tableSize: room.tableSize,
142
- bet: room.bet,
143
- ticketPrice: room.ticketPrice / 2,
144
- title: room.title,
145
- subtitle: room.subtitle,
146
- description: room.description,
147
- enableForFastGame: room.enableForFastGame,
148
- turnTimeout: this.options.playersTurnTimeout,
149
- restartTimeout: this.options.restartGameTimeout,
150
- instantFinishMode: this.options.instantFinishMode,
151
- localeService: this.options.i18n as LocalService,
152
- startStrategy: new MinPlayersStartStrategy(),
153
- onRoomEvent: this.handleRoomEvent,
154
- } as GameRoomConfig;
155
- }
156
-
157
- private handleRoomEvent = (event: BaseGameEvent) => {
158
- this.logger.log(event.toLog());
159
-
160
- if (event instanceof GameTableFinishedEvent) {
161
- void this.handleRoomTableGameFinished(event.master);
162
- } else if (
163
- event instanceof GamePlayerEnteredTheTableEvent ||
164
- event instanceof GamePlayerExitedTheTableEvent
165
- ) {
166
- this.handleRoomStatusUpdated(
167
- new RoomUpdateStateEvent(event.gameType, event.roomId),
168
- );
169
- }
170
- };
171
-
172
- private handleRoomTableGameFinished = async (master: GameMaster) => {
173
- await saveGameTablesResult(
174
- master,
175
- this.connection,
176
- this.gameResultRepository,
177
- this.usersRepository,
178
- true,
179
- );
180
-
181
- // TODO: записать разные события для достижений
182
- this.eventsBusAppSubscribeService.pushNewEvent(
183
- new UserWonTheGameAppEvent(this.gameType, '123'),
184
- );
185
- };
186
-
187
- private handleRoomStatusUpdated = (event: RoomUpdateStateEvent) => {
188
- this.eventsBusMainTablesSubscribeService.pushNewRoomState(event);
189
- };
190
- }
1
+ import { Inject, Injectable } from '@nestjs/common';
2
+ import { InjectConnection } from '@nestjs/mongoose';
3
+ import { Connection } from 'mongoose';
4
+ import {
5
+ BaseGameEvent,
6
+ GameMaster,
7
+ MinPlayersStartStrategy,
8
+ SimpleRoom,
9
+ GameRoomConfig,
10
+ RoomUpdateStateEvent,
11
+ UserWonTheGameAppEvent,
12
+ GameTableFinishedEvent,
13
+ GamePlayerEnteredTheTableEvent,
14
+ GamePlayerExitedTheTableEvent,
15
+ LocalService,
16
+ } from 'jp.ms.common.engine';
17
+ import {
18
+ GameResultRepository,
19
+ RatingRepository,
20
+ SimpleRoomDocument,
21
+ SimpleRoomsRepository,
22
+ UsersRepository,
23
+ } from 'jp.db.schemas';
24
+
25
+ import { JpLoggerService } from '../logger/jp-logger.service';
26
+ import { saveGameTablesResultForSimpleRoom } from '../../utils/game-table-result';
27
+ import { EventsBusMainTablesSubscribeService } from '../event-bus/events-bus.main-tables.subscribe.service';
28
+ import { EventsBusAppSubscribeService } from '../event-bus/events-bus.app.subscribe.service';
29
+
30
+ import { SIMPLE_ROOMS_MANAGER_OPTIONS } from './simple-rooms-manager.constants';
31
+ import { SimpleRoomsFactoryOptions } from './simple-rooms-manager.interfaces';
32
+
33
+ @Injectable()
34
+ export class SimpleRoomsManagerService {
35
+ private readonly rooms: Map<string, SimpleRoom>;
36
+
37
+ constructor(
38
+ private readonly roomsRepository: SimpleRoomsRepository,
39
+ private readonly usersRepository: UsersRepository,
40
+ private readonly gameResultRepository: GameResultRepository,
41
+ private readonly ratingRepository: RatingRepository,
42
+ private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
43
+ private readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
44
+ @Inject(SIMPLE_ROOMS_MANAGER_OPTIONS)
45
+ private readonly options: SimpleRoomsFactoryOptions,
46
+ @InjectConnection() private readonly connection: Connection,
47
+ @Inject() private readonly logger: JpLoggerService,
48
+ ) {
49
+ this.rooms = new Map<string, SimpleRoom>();
50
+ }
51
+
52
+ get gameType() {
53
+ return this.options.gameType;
54
+ }
55
+
56
+ getRoomById(roomId: string): SimpleRoom | undefined {
57
+ return this.rooms.get(roomId);
58
+ }
59
+
60
+ getRoomByTableId(tableId: string): SimpleRoom | undefined {
61
+ const { roomId } = GameMaster.parseTableId(tableId);
62
+
63
+ return this.getRoomById(roomId);
64
+ }
65
+
66
+ getRooms(): Array<SimpleRoom> {
67
+ return Array.from(this.rooms.values());
68
+ }
69
+
70
+ getTables(): Array<GameMaster> {
71
+ return this.getRooms().reduce((result, currentValue) => {
72
+ return [...result, ...currentValue.getMasters()];
73
+ }, [] as Array<GameMaster>);
74
+ }
75
+
76
+ addRoom(room: SimpleRoom) {
77
+ this.rooms.set(room.getId(), room);
78
+ }
79
+
80
+ async hydrateRoomsFromDB() {
81
+ const templates = await this.roomsRepository.findRooms(this.gameType);
82
+
83
+ templates.forEach((item) => {
84
+ const newRoom = this.options.createRoom(
85
+ this.simpleRoomDocumentToRoom(item),
86
+ );
87
+ this.addRoom(newRoom);
88
+ });
89
+ }
90
+
91
+ /*
92
+ 1. Сначала ищем стол в котором один игрок
93
+ 2. Далее ищем стол за которым есть игроки и свободные места
94
+ 3. Отправляем на стол для быстрой игры если там есть места
95
+ 4. Наконец создаем стол для быстрой игры и отправляем туда
96
+ */
97
+ getFreeFastGameRoom(): GameMaster | undefined {
98
+ if (this.getRooms().some((item) => item.isTechBreak())) {
99
+ return;
100
+ }
101
+
102
+ const tables = this.getTables();
103
+
104
+ let freeTable = tables.find(
105
+ (master) =>
106
+ master.getTable().remainOnePlayer() &&
107
+ master.getTable().getPlayers()[0].hasOpenConnection(),
108
+ );
109
+
110
+ if (!freeTable) {
111
+ freeTable = tables.find(
112
+ (master) =>
113
+ master.getTable().hasMinPlayers() &&
114
+ !master.getTable().isFullWithQueue(),
115
+ );
116
+ }
117
+
118
+ if (!freeTable) {
119
+ freeTable = tables
120
+ .filter((item) => item.getRoom().getEnableForFastGame())
121
+ .find((master) => !master.getTable().isFullWithQueue());
122
+ }
123
+
124
+ if (!freeTable) {
125
+ const fastGameRoom = this.getRooms().find((item) =>
126
+ item.getEnableForFastGame(),
127
+ );
128
+ if (fastGameRoom) {
129
+ freeTable = fastGameRoom.addMaster();
130
+ }
131
+ }
132
+
133
+ return freeTable;
134
+ }
135
+
136
+ private simpleRoomDocumentToRoom(room: SimpleRoomDocument): GameRoomConfig {
137
+ return {
138
+ id: room.roomId,
139
+ gameType: room.gameType,
140
+ roomType: room.roomType,
141
+ rulesType: room.rulesType,
142
+ deckType: room.deckType,
143
+ tableSize: room.tableSize,
144
+ bet: room.bet,
145
+ ticketPrice: room.ticketPrice / 2,
146
+ title: room.title,
147
+ subtitle: room.subtitle,
148
+ description: room.description,
149
+ enableForFastGame: room.enableForFastGame,
150
+ turnTimeout: this.options.playersTurnTimeout,
151
+ restartTimeout: this.options.restartGameTimeout,
152
+ instantFinishMode: this.options.instantFinishMode,
153
+ localeService: this.options.i18n as LocalService,
154
+ startStrategy: new MinPlayersStartStrategy(),
155
+ onRoomEvent: this.handleRoomEvent,
156
+ } as GameRoomConfig;
157
+ }
158
+
159
+ private handleRoomEvent = (event: BaseGameEvent) => {
160
+ this.logger.log(event.toLog());
161
+
162
+ if (event instanceof GameTableFinishedEvent) {
163
+ void this.handleRoomTableGameFinished(event.master);
164
+ } else if (
165
+ event instanceof GamePlayerEnteredTheTableEvent ||
166
+ event instanceof GamePlayerExitedTheTableEvent
167
+ ) {
168
+ this.handleRoomStatusUpdated(
169
+ new RoomUpdateStateEvent(event.gameType, event.roomId),
170
+ );
171
+ }
172
+ };
173
+
174
+ private handleRoomTableGameFinished = async (master: GameMaster) => {
175
+ await saveGameTablesResultForSimpleRoom(
176
+ master,
177
+ this.connection,
178
+ this.gameResultRepository,
179
+ this.usersRepository,
180
+ this.ratingRepository,
181
+ );
182
+
183
+ // TODO: записать разные события для достижений
184
+ this.eventsBusAppSubscribeService.pushNewEvent(
185
+ new UserWonTheGameAppEvent(this.gameType, '123'),
186
+ );
187
+ };
188
+
189
+ private handleRoomStatusUpdated = (event: RoomUpdateStateEvent) => {
190
+ this.eventsBusMainTablesSubscribeService.pushNewRoomState(event);
191
+ };
192
+ }
@@ -1,11 +1,11 @@
1
- import { Injectable } from '@nestjs/common';
2
- import v8 from 'v8';
3
-
4
- @Injectable()
5
- export class DumpService {
6
- constructor() {}
7
-
8
- getDump(): NodeJS.ReadableStream {
9
- return v8.getHeapSnapshot();
10
- }
11
- }
1
+ import { Injectable } from '@nestjs/common';
2
+ import v8 from 'v8';
3
+
4
+ @Injectable()
5
+ export class DumpService {
6
+ constructor() {}
7
+
8
+ getDump(): NodeJS.ReadableStream {
9
+ return v8.getHeapSnapshot();
10
+ }
11
+ }
@@ -1 +1 @@
1
- export { SupportModule } from './support.module';
1
+ export { SupportModule } from './support.module';
@@ -1,41 +1,41 @@
1
- import { Inject, Injectable } from '@nestjs/common';
2
- import * as client from 'prom-client';
3
- import { Gauge, register, Registry } from 'prom-client';
4
-
5
- import { PlayersManagerService } from '../players-manager/players-manager.service';
6
-
7
- import { SUPPORT_OPTIONS } from './support.constants';
8
- import { SupportFactoryOptions } from './support.interfaces';
9
-
10
- @Injectable()
11
- export class MetricService {
12
- private readonly register: Registry;
13
- private readonly activeUsersGauge: Gauge;
14
- private readonly playingTablesGauge: Gauge;
15
-
16
- constructor(
17
- @Inject(SUPPORT_OPTIONS) private options: SupportFactoryOptions,
18
- private readonly playersManager: PlayersManagerService,
19
- ) {
20
- this.register = new client.Registry();
21
- register.setDefaultLabels({ app: this.options.prometheusNameApp });
22
- client.collectDefaultMetrics({ register });
23
-
24
- this.activeUsersGauge = new client.Gauge({
25
- name: 'jptserveractiveusers',
26
- help: 'Amount of active users',
27
- });
28
-
29
- this.playingTablesGauge = new client.Gauge({
30
- name: 'jptserverplayingtables',
31
- help: 'Amount of playing tables',
32
- });
33
- }
34
-
35
- getMetrics(): Registry {
36
- this.activeUsersGauge.set(this.playersManager.getPlayers().length);
37
- // this.playingTablesGauge.set(this.playersManager.getPlayingTables(''))
38
-
39
- return register;
40
- }
41
- }
1
+ import { Inject, Injectable } from '@nestjs/common';
2
+ import * as client from 'prom-client';
3
+ import { Gauge, register, Registry } from 'prom-client';
4
+
5
+ import { PlayersManagerService } from '../players-manager/players-manager.service';
6
+
7
+ import { SUPPORT_OPTIONS } from './support.constants';
8
+ import { SupportFactoryOptions } from './support.interfaces';
9
+
10
+ @Injectable()
11
+ export class MetricService {
12
+ private readonly register: Registry;
13
+ private readonly activeUsersGauge: Gauge;
14
+ private readonly playingTablesGauge: Gauge;
15
+
16
+ constructor(
17
+ @Inject(SUPPORT_OPTIONS) private options: SupportFactoryOptions,
18
+ private readonly playersManager: PlayersManagerService,
19
+ ) {
20
+ this.register = new client.Registry();
21
+ register.setDefaultLabels({ app: this.options.prometheusNameApp });
22
+ client.collectDefaultMetrics({ register });
23
+
24
+ this.activeUsersGauge = new client.Gauge({
25
+ name: 'jptserveractiveusers',
26
+ help: 'Amount of active users',
27
+ });
28
+
29
+ this.playingTablesGauge = new client.Gauge({
30
+ name: 'jptserverplayingtables',
31
+ help: 'Amount of playing tables',
32
+ });
33
+ }
34
+
35
+ getMetrics(): Registry {
36
+ this.activeUsersGauge.set(this.playersManager.getPlayers().length);
37
+ // this.playingTablesGauge.set(this.playersManager.getPlayingTables(''))
38
+
39
+ return register;
40
+ }
41
+ }
@@ -1 +1 @@
1
- export const SUPPORT_OPTIONS = Symbol('SUPPORT_OPTIONS');
1
+ export const SUPPORT_OPTIONS = Symbol('SUPPORT_OPTIONS');
@@ -1,79 +1,79 @@
1
- import {
2
- Body,
3
- Controller,
4
- Get,
5
- Headers,
6
- HttpCode,
7
- HttpStatus,
8
- Inject,
9
- Post,
10
- Res,
11
- } from '@nestjs/common';
12
- import type { Response } from 'express';
13
- import { IAppHeaders } from 'jp.common.models';
14
-
15
- import { PlayerConnectedDto } from '../../dto/common/player-connected.dto';
16
- import { JpLoggerService } from '../logger/jp-logger.service';
17
- import { LogsDto } from '../../dto/common/log.dto';
18
-
19
- import { SupportService } from './support.service';
20
- import { MetricService } from './metric.service';
21
- import { DumpService } from './dump.service';
22
-
23
- @Controller('support')
24
- export class SupportController {
25
- constructor(
26
- private readonly supportService: SupportService,
27
- private readonly metricService: MetricService,
28
- private readonly dumpService: DumpService,
29
- @Inject() private readonly logger: JpLoggerService,
30
- ) {}
31
-
32
- @Get('users')
33
- getUsers(): Array<PlayerConnectedDto> {
34
- return this.supportService.getUsers();
35
- }
36
-
37
- @Get('dump')
38
- getDump(@Res() response: Response): void {
39
- const dump = this.dumpService.getDump();
40
-
41
- response.set({
42
- 'Content-Type': 'application/octet-stream',
43
- 'Content-Disposition': 'attachment; filename=${Date.now()}.heapsnapshot',
44
- });
45
-
46
- dump.pipe(response);
47
- }
48
-
49
- @Get('metrics')
50
- async getMetrics(@Res() response: Response) {
51
- const register = this.metricService.getMetrics();
52
- response.set({ 'Content-Type': register.contentType });
53
-
54
- response.send(await register.metrics());
55
- }
56
-
57
- @Post('log')
58
- @HttpCode(HttpStatus.OK)
59
- addLog(@Headers() headers: IAppHeaders, @Body() body: LogsDto) {
60
- body.logs.forEach((item) => {
61
- this.logger.log({
62
- client_auth_token: headers.client_auth_token,
63
- client_game: headers.client_game,
64
- client_channel: headers.client_channel,
65
- client_language: headers.client_language,
66
- client_version: headers.client_version,
67
- description: item.message,
68
- stackTrace: item.stackTrace,
69
- level: item.level,
70
- });
71
- });
72
- }
73
-
74
- @Post('techBreakOn')
75
- @HttpCode(HttpStatus.OK)
76
- techBreakOn(): boolean {
77
- return this.supportService.techBreakOn();
78
- }
79
- }
1
+ import {
2
+ Body,
3
+ Controller,
4
+ Get,
5
+ Headers,
6
+ HttpCode,
7
+ HttpStatus,
8
+ Inject,
9
+ Post,
10
+ Res,
11
+ } from '@nestjs/common';
12
+ import type { Response } from 'express';
13
+ import { IAppHeaders } from 'jp.common.models';
14
+
15
+ import { PlayerConnectedDto } from '../../dto/common/player-connected.dto';
16
+ import { JpLoggerService } from '../logger/jp-logger.service';
17
+ import { LogsDto } from '../../dto/common/log.dto';
18
+
19
+ import { SupportService } from './support.service';
20
+ import { MetricService } from './metric.service';
21
+ import { DumpService } from './dump.service';
22
+
23
+ @Controller('support')
24
+ export class SupportController {
25
+ constructor(
26
+ private readonly supportService: SupportService,
27
+ private readonly metricService: MetricService,
28
+ private readonly dumpService: DumpService,
29
+ @Inject() private readonly logger: JpLoggerService,
30
+ ) {}
31
+
32
+ @Get('users')
33
+ getUsers(): Array<PlayerConnectedDto> {
34
+ return this.supportService.getUsers();
35
+ }
36
+
37
+ @Get('dump')
38
+ getDump(@Res() response: Response): void {
39
+ const dump = this.dumpService.getDump();
40
+
41
+ response.set({
42
+ 'Content-Type': 'application/octet-stream',
43
+ 'Content-Disposition': 'attachment; filename=${Date.now()}.heapsnapshot',
44
+ });
45
+
46
+ dump.pipe(response);
47
+ }
48
+
49
+ @Get('metrics')
50
+ async getMetrics(@Res() response: Response) {
51
+ const register = this.metricService.getMetrics();
52
+ response.set({ 'Content-Type': register.contentType });
53
+
54
+ response.send(await register.metrics());
55
+ }
56
+
57
+ @Post('log')
58
+ @HttpCode(HttpStatus.OK)
59
+ addLog(@Headers() headers: IAppHeaders, @Body() body: LogsDto) {
60
+ body.logs.forEach((item) => {
61
+ this.logger.log({
62
+ client_auth_token: headers.client_auth_token,
63
+ client_game: headers.client_game,
64
+ client_channel: headers.client_channel,
65
+ client_language: headers.client_language,
66
+ client_version: headers.client_version,
67
+ description: item.message,
68
+ stackTrace: item.stackTrace,
69
+ level: item.level,
70
+ });
71
+ });
72
+ }
73
+
74
+ @Post('techBreakOn')
75
+ @HttpCode(HttpStatus.OK)
76
+ techBreakOn(): boolean {
77
+ return this.supportService.techBreakOn();
78
+ }
79
+ }