From f980be49fe1b2ed7af431442c2a2566790691335 Mon Sep 17 00:00:00 2001 From: evanpelle Date: Mon, 16 Jun 2025 16:10:15 -0700 Subject: [PATCH] fix websockets --- src/server/GameServer.ts | 4 +- src/server/Worker.ts | 96 ++++++++++++++++++++-------------------- 2 files changed, 48 insertions(+), 52 deletions(-) diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index 57fced752..eea67b2f5 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -182,7 +182,7 @@ export class GameServer { this.allClients.set(client.clientID, client); - client.ws.removeAllListeners("message"); + client.ws.removeAllListeners(); client.ws.on( "message", gatekeeper.wsHandler(client.ip, async (message: string) => { @@ -240,7 +240,6 @@ export class GameServer { } }), ); - client.ws.removeAllListeners("close"); client.ws.on("close", () => { this.log.info("client disconnected", { clientID: client.clientID, @@ -250,7 +249,6 @@ export class GameServer { (c) => c.clientID !== client.clientID, ); }); - client.ws.removeAllListeners("error"); client.ws.on("error", (error: Error) => { if ((error as any).code === "WS_ERR_UNEXPECTED_RSV_1") { client.ws.close(1002); diff --git a/src/server/Worker.ts b/src/server/Worker.ts index 5bee6b603..4783fafd1 100644 --- a/src/server/Worker.ts +++ b/src/server/Worker.ts @@ -305,59 +305,57 @@ export function startWorker() { } const clientMsg = parsed.data; - if (clientMsg.type === "join") { - // Verify this worker should handle this game - const expectedWorkerId = config.workerIndex(clientMsg.gameID); - if (expectedWorkerId !== workerId) { - log.warn( - `Worker mismatch: Game ${clientMsg.gameID} should be on worker ${expectedWorkerId}, but this is worker ${workerId}`, - ); + // Verify this worker should handle this game + const expectedWorkerId = config.workerIndex(clientMsg.gameID); + if (expectedWorkerId !== workerId) { + log.warn( + `Worker mismatch: Game ${clientMsg.gameID} should be on worker ${expectedWorkerId}, but this is worker ${workerId}`, + ); + return; + } + + const { persistentId, claims } = await verifyClientToken( + clientMsg.token, + config, + ); + + let roles: string[] | undefined; + + // Check user roles + if (claims !== null) { + const result = await getUserMe(clientMsg.token, config); + if (result === false) { + log.warn("Token is not valid", claims); return; } + roles = result.player.roles; + } - const { persistentId, claims } = await verifyClientToken( - clientMsg.token, - config, + // TODO: Validate client settings based on roles + + // Create client and add to game + const client = new Client( + clientMsg.clientID, + persistentId, + claims, + roles, + ip, + clientMsg.username, + ws, + clientMsg.flag, + ); + + const wasFound = gm.addClient( + client, + clientMsg.gameID, + clientMsg.lastTurn, + ); + + if (!wasFound) { + log.info( + `game ${clientMsg.gameID} not found on worker ${workerId}`, ); - - let roles: string[] | undefined; - - // Check user roles - if (claims !== null) { - const result = await getUserMe(clientMsg.token, config); - if (result === false) { - log.warn("Token is not valid", claims); - return; - } - roles = result.player.roles; - } - - // TODO: Validate client settings based on roles - - // Create client and add to game - const client = new Client( - clientMsg.clientID, - persistentId, - claims, - roles, - ip, - clientMsg.username, - ws, - clientMsg.flag, - ); - - const wasFound = gm.addClient( - client, - clientMsg.gameID, - clientMsg.lastTurn, - ); - - if (!wasFound) { - log.info( - `game ${clientMsg.gameID} not found on worker ${workerId}`, - ); - // Handle game not found case - } + // Handle game not found case } // Handle other message types