jp.ms.common.modules 1.0.20 → 1.0.22

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 (142) hide show
  1. package/dist/dto/app-screen/app-screen-dialog.dto.d.ts +12 -0
  2. package/dist/dto/app-screen/app-screen-dialog.dto.js +90 -0
  3. package/dist/dto/app-screen/app-screen-dialog.dto.js.map +1 -0
  4. package/dist/dto/app-screen/app-screen-field-list-item.dto.d.ts +7 -0
  5. package/dist/dto/app-screen/app-screen-field-list-item.dto.js +63 -0
  6. package/dist/dto/app-screen/app-screen-field-list-item.dto.js.map +1 -0
  7. package/dist/dto/app-screen/app-screen-field.dto.d.ts +10 -0
  8. package/dist/dto/app-screen/app-screen-field.dto.js +83 -0
  9. package/dist/dto/app-screen/app-screen-field.dto.js.map +1 -0
  10. package/dist/dto/app-screen/app-screen.dto.d.ts +3 -0
  11. package/dist/dto/app-screen/app-screen.dto.js +12 -0
  12. package/dist/dto/app-screen/app-screen.dto.js.map +1 -1
  13. package/dist/dto/common/player-check-state.dto.d.ts +2 -2
  14. package/dist/dto/common/player-check-state.dto.js.map +1 -1
  15. package/dist/modules/base-achievements/base-achievements.module.d.ts +15 -0
  16. package/dist/modules/base-achievements/base-achievements.module.js +138 -0
  17. package/dist/modules/base-achievements/base-achievements.module.js.map +1 -0
  18. package/dist/modules/base-achievements/index.d.ts +1 -0
  19. package/dist/modules/base-achievements/index.js +6 -0
  20. package/dist/modules/base-achievements/index.js.map +1 -0
  21. package/dist/modules/event-bus/events-bus.app.subscribe.service.d.ts +7 -0
  22. package/dist/modules/event-bus/events-bus.app.subscribe.service.js +32 -0
  23. package/dist/modules/event-bus/events-bus.app.subscribe.service.js.map +1 -0
  24. package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.d.ts +11 -0
  25. package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.js +43 -0
  26. package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.js.map +1 -0
  27. package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.d.ts +3 -0
  28. package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.js +18 -0
  29. package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.js.map +1 -0
  30. package/dist/modules/event-bus/events-bus.module.d.ts +2 -0
  31. package/dist/modules/event-bus/events-bus.module.js +35 -0
  32. package/dist/modules/event-bus/events-bus.module.js.map +1 -0
  33. package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.d.ts +3 -0
  34. package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.js +18 -0
  35. package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.js.map +1 -0
  36. package/dist/modules/event-bus/events-bus.tournament.subscribe.service.d.ts +7 -0
  37. package/dist/modules/event-bus/events-bus.tournament.subscribe.service.js +18 -0
  38. package/dist/modules/event-bus/events-bus.tournament.subscribe.service.js.map +1 -0
  39. package/dist/modules/event-bus/index.d.ts +5 -0
  40. package/dist/modules/event-bus/index.js +14 -0
  41. package/dist/modules/event-bus/index.js.map +1 -0
  42. package/dist/modules/index.d.ts +2 -0
  43. package/dist/modules/index.js +6 -1
  44. package/dist/modules/index.js.map +1 -1
  45. package/dist/modules/main/main-tables-list-screen.view.d.ts +9 -0
  46. package/dist/modules/main/main-tables-list-screen.view.js +38 -0
  47. package/dist/modules/main/main-tables-list-screen.view.js.map +1 -0
  48. package/dist/modules/main/main.controller.d.ts +4 -2
  49. package/dist/modules/main/main.controller.js +23 -4
  50. package/dist/modules/main/main.controller.js.map +1 -1
  51. package/dist/modules/main/main.module.d.ts +7 -1
  52. package/dist/modules/main/main.module.js +29 -3
  53. package/dist/modules/main/main.module.js.map +1 -1
  54. package/dist/modules/main/main.service.d.ts +10 -3
  55. package/dist/modules/main/main.service.js +54 -26
  56. package/dist/modules/main/main.service.js.map +1 -1
  57. package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.d.ts +7 -0
  58. package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.js +19 -0
  59. package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.js.map +1 -0
  60. package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.d.ts +7 -0
  61. package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.js +18 -0
  62. package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.js.map +1 -0
  63. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.d.ts +4 -1
  64. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +35 -1
  65. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
  66. package/dist/modules/many-tables-tournament/many-tables-tournament.module.d.ts +9 -1
  67. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +22 -2
  68. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
  69. package/dist/modules/many-tables-tournament/many-tables-tournament.service.d.ts +4 -1
  70. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +34 -10
  71. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
  72. package/dist/modules/menu/menu-screen.view.d.ts +7 -0
  73. package/dist/modules/menu/menu-screen.view.js +18 -0
  74. package/dist/modules/menu/menu-screen.view.js.map +1 -0
  75. package/dist/modules/menu/menu.service.d.ts +1 -1
  76. package/dist/modules/menu/menu.service.js +3 -5
  77. package/dist/modules/menu/menu.service.js.map +1 -1
  78. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.d.ts +7 -0
  79. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js +19 -0
  80. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js.map +1 -0
  81. package/dist/modules/one-table-tournament/one-table-tournament.controller.d.ts +3 -1
  82. package/dist/modules/one-table-tournament/one-table-tournament.controller.js +23 -1
  83. package/dist/modules/one-table-tournament/one-table-tournament.controller.js.map +1 -1
  84. package/dist/modules/one-table-tournament/one-table-tournament.module.d.ts +9 -1
  85. package/dist/modules/one-table-tournament/one-table-tournament.module.js +22 -2
  86. package/dist/modules/one-table-tournament/one-table-tournament.module.js.map +1 -1
  87. package/dist/modules/one-table-tournament/one-table-tournament.service.d.ts +3 -1
  88. package/dist/modules/one-table-tournament/one-table-tournament.service.js +19 -6
  89. package/dist/modules/one-table-tournament/one-table-tournament.service.js.map +1 -1
  90. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.d.ts +7 -2
  91. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +20 -8
  92. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
  93. package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.d.ts +7 -2
  94. package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js +24 -5
  95. package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js.map +1 -1
  96. package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.d.ts +5 -1
  97. package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js +17 -5
  98. package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js.map +1 -1
  99. package/dist/tsconfig.tsbuildinfo +1 -1
  100. package/dist/views/index.d.ts +1 -0
  101. package/dist/views/index.js +6 -0
  102. package/dist/views/index.js.map +1 -0
  103. package/dist/views/tournament-buy-ticket-dialog.view.d.ts +4 -0
  104. package/dist/views/tournament-buy-ticket-dialog.view.js +11 -0
  105. package/dist/views/tournament-buy-ticket-dialog.view.js.map +1 -0
  106. package/package.json +7 -7
  107. package/src/dto/app-screen/app-screen-dialog.dto.ts +64 -0
  108. package/src/dto/app-screen/app-screen-field-list-item.dto.ts +42 -0
  109. package/src/dto/app-screen/app-screen-field.dto.ts +59 -0
  110. package/src/dto/app-screen/app-screen.dto.ts +12 -1
  111. package/src/dto/common/player-check-state.dto.ts +2 -2
  112. package/src/modules/base-achievements/base-achievements.module.ts +163 -0
  113. package/src/modules/base-achievements/index.ts +1 -0
  114. package/src/modules/event-bus/events-bus.app.subscribe.service.ts +21 -0
  115. package/src/modules/event-bus/events-bus.main-tables.subscribe.service.ts +34 -0
  116. package/src/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.ts +6 -0
  117. package/src/modules/event-bus/events-bus.module.ts +23 -0
  118. package/src/modules/event-bus/events-bus.one-table-tournament.subscribe.service.ts +6 -0
  119. package/src/modules/event-bus/events-bus.tournament.subscribe.service.ts +19 -0
  120. package/src/modules/event-bus/index.ts +5 -0
  121. package/src/modules/index.ts +2 -1
  122. package/src/modules/main/main-tables-list-screen.view.ts +107 -0
  123. package/src/modules/main/main.controller.ts +16 -7
  124. package/src/modules/main/main.module.ts +30 -5
  125. package/src/modules/main/main.service.ts +66 -82
  126. package/src/modules/many-tables-tournament/index.ts +1 -1
  127. package/src/modules/many-tables-tournament/many-tables-tournament-status-screen.view.ts +59 -0
  128. package/src/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.ts +53 -0
  129. package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +36 -11
  130. package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +21 -4
  131. package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +68 -73
  132. package/src/modules/menu/menu-screen.view.ts +48 -0
  133. package/src/modules/menu/menu.service.ts +14 -32
  134. package/src/modules/one-table-tournament/one-table-tournament-status-screen.view.ts +65 -0
  135. package/src/modules/one-table-tournament/one-table-tournament.controller.ts +23 -7
  136. package/src/modules/one-table-tournament/one-table-tournament.module.ts +21 -4
  137. package/src/modules/one-table-tournament/one-table-tournament.service.ts +39 -46
  138. package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +30 -17
  139. package/src/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.ts +39 -16
  140. package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts +48 -35
  141. package/src/views/index.ts +1 -0
  142. 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, SimpleRoomDocument,
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 (roomId: string): SimpleRoom | undefined {
49
+ getRoomById(roomId: string): SimpleRoom | undefined {
43
50
  return this.rooms.get(roomId);
44
51
  }
45
52
 
46
- getRoomByTableId (tableId: string): SimpleRoom | undefined {
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 (): Array<SimpleRoom> {
59
+ getRooms(): Array<SimpleRoom> {
53
60
  return Array.from(this.rooms.values());
54
61
  }
55
62
 
56
- getTables (): Array<GameMaster> {
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 (room: SimpleRoom) {
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 (room: SimpleRoomDocument): GameRoomConfig {
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, TournamentMaster
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 (roomId: string): ManyTablesTournamentRoom | undefined {
57
+ getRoomById(roomId: string): ManyTablesTournamentRoom | undefined {
52
58
  return this.rooms.get(roomId);
53
59
  }
54
60
 
55
- getRoomByTableId (tableId: string): ManyTablesTournamentRoom | undefined {
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 (): Array<ManyTablesTournamentRoom> {
67
+ getRooms(): Array<ManyTablesTournamentRoom> {
62
68
  return Array.from(this.rooms.values());
63
69
  }
64
70
 
65
- getTables (): Array<GameMaster> {
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 (room: ManyTablesTournamentRoom) {
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 (createTournamentDto: ManyTablesTournamentCreateDto) {
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 (tournamentId: string, updateTournamentDto: ManyTablesTournamentUpdateDto) {
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 (tournamentId: string) {
125
+ async removeTournament(tournamentId: string) {
118
126
  await this.tournamentRepository.removeTournament(tournamentId);
119
127
  }
120
128
 
121
- private manyTablesTournamentDocumentToTournamentRoom (tournamentDocument: TournamentManyTablesRoomDocument): ManyTablesTournamentRoomConfig {
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);
@@ -3,8 +3,10 @@ import {
3
3
  BaseGameEvent,
4
4
  GameMaster,
5
5
  NoStartStrategy,
6
- OneTableTournamentRoom, TournamentMaster,
7
- TournamentRoomConfig
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
- private readonly tournamentRepository: TournamentOneTableRoomsRepository,
30
- private readonly usersRepository: UsersRepository,
31
- private readonly gameResultRepository: GameResultRepository,
32
- @Inject(TOURNAMENT_ONE_TABLE_ROOMS_MANAGER_OPTIONS) private readonly options: TournamentOneTableRoomsFactoryOptions,
33
- @InjectConnection() private readonly connection: Connection,
34
- @Inject() private readonly logger: JpLoggerService,
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 (roomId: string): OneTableTournamentRoom | undefined {
48
+ getRoomById(roomId: string): OneTableTournamentRoom | undefined {
44
49
  return this.rooms.get(roomId);
45
50
  }
46
51
 
47
- getRoomByTableId (tableId: string): OneTableTournamentRoom | undefined {
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 (): Array<OneTableTournamentRoom> {
58
+ getRooms(): Array<OneTableTournamentRoom> {
54
59
  return Array.from(this.rooms.values());
55
60
  }
56
61
 
57
- getTables (): Array<GameMaster> {
62
+ getTables(): Array<GameMaster> {
58
63
  return this.getRooms().reduce(
59
- (result, currentValue) => {
60
- return [...result, ...currentValue.getMasters()];
61
- }, []);
64
+ (result, currentValue) => {
65
+ return [...result, ...currentValue.getMasters()];
66
+ },
67
+ [] as Array<GameMaster>
68
+ );
62
69
  }
63
70
 
64
- addRoom (room: OneTableTournamentRoom) {
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
- this.oneTableTournamentDocumentToTournamentRoom(item)
86
+ this.oneTableTournamentDocumentToTournamentRoom(item)
80
87
  ));
81
88
  });
82
89
  }
83
90
 
84
- private oneTableTournamentDocumentToTournamentRoom (tournamentDocument: TournamentOneTableRoomDocument): TournamentRoomConfig {
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
- master,
121
- this.connection,
122
- this.gameResultRepository,
123
- this.usersRepository,
124
- false,
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
- master.getTournamentId(),
135
- master.getRoom().getParticipants(),
142
+ master.getTournamentId(),
143
+ master.getRoom().getParticipants(),
136
144
  );
137
145
  const newTournament = await this.tournamentRepository.createTournamentFromMasterTemplate(
138
- master.getRoom().getGameType()
146
+ master.getRoom().getGameType()
139
147
  );
140
148
  this.addRoom(this.options.createTournamentRoom(
141
- this.oneTableTournamentDocumentToTournamentRoom(newTournament)
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
- master,
160
- this.connection,
161
- this.tournamentRepository,
162
- this.usersRepository,
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
+ }