jp.ms.common.modules 1.0.20 → 1.0.21
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/dto/app-screen/app-screen-dialog.dto.d.ts +10 -0
- package/dist/dto/app-screen/app-screen-dialog.dto.js +81 -0
- package/dist/dto/app-screen/app-screen-dialog.dto.js.map +1 -0
- package/dist/dto/app-screen/app-screen.dto.d.ts +3 -0
- package/dist/dto/app-screen/app-screen.dto.js +12 -0
- package/dist/dto/app-screen/app-screen.dto.js.map +1 -1
- package/dist/dto/common/player-check-state.dto.d.ts +2 -2
- package/dist/dto/common/player-check-state.dto.js.map +1 -1
- package/dist/modules/base-achievements/base-achievements.module.d.ts +15 -0
- package/dist/modules/base-achievements/base-achievements.module.js +138 -0
- package/dist/modules/base-achievements/base-achievements.module.js.map +1 -0
- package/dist/modules/base-achievements/index.d.ts +1 -0
- package/dist/modules/base-achievements/index.js +6 -0
- package/dist/modules/base-achievements/index.js.map +1 -0
- package/dist/modules/event-bus/events-bus.app.subscribe.service.d.ts +7 -0
- package/dist/modules/event-bus/events-bus.app.subscribe.service.js +32 -0
- package/dist/modules/event-bus/events-bus.app.subscribe.service.js.map +1 -0
- package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.d.ts +11 -0
- package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.js +43 -0
- package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.js.map +1 -0
- package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.d.ts +3 -0
- package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.js +18 -0
- package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.js.map +1 -0
- package/dist/modules/event-bus/events-bus.module.d.ts +2 -0
- package/dist/modules/event-bus/events-bus.module.js +35 -0
- package/dist/modules/event-bus/events-bus.module.js.map +1 -0
- package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.d.ts +3 -0
- package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.js +18 -0
- package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.js.map +1 -0
- package/dist/modules/event-bus/events-bus.tournament.subscribe.service.d.ts +7 -0
- package/dist/modules/event-bus/events-bus.tournament.subscribe.service.js +18 -0
- package/dist/modules/event-bus/events-bus.tournament.subscribe.service.js.map +1 -0
- package/dist/modules/event-bus/index.d.ts +5 -0
- package/dist/modules/event-bus/index.js +14 -0
- package/dist/modules/event-bus/index.js.map +1 -0
- package/dist/modules/index.d.ts +2 -0
- package/dist/modules/index.js +6 -1
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/main/main-tables-list-screen.view.d.ts +9 -0
- package/dist/modules/main/main-tables-list-screen.view.js +38 -0
- package/dist/modules/main/main-tables-list-screen.view.js.map +1 -0
- package/dist/modules/main/main.controller.d.ts +4 -2
- package/dist/modules/main/main.controller.js +23 -4
- package/dist/modules/main/main.controller.js.map +1 -1
- package/dist/modules/main/main.module.d.ts +7 -1
- package/dist/modules/main/main.module.js +29 -3
- package/dist/modules/main/main.module.js.map +1 -1
- package/dist/modules/main/main.service.d.ts +10 -3
- package/dist/modules/main/main.service.js +54 -26
- package/dist/modules/main/main.service.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.d.ts +7 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.js +19 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.js.map +1 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.d.ts +7 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.js +18 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.js.map +1 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.d.ts +4 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +35 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.module.d.ts +9 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +22 -2
- package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.d.ts +4 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +34 -10
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
- package/dist/modules/menu/menu-screen.view.d.ts +7 -0
- package/dist/modules/menu/menu-screen.view.js +18 -0
- package/dist/modules/menu/menu-screen.view.js.map +1 -0
- package/dist/modules/menu/menu.service.d.ts +1 -1
- package/dist/modules/menu/menu.service.js +3 -5
- package/dist/modules/menu/menu.service.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.d.ts +7 -0
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js +19 -0
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js.map +1 -0
- package/dist/modules/one-table-tournament/one-table-tournament.controller.d.ts +3 -1
- package/dist/modules/one-table-tournament/one-table-tournament.controller.js +23 -1
- package/dist/modules/one-table-tournament/one-table-tournament.controller.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament.module.d.ts +9 -1
- package/dist/modules/one-table-tournament/one-table-tournament.module.js +22 -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 +3 -1
- package/dist/modules/one-table-tournament/one-table-tournament.service.js +19 -6
- 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 +7 -2
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +20 -8
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.d.ts +7 -2
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js +24 -5
- 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.d.ts +5 -1
- package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js +17 -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/views/index.d.ts +1 -0
- package/dist/views/index.js +6 -0
- package/dist/views/index.js.map +1 -0
- package/dist/views/tournament-buy-ticket-dialog.view.d.ts +4 -0
- package/dist/views/tournament-buy-ticket-dialog.view.js +11 -0
- package/dist/views/tournament-buy-ticket-dialog.view.js.map +1 -0
- package/package.json +7 -7
- package/src/dto/app-screen/app-screen-dialog.dto.ts +57 -0
- package/src/dto/app-screen/app-screen.dto.ts +12 -1
- package/src/dto/common/player-check-state.dto.ts +2 -2
- package/src/modules/base-achievements/base-achievements.module.ts +163 -0
- package/src/modules/base-achievements/index.ts +1 -0
- package/src/modules/event-bus/events-bus.app.subscribe.service.ts +21 -0
- package/src/modules/event-bus/events-bus.main-tables.subscribe.service.ts +34 -0
- package/src/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.ts +6 -0
- package/src/modules/event-bus/events-bus.module.ts +23 -0
- package/src/modules/event-bus/events-bus.one-table-tournament.subscribe.service.ts +6 -0
- package/src/modules/event-bus/events-bus.tournament.subscribe.service.ts +19 -0
- package/src/modules/event-bus/index.ts +5 -0
- package/src/modules/index.ts +2 -1
- package/src/modules/main/main-tables-list-screen.view.ts +107 -0
- package/src/modules/main/main.controller.ts +16 -7
- package/src/modules/main/main.module.ts +30 -5
- package/src/modules/main/main.service.ts +66 -82
- package/src/modules/many-tables-tournament/index.ts +1 -1
- package/src/modules/many-tables-tournament/many-tables-tournament-status-screen.view.ts +59 -0
- package/src/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.ts +53 -0
- package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +36 -11
- package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +21 -4
- package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +68 -73
- package/src/modules/menu/menu-screen.view.ts +48 -0
- package/src/modules/menu/menu.service.ts +14 -32
- package/src/modules/one-table-tournament/one-table-tournament-status-screen.view.ts +64 -0
- package/src/modules/one-table-tournament/one-table-tournament.controller.ts +23 -7
- package/src/modules/one-table-tournament/one-table-tournament.module.ts +21 -4
- package/src/modules/one-table-tournament/one-table-tournament.service.ts +39 -46
- package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +30 -17
- package/src/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.ts +39 -16
- package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts +48 -35
- package/src/views/index.ts +1 -0
- package/src/views/tournament-buy-ticket-dialog.view.ts +21 -0
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { Inject, Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectConnection } from '@nestjs/mongoose';
|
|
3
|
+
import { Connection } from 'mongoose';
|
|
2
4
|
import {
|
|
3
5
|
BaseGameEvent,
|
|
4
6
|
GameMaster,
|
|
5
7
|
MinPlayersStartStrategy,
|
|
6
8
|
SimpleRoom,
|
|
7
9
|
GameRoomConfig,
|
|
10
|
+
RoomUpdateStateEvent,
|
|
11
|
+
UserWonTheGameAppEvent,
|
|
8
12
|
} from 'jp.ms.common.engine';
|
|
9
13
|
import {
|
|
10
|
-
GameResultRepository,
|
|
14
|
+
GameResultRepository,
|
|
15
|
+
SimpleRoomDocument,
|
|
11
16
|
SimpleRoomsRepository,
|
|
12
17
|
UsersRepository
|
|
13
18
|
} from 'jp.db.schemas';
|
|
14
|
-
import { InjectConnection } from '@nestjs/mongoose';
|
|
15
|
-
import { Connection } from 'mongoose';
|
|
16
19
|
|
|
17
20
|
import { JpLoggerService } from '../logger/jp-logger.service';
|
|
18
21
|
import { saveGameTablesResult } from '../../utils/game-table-result';
|
|
22
|
+
import { EventsBusMainTablesSubscribeService } from '../event-bus/events-bus.main-tables.subscribe.service';
|
|
23
|
+
import { EventsBusAppSubscribeService } from '../event-bus/events-bus.app.subscribe.service';
|
|
19
24
|
|
|
20
25
|
import { SIMPLE_ROOMS_MANAGER_OPTIONS } from './simple-rooms-manager.constants';
|
|
21
26
|
import { SimpleRoomsFactoryOptions } from './simple-rooms-manager.interfaces';
|
|
@@ -24,10 +29,12 @@ import { SimpleRoomsFactoryOptions } from './simple-rooms-manager.interfaces';
|
|
|
24
29
|
export class SimpleRoomsManagerService {
|
|
25
30
|
private readonly rooms: Map<string, SimpleRoom>;
|
|
26
31
|
|
|
27
|
-
constructor
|
|
32
|
+
constructor(
|
|
28
33
|
private readonly roomsRepository: SimpleRoomsRepository,
|
|
29
34
|
private readonly usersRepository: UsersRepository,
|
|
30
35
|
private readonly gameResultRepository: GameResultRepository,
|
|
36
|
+
private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
|
|
37
|
+
private readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
|
|
31
38
|
@Inject(SIMPLE_ROOMS_MANAGER_OPTIONS) private readonly options: SimpleRoomsFactoryOptions,
|
|
32
39
|
@InjectConnection() private readonly connection: Connection,
|
|
33
40
|
@Inject() private readonly logger: JpLoggerService,
|
|
@@ -35,49 +42,47 @@ export class SimpleRoomsManagerService {
|
|
|
35
42
|
this.rooms = new Map<string, SimpleRoom>();
|
|
36
43
|
}
|
|
37
44
|
|
|
38
|
-
get gameType
|
|
45
|
+
get gameType() {
|
|
39
46
|
return this.options.configService.get<string>('GAME_TYPE') || '';
|
|
40
47
|
}
|
|
41
48
|
|
|
42
|
-
getRoomById
|
|
49
|
+
getRoomById(roomId: string): SimpleRoom | undefined {
|
|
43
50
|
return this.rooms.get(roomId);
|
|
44
51
|
}
|
|
45
52
|
|
|
46
|
-
getRoomByTableId
|
|
47
|
-
const {roomId} = GameMaster.parseTableId(tableId);
|
|
53
|
+
getRoomByTableId(tableId: string): SimpleRoom | undefined {
|
|
54
|
+
const { roomId } = GameMaster.parseTableId(tableId);
|
|
48
55
|
|
|
49
56
|
return this.getRoomById(roomId);
|
|
50
57
|
}
|
|
51
58
|
|
|
52
|
-
getRooms
|
|
59
|
+
getRooms(): Array<SimpleRoom> {
|
|
53
60
|
return Array.from(this.rooms.values());
|
|
54
61
|
}
|
|
55
62
|
|
|
56
|
-
getTables
|
|
63
|
+
getTables(): Array<GameMaster> {
|
|
57
64
|
return this.getRooms().reduce(
|
|
58
65
|
(result, currentValue) => {
|
|
59
66
|
return [...result, ...currentValue.getMasters()];
|
|
60
|
-
}, []);
|
|
67
|
+
}, [] as Array<GameMaster>);
|
|
61
68
|
}
|
|
62
69
|
|
|
63
|
-
addRoom
|
|
70
|
+
addRoom(room: SimpleRoom) {
|
|
64
71
|
this.rooms.set(room.getId(), room);
|
|
65
72
|
}
|
|
66
73
|
|
|
67
|
-
async hydrateRoomsFromDB
|
|
74
|
+
async hydrateRoomsFromDB() {
|
|
68
75
|
const templates = await this.roomsRepository.findRooms(this.gameType);
|
|
69
76
|
|
|
70
77
|
templates.forEach((item) => {
|
|
71
78
|
const newRoom = this.options.createRoom(
|
|
72
79
|
this.simpleRoomDocumentToTournamentRoom(item)
|
|
73
80
|
);
|
|
74
|
-
|
|
75
|
-
newRoom.addMaster();
|
|
76
81
|
this.addRoom(newRoom);
|
|
77
82
|
});
|
|
78
83
|
}
|
|
79
84
|
|
|
80
|
-
private simpleRoomDocumentToTournamentRoom
|
|
85
|
+
private simpleRoomDocumentToTournamentRoom(room: SimpleRoomDocument): GameRoomConfig {
|
|
81
86
|
const restartGameTimeout = this.options.configService.get<number>('RESTART_GAME_TIMEOUT') || 0;
|
|
82
87
|
const playersTurnTimeout = this.options.configService.get<number>('PLAYERS_TURN_TIMEOUT') || 0;
|
|
83
88
|
|
|
@@ -99,11 +104,12 @@ export class SimpleRoomsManagerService {
|
|
|
99
104
|
startStrategy: new MinPlayersStartStrategy(),
|
|
100
105
|
onRoomEvent: this.handleRoomEvent,
|
|
101
106
|
onRoomTableGameFinished: this.handleRoomTableGameFinished,
|
|
107
|
+
onRoomStatusUpdated: this.handleRoomStatusUpdated,
|
|
102
108
|
} as GameRoomConfig;
|
|
103
109
|
}
|
|
104
110
|
|
|
105
111
|
private handleRoomEvent = (event: BaseGameEvent) => {
|
|
106
|
-
this.logger.log(event.toLog());
|
|
112
|
+
this.logger.log(event.toLog());
|
|
107
113
|
};
|
|
108
114
|
|
|
109
115
|
private handleRoomTableGameFinished = async (master: GameMaster) => {
|
|
@@ -114,5 +120,12 @@ export class SimpleRoomsManagerService {
|
|
|
114
120
|
this.usersRepository,
|
|
115
121
|
true,
|
|
116
122
|
);
|
|
123
|
+
|
|
124
|
+
// TODO: записать разные события для достижений
|
|
125
|
+
this.eventsBusAppSubscribeService.pushNewEvent(new UserWonTheGameAppEvent('123'));
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
private handleRoomStatusUpdated = (event: RoomUpdateStateEvent) => {
|
|
129
|
+
this.eventsBusMainTablesSubscribeService.pushNewRoomState(event);
|
|
117
130
|
};
|
|
118
131
|
}
|
|
@@ -2,9 +2,12 @@ import { Inject, Injectable } from '@nestjs/common';
|
|
|
2
2
|
import {
|
|
3
3
|
BaseGameEvent,
|
|
4
4
|
GameMaster,
|
|
5
|
+
GamePlayer,
|
|
5
6
|
ManyTablesTournamentRoom,
|
|
6
7
|
ManyTablesTournamentRoomConfig,
|
|
7
|
-
NoStartStrategy,
|
|
8
|
+
NoStartStrategy,
|
|
9
|
+
RoomUpdateStateEvent,
|
|
10
|
+
TournamentMaster
|
|
8
11
|
} from 'jp.ms.common.engine';
|
|
9
12
|
import {
|
|
10
13
|
GameResultRepository,
|
|
@@ -23,6 +26,7 @@ import { JpLoggerService } from '../logger';
|
|
|
23
26
|
import { getHours, getMinutes } from '../../utils/date';
|
|
24
27
|
import { ManyTablesTournamentCreateDto } from '../../dto/common/many-tables-tournament-create.dto';
|
|
25
28
|
import { ManyTablesTournamentUpdateDto } from '../../dto/common/many-tables-tournament-update.dto';
|
|
29
|
+
import { EventsBusMainTablesSubscribeService, EventsBusManyTablesTournamentSubscribeService } from '../event-bus';
|
|
26
30
|
|
|
27
31
|
import { TOURNAMENT_MANY_TABLES_ROOMS_MANAGER_OPTIONS } from './tournament-many-tables-rooms-manager.constants';
|
|
28
32
|
import { TournamentManyTablesRoomsFactoryOptions } from './tournament-many-tables-rooms-manager.interfaces';
|
|
@@ -33,10 +37,12 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
33
37
|
private readonly rooms: Map<string, ManyTablesTournamentRoom>;
|
|
34
38
|
private createDailyTournamentJob: Job;
|
|
35
39
|
|
|
36
|
-
constructor
|
|
40
|
+
constructor(
|
|
37
41
|
private readonly tournamentRepository: TournamentManyTablesRoomsRepository,
|
|
38
42
|
private readonly usersRepository: UsersRepository,
|
|
39
43
|
private readonly gameResultRepository: GameResultRepository,
|
|
44
|
+
private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
|
|
45
|
+
private readonly eventsBusManyTablesTournamentSubscribeService: EventsBusManyTablesTournamentSubscribeService,
|
|
40
46
|
@Inject(TOURNAMENT_MANY_TABLES_ROOMS_MANAGER_OPTIONS) private readonly options: TournamentManyTablesRoomsFactoryOptions,
|
|
41
47
|
@InjectConnection() private readonly connection: Connection,
|
|
42
48
|
@Inject() private readonly logger: JpLoggerService,
|
|
@@ -44,36 +50,38 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
44
50
|
this.rooms = new Map<string, ManyTablesTournamentRoom>();
|
|
45
51
|
}
|
|
46
52
|
|
|
47
|
-
get gameType
|
|
53
|
+
get gameType() {
|
|
48
54
|
return this.options.configService.get<string>('GAME_TYPE') || '';
|
|
49
55
|
}
|
|
50
56
|
|
|
51
|
-
getRoomById
|
|
57
|
+
getRoomById(roomId: string): ManyTablesTournamentRoom | undefined {
|
|
52
58
|
return this.rooms.get(roomId);
|
|
53
59
|
}
|
|
54
60
|
|
|
55
|
-
getRoomByTableId
|
|
56
|
-
const {roomId} = GameMaster.parseTableId(tableId);
|
|
61
|
+
getRoomByTableId(tableId: string): ManyTablesTournamentRoom | undefined {
|
|
62
|
+
const { roomId } = GameMaster.parseTableId(tableId);
|
|
57
63
|
|
|
58
64
|
return this.getRoomById(roomId);
|
|
59
65
|
}
|
|
60
66
|
|
|
61
|
-
getRooms
|
|
67
|
+
getRooms(): Array<ManyTablesTournamentRoom> {
|
|
62
68
|
return Array.from(this.rooms.values());
|
|
63
69
|
}
|
|
64
70
|
|
|
65
|
-
getTables
|
|
71
|
+
getTables(): Array<GameMaster> {
|
|
66
72
|
return this.getRooms().reduce(
|
|
67
73
|
(result, currentValue) => {
|
|
68
74
|
return [...result, ...currentValue.getMasters()];
|
|
69
|
-
},
|
|
75
|
+
},
|
|
76
|
+
[] as Array<GameMaster>
|
|
77
|
+
);
|
|
70
78
|
}
|
|
71
79
|
|
|
72
|
-
addRoom
|
|
80
|
+
addRoom(room: ManyTablesTournamentRoom) {
|
|
73
81
|
this.rooms.set(room.getId(), room);
|
|
74
82
|
}
|
|
75
83
|
|
|
76
|
-
async hydrateTournamentsFromDB
|
|
84
|
+
async hydrateTournamentsFromDB() {
|
|
77
85
|
const templates = await this.tournamentRepository.findTournaments(this.gameType);
|
|
78
86
|
templates.forEach((item) => {
|
|
79
87
|
this.addRoom(this.options.createTournamentRoom(
|
|
@@ -82,7 +90,7 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
82
90
|
});
|
|
83
91
|
}
|
|
84
92
|
|
|
85
|
-
async runDailyTournamentJob
|
|
93
|
+
async runDailyTournamentJob() {
|
|
86
94
|
const dailyTournamentScheduleTaskTime = this.options.configService.get<string>('DAILY_TOURNAMENT_SCHEDULE_TASK_TIME');
|
|
87
95
|
const dailyTournamentTime = this.options.configService.get<string>('DAILY_TOURNAMENT_TIME');
|
|
88
96
|
|
|
@@ -96,7 +104,7 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
96
104
|
}
|
|
97
105
|
}
|
|
98
106
|
|
|
99
|
-
async createTournament
|
|
107
|
+
async createTournament(createTournamentDto: ManyTablesTournamentCreateDto) {
|
|
100
108
|
const newTournament = await this.tournamentRepository.createTournament(createTournamentDto);
|
|
101
109
|
|
|
102
110
|
this.addRoom(this.options.createTournamentRoom(
|
|
@@ -104,7 +112,7 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
104
112
|
));
|
|
105
113
|
}
|
|
106
114
|
|
|
107
|
-
async updateTournament
|
|
115
|
+
async updateTournament(tournamentId: string, updateTournamentDto: ManyTablesTournamentUpdateDto) {
|
|
108
116
|
const updatedTournament = await this.tournamentRepository.updateTournament(tournamentId, updateTournamentDto);
|
|
109
117
|
|
|
110
118
|
this.getRoomById(tournamentId)?.getTournamentMaster().cancelTournament();
|
|
@@ -114,11 +122,20 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
114
122
|
));
|
|
115
123
|
}
|
|
116
124
|
|
|
117
|
-
async removeTournament
|
|
125
|
+
async removeTournament(tournamentId: string) {
|
|
118
126
|
await this.tournamentRepository.removeTournament(tournamentId);
|
|
119
127
|
}
|
|
120
128
|
|
|
121
|
-
|
|
129
|
+
async buyTicket(tournamentId: string, player: GamePlayer) {
|
|
130
|
+
// TODO списать деньги у игрока
|
|
131
|
+
await this.tournamentRepository.addPlayerToParticipants(tournamentId, {
|
|
132
|
+
playerId: player.id,
|
|
133
|
+
playerAvatarUrl: player.avatarUrl,
|
|
134
|
+
playerName: player.avatarUrl,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
private manyTablesTournamentDocumentToTournamentRoom(tournamentDocument: TournamentManyTablesRoomDocument): ManyTablesTournamentRoomConfig {
|
|
122
139
|
const restartGameTimeout = this.options.configService.get<number>('RESTART_GAME_TIMEOUT') || 0;
|
|
123
140
|
const playersTurnTimeout = this.options.configService.get<number>('PLAYERS_TURN_TIMEOUT') || 0;
|
|
124
141
|
const minPlayersForMergeTables = this.options.configService.get<number>('TOURNAMENT_MANY_TABLES_MIN_PLAYERS_FOR_MERGE_TABLES') || 0;
|
|
@@ -146,6 +163,7 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
146
163
|
onTournamentRoomStarted: this.handleTournamentRoomStarted,
|
|
147
164
|
onTournamentRoomFinished: this.handleTournamentRoomFinished,
|
|
148
165
|
onTournamentRoomCancelled: this.handleTournamentRoomCancelled,
|
|
166
|
+
onRoomStatusUpdated: this.handleRoomStatusUpdated,
|
|
149
167
|
tournamentPrizeTable: this.options.tournamentPrizeTable,
|
|
150
168
|
tournamentInitialStatus: tournamentDocument.status,
|
|
151
169
|
} as ManyTablesTournamentRoomConfig;
|
|
@@ -182,6 +200,11 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
182
200
|
);
|
|
183
201
|
}
|
|
184
202
|
|
|
203
|
+
private handleRoomStatusUpdated = async (event: RoomUpdateStateEvent) => {
|
|
204
|
+
this.eventsBusMainTablesSubscribeService.pushNewRoomState(event)
|
|
205
|
+
this.eventsBusManyTablesTournamentSubscribeService.pushNewRoomState(event);
|
|
206
|
+
}
|
|
207
|
+
|
|
185
208
|
private createDailyTournament = async (dailyTournamentTime: string) => {
|
|
186
209
|
const hour = getHours(dailyTournamentTime);
|
|
187
210
|
const minutes = getMinutes(dailyTournamentTime);
|
package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts
CHANGED
|
@@ -3,8 +3,10 @@ import {
|
|
|
3
3
|
BaseGameEvent,
|
|
4
4
|
GameMaster,
|
|
5
5
|
NoStartStrategy,
|
|
6
|
-
OneTableTournamentRoom,
|
|
7
|
-
|
|
6
|
+
OneTableTournamentRoom,
|
|
7
|
+
RoomUpdateStateEvent,
|
|
8
|
+
TournamentMaster,
|
|
9
|
+
TournamentRoomConfig,
|
|
8
10
|
} from 'jp.ms.common.engine';
|
|
9
11
|
import {
|
|
10
12
|
GameResultRepository,
|
|
@@ -17,6 +19,7 @@ import { Connection } from 'mongoose';
|
|
|
17
19
|
|
|
18
20
|
import { JpLoggerService } from '../logger/jp-logger.service';
|
|
19
21
|
import { saveGameTablesResult, saveTournamentResult } from '../../utils/game-table-result';
|
|
22
|
+
import { EventsBusMainTablesSubscribeService, EventsBusOneTableTournamentSubscribeService } from '../event-bus';
|
|
20
23
|
|
|
21
24
|
import { TOURNAMENT_ONE_TABLE_ROOMS_MANAGER_OPTIONS } from './tournament-one-table-rooms-manager.constants';
|
|
22
25
|
import { TournamentOneTableRoomsFactoryOptions } from './tournament-one-table-rooms-manager.interfaces';
|
|
@@ -25,63 +28,67 @@ import { TournamentOneTableRoomsFactoryOptions } from './tournament-one-table-ro
|
|
|
25
28
|
export class TournamentOneTableRoomsManagerService {
|
|
26
29
|
private readonly rooms: Map<string, OneTableTournamentRoom>;
|
|
27
30
|
|
|
28
|
-
constructor
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
constructor(
|
|
32
|
+
private readonly tournamentRepository: TournamentOneTableRoomsRepository,
|
|
33
|
+
private readonly usersRepository: UsersRepository,
|
|
34
|
+
private readonly gameResultRepository: GameResultRepository,
|
|
35
|
+
private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
|
|
36
|
+
private readonly eventsBusOneTableTournamentSubscribeService: EventsBusOneTableTournamentSubscribeService,
|
|
37
|
+
@Inject(TOURNAMENT_ONE_TABLE_ROOMS_MANAGER_OPTIONS) private readonly options: TournamentOneTableRoomsFactoryOptions,
|
|
38
|
+
@InjectConnection() private readonly connection: Connection,
|
|
39
|
+
@Inject() private readonly logger: JpLoggerService,
|
|
35
40
|
) {
|
|
36
41
|
this.rooms = new Map<string, OneTableTournamentRoom>();
|
|
37
42
|
}
|
|
38
43
|
|
|
39
|
-
get gameType
|
|
44
|
+
get gameType() {
|
|
40
45
|
return this.options.configService.get<string>('GAME_TYPE') || '';
|
|
41
46
|
}
|
|
42
47
|
|
|
43
|
-
getRoomById
|
|
48
|
+
getRoomById(roomId: string): OneTableTournamentRoom | undefined {
|
|
44
49
|
return this.rooms.get(roomId);
|
|
45
50
|
}
|
|
46
51
|
|
|
47
|
-
getRoomByTableId
|
|
52
|
+
getRoomByTableId(tableId: string): OneTableTournamentRoom | undefined {
|
|
48
53
|
const { roomId } = GameMaster.parseTableId(tableId);
|
|
49
54
|
|
|
50
55
|
return this.getRoomById(roomId);
|
|
51
56
|
}
|
|
52
57
|
|
|
53
|
-
getRooms
|
|
58
|
+
getRooms(): Array<OneTableTournamentRoom> {
|
|
54
59
|
return Array.from(this.rooms.values());
|
|
55
60
|
}
|
|
56
61
|
|
|
57
|
-
getTables
|
|
62
|
+
getTables(): Array<GameMaster> {
|
|
58
63
|
return this.getRooms().reduce(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
(result, currentValue) => {
|
|
65
|
+
return [...result, ...currentValue.getMasters()];
|
|
66
|
+
},
|
|
67
|
+
[] as Array<GameMaster>
|
|
68
|
+
);
|
|
62
69
|
}
|
|
63
70
|
|
|
64
|
-
addRoom
|
|
71
|
+
addRoom(room: OneTableTournamentRoom) {
|
|
65
72
|
this.rooms.set(room.getId(), room);
|
|
66
73
|
}
|
|
67
74
|
|
|
68
|
-
async createMasterTournament
|
|
75
|
+
async createMasterTournament() {
|
|
69
76
|
const waitingTournament = await this.tournamentRepository.findWaitingTournament(this.gameType);
|
|
70
77
|
if (!waitingTournament) {
|
|
71
78
|
await this.tournamentRepository.createTournamentFromMasterTemplate(this.gameType);
|
|
72
79
|
}
|
|
73
80
|
}
|
|
74
81
|
|
|
75
|
-
async hydrateTournamentsFromDB
|
|
82
|
+
async hydrateTournamentsFromDB() {
|
|
76
83
|
const templates = await this.tournamentRepository.findTournaments(this.gameType);
|
|
77
84
|
templates.forEach((item) => {
|
|
78
85
|
this.addRoom(this.options.createTournamentRoom(
|
|
79
|
-
|
|
86
|
+
this.oneTableTournamentDocumentToTournamentRoom(item)
|
|
80
87
|
));
|
|
81
88
|
});
|
|
82
89
|
}
|
|
83
90
|
|
|
84
|
-
private oneTableTournamentDocumentToTournamentRoom
|
|
91
|
+
private oneTableTournamentDocumentToTournamentRoom(tournamentDocument: TournamentOneTableRoomDocument): TournamentRoomConfig {
|
|
85
92
|
const restartGameTimeout = this.options.configService.get<number>('RESTART_GAME_TIMEOUT') || 0;
|
|
86
93
|
const playersTurnTimeout = this.options.configService.get<number>('PLAYERS_TURN_TIMEOUT') || 0;
|
|
87
94
|
|
|
@@ -106,6 +113,7 @@ export class TournamentOneTableRoomsManagerService {
|
|
|
106
113
|
onTournamentRoomStarted: this.handleTournamentRoomStarted,
|
|
107
114
|
onTournamentRoomFinished: this.handleTournamentRoomFinished,
|
|
108
115
|
onTournamentRoomCancelled: this.handleTournamentRoomCancelled,
|
|
116
|
+
onRoomStatusUpdated: this.handleRoomStatusUpdated,
|
|
109
117
|
tournamentPrizeTable: this.options.tournamentPrizeTable,
|
|
110
118
|
tournamentInitialStatus: tournamentDocument.status,
|
|
111
119
|
} as TournamentRoomConfig;
|
|
@@ -117,11 +125,11 @@ export class TournamentOneTableRoomsManagerService {
|
|
|
117
125
|
|
|
118
126
|
private handleRoomTableGameFinished = async (master: GameMaster) => {
|
|
119
127
|
await saveGameTablesResult(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
128
|
+
master,
|
|
129
|
+
this.connection,
|
|
130
|
+
this.gameResultRepository,
|
|
131
|
+
this.usersRepository,
|
|
132
|
+
false,
|
|
125
133
|
);
|
|
126
134
|
};
|
|
127
135
|
|
|
@@ -131,14 +139,14 @@ export class TournamentOneTableRoomsManagerService {
|
|
|
131
139
|
|
|
132
140
|
try {
|
|
133
141
|
await this.tournamentRepository.startTournament(
|
|
134
|
-
|
|
135
|
-
|
|
142
|
+
master.getTournamentId(),
|
|
143
|
+
master.getRoom().getParticipants(),
|
|
136
144
|
);
|
|
137
145
|
const newTournament = await this.tournamentRepository.createTournamentFromMasterTemplate(
|
|
138
|
-
|
|
146
|
+
master.getRoom().getGameType()
|
|
139
147
|
);
|
|
140
148
|
this.addRoom(this.options.createTournamentRoom(
|
|
141
|
-
|
|
149
|
+
this.oneTableTournamentDocumentToTournamentRoom(newTournament)
|
|
142
150
|
));
|
|
143
151
|
|
|
144
152
|
await session.commitTransaction();
|
|
@@ -156,10 +164,15 @@ export class TournamentOneTableRoomsManagerService {
|
|
|
156
164
|
|
|
157
165
|
private handleTournamentRoomFinished = async (master: TournamentMaster) => {
|
|
158
166
|
await saveTournamentResult(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
167
|
+
master,
|
|
168
|
+
this.connection,
|
|
169
|
+
this.tournamentRepository,
|
|
170
|
+
this.usersRepository,
|
|
163
171
|
);
|
|
164
172
|
}
|
|
173
|
+
|
|
174
|
+
private handleRoomStatusUpdated = async (event: RoomUpdateStateEvent) => {
|
|
175
|
+
this.eventsBusMainTablesSubscribeService.pushNewRoomState(event);
|
|
176
|
+
this.eventsBusOneTableTournamentSubscribeService.pushNewRoomState(event);
|
|
177
|
+
}
|
|
165
178
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TournamentBuyTicketDialogView } from './tournament-buy-ticket-dialog.view';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AppScreenSectionButton,
|
|
3
|
+
AppScreenSectionButtons,
|
|
4
|
+
UniversalScreenDialogView,
|
|
5
|
+
AppScreenDialog,
|
|
6
|
+
AppScreenDialogIdEnum,
|
|
7
|
+
} from "jp.common.models";
|
|
8
|
+
|
|
9
|
+
export class TournamentBuyTicketDialogView extends UniversalScreenDialogView {
|
|
10
|
+
build() {
|
|
11
|
+
return AppScreenDialog.CreateStandardDialog(
|
|
12
|
+
AppScreenDialogIdEnum.DIALOG_TOURNAMENT_BUY_TICKET,
|
|
13
|
+
this.localeService.t('common.rooms.screen.buyTicket.title', { lang: this.lang }),
|
|
14
|
+
this.localeService.t('common.rooms.screen.buyTicket.description', { lang: this.lang }),
|
|
15
|
+
AppScreenSectionButtons.CreateFullButtonSection(
|
|
16
|
+
AppScreenSectionButton.CreateTextButton('Ok'),
|
|
17
|
+
AppScreenSectionButton.CreateTextButton('Cancel'),
|
|
18
|
+
)
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
}
|