From 77276a5ea93369abf9814dbb06799d8872c463be Mon Sep 17 00:00:00 2001 From: VariableVince <24507472+VariableVince@users.noreply.github.com> Date: Sat, 4 Apr 2026 00:25:02 +0200 Subject: [PATCH] maybe better readable --- src/server/MasterLobbyService.ts | 53 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/server/MasterLobbyService.ts b/src/server/MasterLobbyService.ts index 2f6a7d255..6cc8511ce 100644 --- a/src/server/MasterLobbyService.ts +++ b/src/server/MasterLobbyService.ts @@ -1,7 +1,7 @@ import { Worker } from "cluster"; import winston from "winston"; import { ServerConfig } from "../core/configuration/Config"; -import { GameConfig, PublicGameInfo, PublicGameType } from "../core/Schemas"; +import { PublicGameInfo, PublicGameType } from "../core/Schemas"; import { generateID } from "../core/Util"; import { MasterCreateGame, @@ -132,31 +132,24 @@ export class MasterLobbyService { private async maybeScheduleLobby() { const lobbiesByType = this.getAllLobbies(); - const lobbyTypes = Object.keys(lobbiesByType) as PublicGameType[]; - const inUseMaps = new Set(); - const inUseNumTeams = new Set(); - const inUseMaxPlayers = new Set(); + const activeConfigs = Object.values(lobbiesByType) + .map((lobbies) => lobbies[0]?.gameConfig) + .filter((c) => c !== undefined); - const recordInUse = (config: GameConfig) => { - inUseMaps.add(config.gameMap); - if (config.playerTeams !== undefined) { - inUseNumTeams.add(String(config.playerTeams)); - } - if (config.maxPlayers !== undefined) { - inUseMaxPlayers.add(config.maxPlayers); - } - }; + const activeMaps = new Set(activeConfigs.map((c) => c.gameMap)); + const activeNumTeams = new Set( + activeConfigs + .filter((c) => c.playerTeams !== undefined) + .map((c) => String(c.playerTeams)), + ); + const activeMaxPlayers = new Set( + activeConfigs + .filter((c) => c.maxPlayers !== undefined) + .map((c) => c.maxPlayers), + ); - for (const type of lobbyTypes) { - const lobbies = lobbiesByType[type]; - const nextLobby = lobbies[0]; - if (nextLobby && nextLobby.gameConfig) { - recordInUse(nextLobby.gameConfig); - } - } - - for (const type of lobbyTypes) { + for (const type of Object.keys(lobbiesByType) as PublicGameType[]) { const lobbies = lobbiesByType[type]; // Always ensure the next lobby has a timer, even if we already have 2+ @@ -177,23 +170,29 @@ export class MasterLobbyService { } const gameConfig = await this.playlist.gameConfigNotInUse(type, (c) => { - if (inUseMaps.has(c.gameMap)) return false; + if (activeMaps.has(c.gameMap)) return false; if ( c.playerTeams !== undefined && - inUseNumTeams.has(String(c.playerTeams)) + activeNumTeams.has(String(c.playerTeams)) ) { return false; } - if (c.maxPlayers !== undefined && inUseMaxPlayers.has(c.maxPlayers)) { + if (c.maxPlayers !== undefined && activeMaxPlayers.has(c.maxPlayers)) { return false; } return true; }); - recordInUse(gameConfig); + activeMaps.add(gameConfig.gameMap); + if (gameConfig.playerTeams !== undefined) { + activeNumTeams.add(String(gameConfig.playerTeams)); + } + if (gameConfig.maxPlayers !== undefined) { + activeMaxPlayers.add(gameConfig.maxPlayers); + } this.sendMessageToWorker({ type: "createGame",