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.
- package/dist/adapter/base-table-game-state-adapter.d.ts +3 -1
- package/dist/adapter/base-table-game-state-adapter.js +11 -0
- package/dist/adapter/base-table-game-state-adapter.js.map +1 -1
- package/dist/adapter/card-table-game-state-adapter.d.ts +4 -2
- package/dist/adapter/card-table-game-state-adapter.js +15 -4
- package/dist/adapter/card-table-game-state-adapter.js.map +1 -1
- package/dist/config/cert.js +35 -2
- package/dist/config/cert.js.map +1 -1
- package/dist/config/cors.js +34 -1
- package/dist/config/cors.js.map +1 -1
- package/dist/dto/common/find-free-table.dto.d.ts +3 -0
- package/dist/dto/common/find-free-table.dto.js +8 -0
- package/dist/dto/common/find-free-table.dto.js.map +1 -0
- package/dist/dto/common/index.d.ts +1 -0
- package/dist/dto/common/index.js +3 -1
- package/dist/dto/common/index.js.map +1 -1
- package/dist/dto/table-game/base/base-table-game-state.dto.d.ts +3 -0
- package/dist/dto/table-game/base/base-table-game-state.dto.js +19 -0
- package/dist/dto/table-game/base/base-table-game-state.dto.js.map +1 -1
- package/dist/dto/table-game/cards/cards-panel.dto.d.ts +2 -1
- package/dist/dto/table-game/cards/cards-panel.dto.js +14 -3
- package/dist/dto/table-game/cards/cards-panel.dto.js.map +1 -1
- package/dist/modules/anti-freeze-system/anti-freeze-system.module.js +4 -1
- package/dist/modules/anti-freeze-system/anti-freeze-system.module.js.map +1 -1
- package/dist/modules/anti-freeze-system/anti-freeze-system.service.js +2 -2
- package/dist/modules/anti-freeze-system/anti-freeze-system.service.js.map +1 -1
- package/dist/modules/base-achievements/base-achievements.module.d.ts +1 -1
- package/dist/modules/base-achievements/base-achievements.module.js +12 -12
- package/dist/modules/base-achievements/base-achievements.module.js.map +1 -1
- package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.d.ts +1 -1
- package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.js.map +1 -1
- package/dist/modules/logger/jp-logger.service.js +34 -1
- package/dist/modules/logger/jp-logger.service.js.map +1 -1
- package/dist/modules/main/main-tables-list-screen.view.js +1 -1
- package/dist/modules/main/main-tables-list-screen.view.js.map +1 -1
- package/dist/modules/main/main.controller.d.ts +2 -2
- package/dist/modules/main/main.controller.js +4 -3
- package/dist/modules/main/main.controller.js.map +1 -1
- package/dist/modules/main/main.module.js +2 -2
- package/dist/modules/main/main.module.js.map +1 -1
- package/dist/modules/main/main.service.d.ts +2 -2
- package/dist/modules/main/main.service.js +11 -5
- package/dist/modules/main/main.service.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
- package/dist/modules/menu/menu-screen.view.d.ts +5 -3
- package/dist/modules/menu/menu-screen.view.js +10 -2
- package/dist/modules/menu/menu-screen.view.js.map +1 -1
- package/dist/modules/menu/menu.module.js +2 -1
- package/dist/modules/menu/menu.module.js.map +1 -1
- package/dist/modules/menu/menu.service.d.ts +3 -2
- package/dist/modules/menu/menu.service.js +8 -4
- package/dist/modules/menu/menu.service.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.d.ts +6 -1
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js +52 -3
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament.controller.d.ts +4 -5
- package/dist/modules/one-table-tournament/one-table-tournament.controller.js +8 -9
- package/dist/modules/one-table-tournament/one-table-tournament.controller.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament.module.js +2 -2
- package/dist/modules/one-table-tournament/one-table-tournament.module.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament.service.d.ts +6 -7
- package/dist/modules/one-table-tournament/one-table-tournament.service.js +10 -17
- package/dist/modules/one-table-tournament/one-table-tournament.service.js.map +1 -1
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.d.ts +2 -1
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +30 -5
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
- package/dist/modules/support/dump.service.js +4 -1
- package/dist/modules/support/dump.service.js.map +1 -1
- package/dist/modules/support/metric.service.js +34 -1
- package/dist/modules/support/metric.service.js.map +1 -1
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js +33 -10
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js.map +1 -1
- package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js +21 -5
- package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/game-table-result.d.ts +3 -2
- package/dist/utils/game-table-result.js +14 -1
- package/dist/utils/game-table-result.js.map +1 -1
- package/dist/views/index.d.ts +1 -0
- package/dist/views/index.js +3 -1
- package/dist/views/index.js.map +1 -1
- package/dist/views/simple-room-conifrm-exit-dialog.view.d.ts +4 -0
- package/dist/views/simple-room-conifrm-exit-dialog.view.js +11 -0
- package/dist/views/simple-room-conifrm-exit-dialog.view.js.map +1 -0
- package/dist/views/tournament-buy-ticket-dialog.view.d.ts +2 -2
- package/dist/views/tournament-buy-ticket-dialog.view.js +1 -1
- package/dist/views/tournament-buy-ticket-dialog.view.js.map +1 -1
- package/package.json +4 -4
- package/src/adapter/base-table-game-state-adapter.ts +23 -5
- package/src/adapter/card-table-game-state-adapter.ts +28 -4
- package/src/dto/common/find-free-table.dto.ts +3 -0
- package/src/dto/common/index.ts +1 -0
- package/src/dto/table-game/base/base-table-game-state.dto.ts +16 -0
- package/src/dto/table-game/cards/cards-panel.dto.ts +12 -3
- package/src/modules/anti-freeze-system/anti-freeze-system.service.ts +3 -3
- package/src/modules/base-achievements/base-achievements.module.ts +12 -10
- package/src/modules/event-bus/events-bus.main-tables.subscribe.service.ts +1 -1
- package/src/modules/main/main-tables-list-screen.view.ts +2 -2
- package/src/modules/main/main.controller.ts +4 -4
- package/src/modules/main/main.module.ts +5 -5
- package/src/modules/main/main.service.ts +20 -10
- package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +1 -1
- package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +2 -1
- package/src/modules/menu/menu-screen.view.ts +33 -11
- package/src/modules/menu/menu.module.ts +3 -2
- package/src/modules/menu/menu.service.ts +5 -2
- package/src/modules/one-table-tournament/one-table-tournament-status-screen.view.ts +76 -10
- package/src/modules/one-table-tournament/one-table-tournament.controller.ts +8 -8
- package/src/modules/one-table-tournament/one-table-tournament.module.ts +2 -2
- package/src/modules/one-table-tournament/one-table-tournament.service.ts +20 -28
- package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +64 -14
- package/src/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.ts +42 -17
- package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts +37 -15
- package/src/utils/game-table-result.ts +18 -3
- package/src/views/index.ts +2 -1
- package/src/views/simple-room-conifrm-exit-dialog.view.ts +21 -0
- 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.
|
|
83
|
+
this.simpleRoomDocumentToRoom(item)
|
|
80
84
|
);
|
|
81
85
|
this.addRoom(newRoom);
|
|
82
86
|
});
|
|
83
87
|
}
|
|
84
88
|
|
|
85
|
-
|
|
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
|
|
21
|
-
import
|
|
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)?.
|
|
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
|
-
|
|
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) => {
|
package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
+
}
|
package/src/views/index.ts
CHANGED
|
@@ -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
|
-
|
|
4
|
+
StandardDialogComponent,
|
|
5
|
+
FullButtonsButtonsComponent,
|
|
6
|
+
TextButtonComponent,
|
|
7
|
+
} from "jp.common.models";
|
|
8
8
|
|
|
9
9
|
export class TournamentBuyTicketDialogView extends UniversalScreenDialogView {
|
|
10
|
-
build() {
|
|
11
|
-
return
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
+
}
|