jp.ms.common.modules 1.0.24 → 1.0.26

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 (120) hide show
  1. package/dist/adapter/base-table-game-state-adapter.d.ts +3 -1
  2. package/dist/adapter/base-table-game-state-adapter.js +11 -0
  3. package/dist/adapter/base-table-game-state-adapter.js.map +1 -1
  4. package/dist/adapter/card-table-game-state-adapter.d.ts +4 -2
  5. package/dist/adapter/card-table-game-state-adapter.js +15 -4
  6. package/dist/adapter/card-table-game-state-adapter.js.map +1 -1
  7. package/dist/config/cert.js +35 -2
  8. package/dist/config/cert.js.map +1 -1
  9. package/dist/config/cors.js +34 -1
  10. package/dist/config/cors.js.map +1 -1
  11. package/dist/dto/common/find-free-table.dto.d.ts +3 -0
  12. package/dist/dto/common/find-free-table.dto.js +8 -0
  13. package/dist/dto/common/find-free-table.dto.js.map +1 -0
  14. package/dist/dto/common/index.d.ts +1 -0
  15. package/dist/dto/common/index.js +3 -1
  16. package/dist/dto/common/index.js.map +1 -1
  17. package/dist/dto/table-game/base/base-table-game-state.dto.d.ts +3 -0
  18. package/dist/dto/table-game/base/base-table-game-state.dto.js +19 -0
  19. package/dist/dto/table-game/base/base-table-game-state.dto.js.map +1 -1
  20. package/dist/dto/table-game/cards/cards-panel.dto.d.ts +2 -1
  21. package/dist/dto/table-game/cards/cards-panel.dto.js +14 -3
  22. package/dist/dto/table-game/cards/cards-panel.dto.js.map +1 -1
  23. package/dist/modules/anti-freeze-system/anti-freeze-system.module.js +4 -1
  24. package/dist/modules/anti-freeze-system/anti-freeze-system.module.js.map +1 -1
  25. package/dist/modules/anti-freeze-system/anti-freeze-system.service.js +2 -2
  26. package/dist/modules/anti-freeze-system/anti-freeze-system.service.js.map +1 -1
  27. package/dist/modules/base-achievements/base-achievements.module.d.ts +1 -1
  28. package/dist/modules/base-achievements/base-achievements.module.js +12 -12
  29. package/dist/modules/base-achievements/base-achievements.module.js.map +1 -1
  30. package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.d.ts +1 -1
  31. package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.js.map +1 -1
  32. package/dist/modules/logger/jp-logger.service.js +34 -1
  33. package/dist/modules/logger/jp-logger.service.js.map +1 -1
  34. package/dist/modules/main/main-tables-list-screen.view.js +1 -1
  35. package/dist/modules/main/main-tables-list-screen.view.js.map +1 -1
  36. package/dist/modules/main/main.controller.d.ts +2 -2
  37. package/dist/modules/main/main.controller.js +4 -3
  38. package/dist/modules/main/main.controller.js.map +1 -1
  39. package/dist/modules/main/main.module.js +2 -2
  40. package/dist/modules/main/main.module.js.map +1 -1
  41. package/dist/modules/main/main.service.d.ts +2 -2
  42. package/dist/modules/main/main.service.js +11 -5
  43. package/dist/modules/main/main.service.js.map +1 -1
  44. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +1 -1
  45. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
  46. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +1 -1
  47. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
  48. package/dist/modules/menu/menu-screen.view.d.ts +5 -3
  49. package/dist/modules/menu/menu-screen.view.js +10 -2
  50. package/dist/modules/menu/menu-screen.view.js.map +1 -1
  51. package/dist/modules/menu/menu.module.js +2 -1
  52. package/dist/modules/menu/menu.module.js.map +1 -1
  53. package/dist/modules/menu/menu.service.d.ts +3 -2
  54. package/dist/modules/menu/menu.service.js +8 -4
  55. package/dist/modules/menu/menu.service.js.map +1 -1
  56. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.d.ts +6 -1
  57. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js +52 -3
  58. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js.map +1 -1
  59. package/dist/modules/one-table-tournament/one-table-tournament.controller.d.ts +4 -5
  60. package/dist/modules/one-table-tournament/one-table-tournament.controller.js +8 -9
  61. package/dist/modules/one-table-tournament/one-table-tournament.controller.js.map +1 -1
  62. package/dist/modules/one-table-tournament/one-table-tournament.module.js +2 -2
  63. package/dist/modules/one-table-tournament/one-table-tournament.module.js.map +1 -1
  64. package/dist/modules/one-table-tournament/one-table-tournament.service.d.ts +6 -7
  65. package/dist/modules/one-table-tournament/one-table-tournament.service.js +10 -17
  66. package/dist/modules/one-table-tournament/one-table-tournament.service.js.map +1 -1
  67. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.d.ts +2 -1
  68. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +30 -5
  69. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
  70. package/dist/modules/support/dump.service.js +4 -1
  71. package/dist/modules/support/dump.service.js.map +1 -1
  72. package/dist/modules/support/metric.service.js +34 -1
  73. package/dist/modules/support/metric.service.js.map +1 -1
  74. package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js +33 -10
  75. package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js.map +1 -1
  76. package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js +21 -5
  77. package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js.map +1 -1
  78. package/dist/tsconfig.tsbuildinfo +1 -1
  79. package/dist/utils/game-table-result.d.ts +3 -2
  80. package/dist/utils/game-table-result.js +14 -1
  81. package/dist/utils/game-table-result.js.map +1 -1
  82. package/dist/views/index.d.ts +1 -0
  83. package/dist/views/index.js +3 -1
  84. package/dist/views/index.js.map +1 -1
  85. package/dist/views/simple-room-conifrm-exit-dialog.view.d.ts +4 -0
  86. package/dist/views/simple-room-conifrm-exit-dialog.view.js +11 -0
  87. package/dist/views/simple-room-conifrm-exit-dialog.view.js.map +1 -0
  88. package/dist/views/tournament-buy-ticket-dialog.view.d.ts +2 -2
  89. package/dist/views/tournament-buy-ticket-dialog.view.js +1 -1
  90. package/dist/views/tournament-buy-ticket-dialog.view.js.map +1 -1
  91. package/package.json +4 -4
  92. package/src/adapter/base-table-game-state-adapter.ts +23 -5
  93. package/src/adapter/card-table-game-state-adapter.ts +28 -4
  94. package/src/dto/common/find-free-table.dto.ts +3 -0
  95. package/src/dto/common/index.ts +1 -0
  96. package/src/dto/table-game/base/base-table-game-state.dto.ts +16 -0
  97. package/src/dto/table-game/cards/cards-panel.dto.ts +12 -3
  98. package/src/modules/anti-freeze-system/anti-freeze-system.service.ts +3 -3
  99. package/src/modules/base-achievements/base-achievements.module.ts +12 -10
  100. package/src/modules/event-bus/events-bus.main-tables.subscribe.service.ts +1 -1
  101. package/src/modules/main/main-tables-list-screen.view.ts +2 -2
  102. package/src/modules/main/main.controller.ts +4 -4
  103. package/src/modules/main/main.module.ts +5 -5
  104. package/src/modules/main/main.service.ts +20 -10
  105. package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +1 -1
  106. package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +2 -1
  107. package/src/modules/menu/menu-screen.view.ts +33 -11
  108. package/src/modules/menu/menu.module.ts +3 -2
  109. package/src/modules/menu/menu.service.ts +5 -2
  110. package/src/modules/one-table-tournament/one-table-tournament-status-screen.view.ts +76 -10
  111. package/src/modules/one-table-tournament/one-table-tournament.controller.ts +8 -8
  112. package/src/modules/one-table-tournament/one-table-tournament.module.ts +2 -2
  113. package/src/modules/one-table-tournament/one-table-tournament.service.ts +20 -28
  114. package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +64 -14
  115. package/src/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.ts +42 -17
  116. package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts +37 -15
  117. package/src/utils/game-table-result.ts +18 -3
  118. package/src/views/index.ts +2 -1
  119. package/src/views/simple-room-conifrm-exit-dialog.view.ts +21 -0
  120. package/src/views/tournament-buy-ticket-dialog.view.ts +11 -11
@@ -9,6 +9,9 @@ import {
9
9
  GameRoomConfig,
10
10
  RoomUpdateStateEvent,
11
11
  UserWonTheGameAppEvent,
12
+ GameTableFinishedEvent,
13
+ GamePlayerEnteredTheTableEvent,
14
+ GamePlayerExitedTheTableEvent,
12
15
  } from 'jp.ms.common.engine';
13
16
  import {
14
17
  GameResultRepository,
@@ -42,47 +45,87 @@ export class SimpleRoomsManagerService {
42
45
  this.rooms = new Map<string, SimpleRoom>();
43
46
  }
44
47
 
45
- get gameType() {
48
+ get gameType () {
46
49
  return this.options.configService.get<string>('GAME_TYPE') || '';
47
50
  }
48
51
 
49
- getRoomById(roomId: string): SimpleRoom | undefined {
52
+ getRoomById (roomId: string): SimpleRoom | undefined {
50
53
  return this.rooms.get(roomId);
51
54
  }
52
55
 
53
- getRoomByTableId(tableId: string): SimpleRoom | undefined {
56
+ getRoomByTableId (tableId: string): SimpleRoom | undefined {
54
57
  const { roomId } = GameMaster.parseTableId(tableId);
55
58
 
56
59
  return this.getRoomById(roomId);
57
60
  }
58
61
 
59
- getRooms(): Array<SimpleRoom> {
62
+ getRooms (): Array<SimpleRoom> {
60
63
  return Array.from(this.rooms.values());
61
64
  }
62
65
 
63
- getTables(): Array<GameMaster> {
66
+ getTables (): Array<GameMaster> {
64
67
  return this.getRooms().reduce(
65
68
  (result, currentValue) => {
66
69
  return [...result, ...currentValue.getMasters()];
67
- }, [] as Array<GameMaster>);
70
+ }, [] as Array<GameMaster>
71
+ );
68
72
  }
69
73
 
70
- addRoom(room: SimpleRoom) {
74
+ addRoom (room: SimpleRoom) {
71
75
  this.rooms.set(room.getId(), room);
72
76
  }
73
77
 
74
- async hydrateRoomsFromDB() {
78
+ async hydrateRoomsFromDB () {
75
79
  const templates = await this.roomsRepository.findRooms(this.gameType);
76
80
 
77
81
  templates.forEach((item) => {
78
82
  const newRoom = this.options.createRoom(
79
- this.simpleRoomDocumentToTournamentRoom(item)
83
+ this.simpleRoomDocumentToRoom(item)
80
84
  );
81
85
  this.addRoom(newRoom);
82
86
  });
83
87
  }
84
88
 
85
- private simpleRoomDocumentToTournamentRoom(room: SimpleRoomDocument): GameRoomConfig {
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) => master.getTable().remainOnePlayer() && master.getTable().getPlayers()[0].hasOpenConnection()
104
+ );
105
+
106
+ if (!freeTable) {
107
+ freeTable = tables.find(
108
+ (master) => master.getTable().hasMinPlayers() && !master.getTable().isFullWithQueue(),
109
+ );
110
+ }
111
+
112
+ if (!freeTable) {
113
+ freeTable = tables.filter((item) => item.getRoom().getEnableForFastGame()).find(
114
+ (master) => !master.getTable().isFullWithQueue(),
115
+ );
116
+ }
117
+
118
+ if (!freeTable) {
119
+ const fastGameRoom = this.getRooms().find((item) => item.getEnableForFastGame());
120
+ if (fastGameRoom) {
121
+ freeTable = fastGameRoom.addMaster();
122
+ }
123
+ }
124
+
125
+ return freeTable;
126
+ }
127
+
128
+ private simpleRoomDocumentToRoom (room: SimpleRoomDocument): GameRoomConfig {
86
129
  const restartGameTimeout = this.options.configService.get<number>('RESTART_GAME_TIMEOUT') || 0;
87
130
  const playersTurnTimeout = this.options.configService.get<number>('PLAYERS_TURN_TIMEOUT') || 0;
88
131
 
@@ -98,18 +141,25 @@ export class SimpleRoomsManagerService {
98
141
  title: room.title,
99
142
  subtitle: room.subtitle,
100
143
  description: room.description,
144
+ enableForFastGame: room.enableForFastGame,
101
145
  turnTimeout: playersTurnTimeout,
102
146
  restartTimeout: restartGameTimeout,
103
147
  localeService: this.options.i18n,
104
148
  startStrategy: new MinPlayersStartStrategy(),
105
149
  onRoomEvent: this.handleRoomEvent,
106
- onRoomTableGameFinished: this.handleRoomTableGameFinished,
107
- onRoomStatusUpdated: this.handleRoomStatusUpdated,
150
+ // onRoomTableGameFinished: this.handleRoomTableGameFinished,
151
+ // onRoomStatusUpdated: this.handleRoomStatusUpdated,
108
152
  } as GameRoomConfig;
109
153
  }
110
154
 
111
155
  private handleRoomEvent = (event: BaseGameEvent) => {
112
- this.logger.log(event.toLog());
156
+ this.logger.log(event.toLog());
157
+
158
+ if (event instanceof GameTableFinishedEvent) {
159
+ this.handleRoomTableGameFinished(event.master!!);
160
+ } else if (event instanceof GamePlayerEnteredTheTableEvent || event instanceof GamePlayerExitedTheTableEvent) {
161
+ this.handleRoomStatusUpdated(new RoomUpdateStateEvent(event.gameType, event.roomId));
162
+ }
113
163
  };
114
164
 
115
165
  private handleRoomTableGameFinished = async (master: GameMaster) => {
@@ -122,7 +172,7 @@ export class SimpleRoomsManagerService {
122
172
  );
123
173
 
124
174
  // TODO: записать разные события для достижений
125
- this.eventsBusAppSubscribeService.pushNewEvent(new UserWonTheGameAppEvent('123'));
175
+ this.eventsBusAppSubscribeService.pushNewEvent(new UserWonTheGameAppEvent(this.gameType, '123'));
126
176
  };
127
177
 
128
178
  private handleRoomStatusUpdated = (event: RoomUpdateStateEvent) => {
@@ -3,6 +3,13 @@ import {
3
3
  BaseGameEvent,
4
4
  GameMaster,
5
5
  GamePlayer,
6
+ GameTableFinishedEvent,
7
+ GameTournamentCancelledEvent,
8
+ GameTournamentFinishedEvent,
9
+ GameTournamentPlayerJoinedTheTournamentEvent,
10
+ GameTournamentPlayerLeavedTheTournamentEvent,
11
+ GameTournamentStartedEvent,
12
+ GameTournamentWaitedEvent,
6
13
  ManyTablesTournamentRoom,
7
14
  ManyTablesTournamentRoomConfig,
8
15
  NoStartStrategy,
@@ -17,8 +24,8 @@ import {
17
24
  } from 'jp.db.schemas';
18
25
  import { InjectConnection } from '@nestjs/mongoose';
19
26
  import { Connection } from 'mongoose';
20
- import * as dayjs from 'dayjs';
21
- import * as schedule from 'node-schedule';
27
+ import dayjs from 'dayjs';
28
+ import schedule from 'node-schedule';
22
29
  import { Job } from 'node-schedule';
23
30
 
24
31
  import { saveGameTablesResult, saveTournamentResult } from '../../utils/game-table-result';
@@ -50,25 +57,25 @@ export class TournamentManyTablesRoomsManagerService {
50
57
  this.rooms = new Map<string, ManyTablesTournamentRoom>();
51
58
  }
52
59
 
53
- get gameType() {
60
+ get gameType () {
54
61
  return this.options.configService.get<string>('GAME_TYPE') || '';
55
62
  }
56
63
 
57
- getRoomById(roomId: string): ManyTablesTournamentRoom | undefined {
64
+ getRoomById (roomId: string): ManyTablesTournamentRoom | undefined {
58
65
  return this.rooms.get(roomId);
59
66
  }
60
67
 
61
- getRoomByTableId(tableId: string): ManyTablesTournamentRoom | undefined {
68
+ getRoomByTableId (tableId: string): ManyTablesTournamentRoom | undefined {
62
69
  const { roomId } = GameMaster.parseTableId(tableId);
63
70
 
64
71
  return this.getRoomById(roomId);
65
72
  }
66
73
 
67
- getRooms(): Array<ManyTablesTournamentRoom> {
74
+ getRooms (): Array<ManyTablesTournamentRoom> {
68
75
  return Array.from(this.rooms.values());
69
76
  }
70
77
 
71
- getTables(): Array<GameMaster> {
78
+ getTables (): Array<GameMaster> {
72
79
  return this.getRooms().reduce(
73
80
  (result, currentValue) => {
74
81
  return [...result, ...currentValue.getMasters()];
@@ -77,11 +84,11 @@ export class TournamentManyTablesRoomsManagerService {
77
84
  );
78
85
  }
79
86
 
80
- addRoom(room: ManyTablesTournamentRoom) {
87
+ addRoom (room: ManyTablesTournamentRoom) {
81
88
  this.rooms.set(room.getId(), room);
82
89
  }
83
90
 
84
- async hydrateTournamentsFromDB() {
91
+ async hydrateTournamentsFromDB () {
85
92
  const templates = await this.tournamentRepository.findTournaments(this.gameType);
86
93
  templates.forEach((item) => {
87
94
  this.addRoom(this.options.createTournamentRoom(
@@ -90,7 +97,7 @@ export class TournamentManyTablesRoomsManagerService {
90
97
  });
91
98
  }
92
99
 
93
- async runDailyTournamentJob() {
100
+ async runDailyTournamentJob () {
94
101
  const dailyTournamentScheduleTaskTime = this.options.configService.get<string>('DAILY_TOURNAMENT_SCHEDULE_TASK_TIME');
95
102
  const dailyTournamentTime = this.options.configService.get<string>('DAILY_TOURNAMENT_TIME');
96
103
 
@@ -104,7 +111,7 @@ export class TournamentManyTablesRoomsManagerService {
104
111
  }
105
112
  }
106
113
 
107
- async createTournament(createTournamentDto: ManyTablesTournamentCreateDto) {
114
+ async createTournament (createTournamentDto: ManyTablesTournamentCreateDto) {
108
115
  const newTournament = await this.tournamentRepository.createTournament(createTournamentDto);
109
116
 
110
117
  this.addRoom(this.options.createTournamentRoom(
@@ -112,21 +119,21 @@ export class TournamentManyTablesRoomsManagerService {
112
119
  ));
113
120
  }
114
121
 
115
- async updateTournament(tournamentId: string, updateTournamentDto: ManyTablesTournamentUpdateDto) {
122
+ async updateTournament (tournamentId: string, updateTournamentDto: ManyTablesTournamentUpdateDto) {
116
123
  const updatedTournament = await this.tournamentRepository.updateTournament(tournamentId, updateTournamentDto);
117
124
 
118
- this.getRoomById(tournamentId)?.getTournamentMaster().cancelTournament();
125
+ this.getRoomById(tournamentId)?.getRoomMaster<TournamentMaster>().cancelTournament();
119
126
 
120
127
  this.addRoom(this.options.createTournamentRoom(
121
128
  this.manyTablesTournamentDocumentToTournamentRoom(updatedTournament)
122
129
  ));
123
130
  }
124
131
 
125
- async removeTournament(tournamentId: string) {
132
+ async removeTournament (tournamentId: string) {
126
133
  await this.tournamentRepository.removeTournament(tournamentId);
127
134
  }
128
135
 
129
- async buyTicket(tournamentId: string, player: GamePlayer) {
136
+ async buyTicket (tournamentId: string, player: GamePlayer) {
130
137
  // TODO списать деньги у игрока
131
138
  await this.tournamentRepository.addPlayerToParticipants(tournamentId, {
132
139
  playerId: player.id,
@@ -135,7 +142,7 @@ export class TournamentManyTablesRoomsManagerService {
135
142
  });
136
143
  }
137
144
 
138
- private manyTablesTournamentDocumentToTournamentRoom(tournamentDocument: TournamentManyTablesRoomDocument): ManyTablesTournamentRoomConfig {
145
+ private manyTablesTournamentDocumentToTournamentRoom (tournamentDocument: TournamentManyTablesRoomDocument): ManyTablesTournamentRoomConfig {
139
146
  const restartGameTimeout = this.options.configService.get<number>('RESTART_GAME_TIMEOUT') || 0;
140
147
  const playersTurnTimeout = this.options.configService.get<number>('PLAYERS_TURN_TIMEOUT') || 0;
141
148
  const minPlayersForMergeTables = this.options.configService.get<number>('TOURNAMENT_MANY_TABLES_MIN_PLAYERS_FOR_MERGE_TABLES') || 0;
@@ -152,6 +159,7 @@ export class TournamentManyTablesRoomsManagerService {
152
159
  title: tournamentDocument.title,
153
160
  subtitle: tournamentDocument.subtitle,
154
161
  description: tournamentDocument.description,
162
+ enableForFastGame: false,
155
163
  scheduleDate: tournamentDocument.scheduleDate,
156
164
  turnTimeout: playersTurnTimeout,
157
165
  restartTimeout: restartGameTimeout,
@@ -170,7 +178,24 @@ export class TournamentManyTablesRoomsManagerService {
170
178
  }
171
179
 
172
180
  private handleRoomEvent = (event: BaseGameEvent) => {
173
- this.logger.log(event.toLog());
181
+ if (event instanceof GameTableFinishedEvent) {
182
+ this.handleRoomTableGameFinished(event.master!!);
183
+ } else if (event instanceof GameTournamentStartedEvent) {
184
+ this.handleTournamentRoomStarted(event.room.getRoomMaster());
185
+ } else if (event instanceof GameTournamentCancelledEvent) {
186
+ this.handleTournamentRoomCancelled(event.room.getRoomMaster());
187
+ } else if (event instanceof GameTournamentFinishedEvent) {
188
+ this.handleTournamentRoomFinished(event.room.getRoomMaster());
189
+ } else if (
190
+ event instanceof GameTournamentPlayerJoinedTheTournamentEvent &&
191
+ event instanceof GameTournamentPlayerLeavedTheTournamentEvent &&
192
+ event instanceof GameTournamentCancelledEvent &&
193
+ event instanceof GameTournamentWaitedEvent &&
194
+ event instanceof GameTournamentStartedEvent &&
195
+ event instanceof GameTournamentFinishedEvent
196
+ ) {
197
+ this.handleRoomStatusUpdated(new RoomUpdateStateEvent(event.gameType, event.roomId));
198
+ }
174
199
  };
175
200
 
176
201
  private handleRoomTableGameFinished = async (master: GameMaster) => {
@@ -2,6 +2,13 @@ import { Inject, Injectable } from '@nestjs/common';
2
2
  import {
3
3
  BaseGameEvent,
4
4
  GameMaster,
5
+ GameTableFinishedEvent,
6
+ GameTournamentCancelledEvent,
7
+ GameTournamentFinishedEvent,
8
+ GameTournamentPlayerJoinedTheTournamentEvent,
9
+ GameTournamentPlayerLeavedTheTournamentEvent,
10
+ GameTournamentStartedEvent,
11
+ GameTournamentWaitedEvent,
5
12
  NoStartStrategy,
6
13
  OneTableTournamentRoom,
7
14
  RoomUpdateStateEvent,
@@ -18,7 +25,7 @@ import { InjectConnection } from '@nestjs/mongoose';
18
25
  import { Connection } from 'mongoose';
19
26
 
20
27
  import { JpLoggerService } from '../logger/jp-logger.service';
21
- import { saveGameTablesResult, saveTournamentResult } from '../../utils/game-table-result';
28
+ import { isUpdateTounrmanentRoomEvent, saveGameTablesResult, saveTournamentResult } from '../../utils/game-table-result';
22
29
  import { EventsBusMainTablesSubscribeService, EventsBusOneTableTournamentSubscribeService } from '../event-bus';
23
30
 
24
31
  import { TOURNAMENT_ONE_TABLE_ROOMS_MANAGER_OPTIONS } from './tournament-one-table-rooms-manager.constants';
@@ -41,25 +48,25 @@ export class TournamentOneTableRoomsManagerService {
41
48
  this.rooms = new Map<string, OneTableTournamentRoom>();
42
49
  }
43
50
 
44
- get gameType() {
51
+ get gameType () {
45
52
  return this.options.configService.get<string>('GAME_TYPE') || '';
46
53
  }
47
54
 
48
- getRoomById(roomId: string): OneTableTournamentRoom | undefined {
55
+ getRoomById (roomId: string): OneTableTournamentRoom | undefined {
49
56
  return this.rooms.get(roomId);
50
57
  }
51
58
 
52
- getRoomByTableId(tableId: string): OneTableTournamentRoom | undefined {
59
+ getRoomByTableId (tableId: string): OneTableTournamentRoom | undefined {
53
60
  const { roomId } = GameMaster.parseTableId(tableId);
54
61
 
55
62
  return this.getRoomById(roomId);
56
63
  }
57
64
 
58
- getRooms(): Array<OneTableTournamentRoom> {
65
+ getRooms (): Array<OneTableTournamentRoom> {
59
66
  return Array.from(this.rooms.values());
60
67
  }
61
68
 
62
- getTables(): Array<GameMaster> {
69
+ getTables (): Array<GameMaster> {
63
70
  return this.getRooms().reduce(
64
71
  (result, currentValue) => {
65
72
  return [...result, ...currentValue.getMasters()];
@@ -68,18 +75,18 @@ export class TournamentOneTableRoomsManagerService {
68
75
  );
69
76
  }
70
77
 
71
- addRoom(room: OneTableTournamentRoom) {
78
+ addRoom (room: OneTableTournamentRoom) {
72
79
  this.rooms.set(room.getId(), room);
73
80
  }
74
81
 
75
- async createMasterTournament() {
82
+ async createMasterTournament () {
76
83
  const waitingTournament = await this.tournamentRepository.findWaitingTournament(this.gameType);
77
84
  if (!waitingTournament) {
78
85
  await this.tournamentRepository.createTournamentFromMasterTemplate(this.gameType);
79
86
  }
80
87
  }
81
88
 
82
- async hydrateTournamentsFromDB() {
89
+ async hydrateTournamentsFromDB () {
83
90
  const templates = await this.tournamentRepository.findTournaments(this.gameType);
84
91
  templates.forEach((item) => {
85
92
  this.addRoom(this.options.createTournamentRoom(
@@ -88,7 +95,7 @@ export class TournamentOneTableRoomsManagerService {
88
95
  });
89
96
  }
90
97
 
91
- private oneTableTournamentDocumentToTournamentRoom(tournamentDocument: TournamentOneTableRoomDocument): TournamentRoomConfig {
98
+ private oneTableTournamentDocumentToTournamentRoom (tournamentDocument: TournamentOneTableRoomDocument): TournamentRoomConfig {
92
99
  const restartGameTimeout = this.options.configService.get<number>('RESTART_GAME_TIMEOUT') || 0;
93
100
  const playersTurnTimeout = this.options.configService.get<number>('PLAYERS_TURN_TIMEOUT') || 0;
94
101
 
@@ -104,16 +111,12 @@ export class TournamentOneTableRoomsManagerService {
104
111
  title: tournamentDocument.title,
105
112
  subtitle: tournamentDocument.subtitle,
106
113
  description: tournamentDocument.description,
114
+ enableForFastGame: false,
107
115
  turnTimeout: playersTurnTimeout,
108
116
  restartTimeout: restartGameTimeout,
109
117
  localeService: this.options.i18n,
110
118
  startStrategy: new NoStartStrategy(),
111
119
  onRoomEvent: this.handleRoomEvent,
112
- onRoomTableGameFinished: this.handleRoomTableGameFinished,
113
- onTournamentRoomStarted: this.handleTournamentRoomStarted,
114
- onTournamentRoomFinished: this.handleTournamentRoomFinished,
115
- onTournamentRoomCancelled: this.handleTournamentRoomCancelled,
116
- onRoomStatusUpdated: this.handleRoomStatusUpdated,
117
120
  tournamentPrizeTable: this.options.tournamentPrizeTable,
118
121
  tournamentInitialStatus: tournamentDocument.status,
119
122
  } as TournamentRoomConfig;
@@ -121,6 +124,25 @@ export class TournamentOneTableRoomsManagerService {
121
124
 
122
125
  private handleRoomEvent = (event: BaseGameEvent) => {
123
126
  this.logger.log(event.toLog());
127
+
128
+ if (event instanceof GameTableFinishedEvent) {
129
+ this.handleRoomTableGameFinished(event.master!!);
130
+ } else if (event instanceof GameTournamentStartedEvent) {
131
+ this.handleTournamentRoomStarted(event.room.getRoomMaster());
132
+ } else if (event instanceof GameTournamentCancelledEvent) {
133
+ this.handleTournamentRoomCancelled(event.room.getRoomMaster());
134
+ } else if (event instanceof GameTournamentFinishedEvent) {
135
+ this.handleTournamentRoomFinished(event.room.getRoomMaster());
136
+ } else if (
137
+ event instanceof GameTournamentPlayerJoinedTheTournamentEvent &&
138
+ event instanceof GameTournamentPlayerLeavedTheTournamentEvent &&
139
+ event instanceof GameTournamentCancelledEvent &&
140
+ event instanceof GameTournamentWaitedEvent &&
141
+ event instanceof GameTournamentStartedEvent &&
142
+ event instanceof GameTournamentFinishedEvent
143
+ ) {
144
+ this.handleRoomStatusUpdated(new RoomUpdateStateEvent(event.gameType, event.roomId));
145
+ }
124
146
  };
125
147
 
126
148
  private handleRoomTableGameFinished = async (master: GameMaster) => {
@@ -1,11 +1,11 @@
1
- import { GameMaster, TournamentMaster } from 'jp.ms.common.engine';
1
+ import { Connection } from 'mongoose';
2
+ import { BaseGameEvent, GameMaster, GameTournamentCancelledEvent, GameTournamentFinishedEvent, GameTournamentPlayerJoinedTheTournamentEvent, GameTournamentPlayerLeavedTheTournamentEvent, GameTournamentStartedEvent, GameTournamentWaitedEvent, RoomUpdateStateEvent, TournamentMaster } from 'jp.ms.common.engine';
2
3
  import {
3
4
  GameResultRepository,
4
5
  TournamentManyTablesRoomsRepository,
5
6
  TournamentOneTableRoomsRepository,
6
7
  UsersRepository
7
8
  } from 'jp.db.schemas';
8
- import { Connection } from 'mongoose';
9
9
 
10
10
  export function getGameTableResults (master: GameMaster) {
11
11
  return {
@@ -91,7 +91,7 @@ export async function saveTournamentResult (
91
91
  };
92
92
  });
93
93
 
94
- const session = await this.connection.startSession();
94
+ const session = await connection.startSession();
95
95
  session.startTransaction();
96
96
 
97
97
  try {
@@ -108,3 +108,18 @@ export async function saveTournamentResult (
108
108
  await session.endSession();
109
109
  }
110
110
  }
111
+
112
+ export function isUpdateTounrmanentRoomEvent (event: BaseGameEvent) {
113
+ if (
114
+ event instanceof GameTournamentPlayerJoinedTheTournamentEvent &&
115
+ event instanceof GameTournamentPlayerLeavedTheTournamentEvent &&
116
+ event instanceof GameTournamentCancelledEvent &&
117
+ event instanceof GameTournamentWaitedEvent &&
118
+ event instanceof GameTournamentStartedEvent &&
119
+ event instanceof GameTournamentFinishedEvent
120
+ ) {
121
+ return event
122
+ }
123
+
124
+ return null;
125
+ }
@@ -1 +1,2 @@
1
- export { TournamentBuyTicketDialogView } from './tournament-buy-ticket-dialog.view';
1
+ export { TournamentBuyTicketDialogView } from './tournament-buy-ticket-dialog.view';
2
+ export { SimpleRoomConfirmExitDialogView } from './simple-room-conifrm-exit-dialog.view';
@@ -0,0 +1,21 @@
1
+ import {
2
+ UniversalScreenDialogView,
3
+ AppScreenDialogIdEnum,
4
+ StandardDialogComponent,
5
+ FullButtonsButtonsComponent,
6
+ TextButtonComponent,
7
+ } from "jp.common.models";
8
+
9
+ export class SimpleRoomConfirmExitDialogView extends UniversalScreenDialogView {
10
+ build () {
11
+ return new StandardDialogComponent(
12
+ AppScreenDialogIdEnum.DIALOG_SIMPLE_ROOM_CONFIRM_EXIT,
13
+ this.localeService.t('common.room.screen.dialog.confirm.exit.game.title', { lang: this.lang }),
14
+ this.localeService.t('common.room.screen.dialog.confirm.exit.game.message', { lang: this.lang }),
15
+ new FullButtonsButtonsComponent(
16
+ new TextButtonComponent(this.localeService.t('common.room.screen.dialog.confirm.exit.game.ok', { lang: this.lang })),
17
+ new TextButtonComponent(this.localeService.t('common.room.screen.dialog.confirm.exit.game.cancel', { lang: this.lang })),
18
+ ),
19
+ );
20
+ }
21
+ }
@@ -1,21 +1,21 @@
1
1
  import {
2
- AppScreenSectionButton,
3
- AppScreenSectionButtons,
4
2
  UniversalScreenDialogView,
5
- AppScreenDialog,
6
3
  AppScreenDialogIdEnum,
7
- } from "jp.common.models";
4
+ StandardDialogComponent,
5
+ FullButtonsButtonsComponent,
6
+ TextButtonComponent,
7
+ } from "jp.common.models";
8
8
 
9
9
  export class TournamentBuyTicketDialogView extends UniversalScreenDialogView {
10
- build() {
11
- return AppScreenDialog.CreateStandardDialog(
10
+ build () {
11
+ return new StandardDialogComponent(
12
12
  AppScreenDialogIdEnum.DIALOG_TOURNAMENT_BUY_TICKET,
13
13
  this.localeService.t('common.rooms.screen.buyTicket.title', { lang: this.lang }),
14
14
  this.localeService.t('common.rooms.screen.buyTicket.description', { lang: this.lang }),
15
- AppScreenSectionButtons.CreateFullButtonSection(
16
- AppScreenSectionButton.CreateTextButton('Ok'),
17
- AppScreenSectionButton.CreateTextButton('Cancel'),
18
- )
15
+ new FullButtonsButtonsComponent(
16
+ new TextButtonComponent(this.localeService.t('common.rooms.screen.buyTicket.button.ok', { lang: this.lang })),
17
+ new TextButtonComponent(this.localeService.t('common.rooms.screen.buyTicket.button.cancel', { lang: this.lang })),
18
+ ),
19
19
  );
20
20
  }
21
- }
21
+ }