1
1
import { CommandHandler , EventBus , ICommandHandler , QueryBus } from '@nestjs/cqrs' ;
2
2
import { Inject , Logger } from '@nestjs/common' ;
3
3
import { FindGameServerCommand } from 'gameserver/command/FindGameServer/find-game-server.command' ;
4
- import { GameServerRepository } from 'gameserver/repository/game-server.repository' ;
5
4
import { GameSessionCreatedEvent } from 'gateway/events/game-session-created.event' ;
6
5
import { GameServerSessionRepository } from 'gameserver/repository/game-server-session.repository' ;
7
6
import { GameServerSessionEntity } from 'gameserver/model/game-server-session.entity' ;
@@ -30,6 +29,7 @@ import { GetUserInfoQueryResult } from 'gateway/queries/GetUserInfo/get-user-inf
30
29
import { MatchEntity } from 'gameserver/model/match.entity' ;
31
30
import { MatchmakingMode } from 'gateway/shared-types/matchmaking-mode' ;
32
31
import { Dota_GameMode } from 'gateway/shared-types/dota-game-mode' ;
32
+ import { MatchmakingModeMappingEntity } from 'gameserver/model/matchmaking-mode-mapping.entity' ;
33
33
34
34
@CommandHandler ( FindGameServerCommand )
35
35
export class FindGameServerHandler
@@ -41,7 +41,6 @@ export class FindGameServerHandler
41
41
> ( ) ;
42
42
43
43
constructor (
44
- private readonly gsRepository : GameServerRepository ,
45
44
private readonly gsSessionRepository : GameServerSessionRepository ,
46
45
@InjectRepository ( GameServerSessionEntity )
47
46
private readonly gameServerSessionModelRepository : Repository <
@@ -52,6 +51,8 @@ export class FindGameServerHandler
52
51
private readonly matchEntityRepository : Repository < MatchEntity > ,
53
52
private readonly qbus : QueryBus ,
54
53
@Inject ( 'QueryCore' ) private readonly redisEventQueue : ClientProxy ,
54
+ @InjectRepository ( MatchmakingModeMappingEntity )
55
+ private readonly matchmakingModeMappingEntityRepository : Repository < MatchmakingModeMappingEntity > ,
55
56
) {
56
57
this . pendingGamesPool
57
58
. pipe ( asyncMap ( cmd => this . findServer ( cmd ) , 1 ) )
@@ -62,31 +63,18 @@ export class FindGameServerHandler
62
63
this . pendingGamesPool . next ( command ) ;
63
64
}
64
65
65
- private getGameModeForMatchMode ( mode : MatchmakingMode ) : Dota_GameMode {
66
- switch ( mode ) {
67
- case MatchmakingMode . RANKED :
68
- return Dota_GameMode . RANKED_AP ;
69
- case MatchmakingMode . UNRANKED :
70
- return Dota_GameMode . RANKED_AP ;
71
- case MatchmakingMode . SOLOMID :
72
- return Dota_GameMode . SOLOMID ;
73
- case MatchmakingMode . DIRETIDE :
74
- return Dota_GameMode . DIRETIDE ;
75
- case MatchmakingMode . GREEVILING :
76
- return Dota_GameMode . GREEVILING ;
77
- case MatchmakingMode . ABILITY_DRAFT :
78
- return Dota_GameMode . ABILITY_DRAFT ;
79
- case MatchmakingMode . TOURNAMENT :
80
- return Dota_GameMode . CAPTAINS_MODE ;
81
- case MatchmakingMode . BOTS :
82
- return Dota_GameMode . ALLPICK ;
83
- case MatchmakingMode . HIGHROOM :
84
- return Dota_GameMode . RANKED_AP ;
85
- case MatchmakingMode . TOURNAMENT_SOLOMID :
86
- return Dota_GameMode . SOLOMID ;
87
- case MatchmakingMode . CAPTAINS_MODE :
88
- return Dota_GameMode . CAPTAINS_MODE ;
66
+ private async getGameModeForMatchMode ( mode : MatchmakingMode ) : Promise < Dota_GameMode > {
67
+ const mapping = await this . matchmakingModeMappingEntityRepository . findOne ( {
68
+ where : {
69
+ lobbyType : mode
70
+ }
71
+ } ) ;
72
+
73
+ if ( ! mapping ) {
74
+ this . logger . error ( `No mapping found for lobby type ${ mode } ! Returning all pick` ) ;
75
+ return Dota_GameMode . ALLPICK ;
89
76
}
77
+ return mapping . dotaGameMode ;
90
78
}
91
79
92
80
private async extendMatchInfo ( matchInfo : MatchInfo ) : Promise < GSMatchInfo > {
@@ -107,7 +95,7 @@ export class FindGameServerHandler
107
95
108
96
return new GSMatchInfo (
109
97
matchInfo . mode ,
110
- this . getGameModeForMatchMode ( matchInfo . mode ) ,
98
+ await this . getGameModeForMatchMode ( matchInfo . mode ) ,
111
99
matchInfo . roomId ,
112
100
players ,
113
101
matchInfo . version ,
0 commit comments