From 9ef0898676716b763ba264ac7e79201de1eb7889 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 23 Dec 2024 11:24:13 -0800 Subject: [PATCH] catch validation error message to prevent server from crashing --- src/server/GameServer.ts | 24 ++++++++++++++---------- src/server/Server.ts | 21 ++++++++++++--------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index b3a11fe47..8656575d9 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -70,17 +70,21 @@ export class GameServer { this.allClients.set(client.id, client) client.ws.on('message', (message: string) => { - const clientMsg: ClientMessage = ClientMessageSchema.parse(JSON.parse(message)) - if (clientMsg.type == "intent") { - if (clientMsg.gameID == this.id) { - this.addIntent(clientMsg.intent) - } else { - console.warn(`client ${clientMsg.clientID} sent to wrong game`) + try { + const clientMsg: ClientMessage = ClientMessageSchema.parse(JSON.parse(message)) + if (clientMsg.type == "intent") { + if (clientMsg.gameID == this.id) { + this.addIntent(clientMsg.intent) + } else { + console.warn(`client ${clientMsg.clientID} sent to wrong game`) + } } - } - if (clientMsg.type == "ping") { - this.lastPingUpdate = Date.now() - client.lastPing = Date.now() + if (clientMsg.type == "ping") { + this.lastPingUpdate = Date.now() + client.lastPing = Date.now() + } + } catch (error) { + console.log(`error handling message in game server: ${error}`) } }) client.ws.on('close', () => { diff --git a/src/server/Server.ts b/src/server/Server.ts index d48995a32..8542b6a0a 100644 --- a/src/server/Server.ts +++ b/src/server/Server.ts @@ -94,17 +94,20 @@ app.get('/private_lobby/:id', (req, res) => { wss.on('connection', (ws, req) => { ws.on('message', (message: string) => { - const clientMsg: ClientMessage = ClientMessageSchema.parse(JSON.parse(message)) - slog('websocket_msg', 'server received websocket message', clientMsg, LogSeverity.DEBUG) - if (clientMsg.type == "join") { - const forwarded = req.headers['x-forwarded-for'] - const ip = Array.isArray(forwarded) - ? forwarded[0] // Get the first IP if it's an array - : forwarded || req.socket.remoteAddress; + try { + const clientMsg: ClientMessage = ClientMessageSchema.parse(JSON.parse(message)) + slog('websocket_msg', 'server received websocket message', clientMsg, LogSeverity.DEBUG) + if (clientMsg.type == "join") { + const forwarded = req.headers['x-forwarded-for'] + const ip = Array.isArray(forwarded) + ? forwarded[0] // Get the first IP if it's an array + : forwarded || req.socket.remoteAddress; - gm.addClient(new Client(clientMsg.clientID, ip, ws), clientMsg.gameID, clientMsg.lastTurn) + gm.addClient(new Client(clientMsg.clientID, ip, ws), clientMsg.gameID, clientMsg.lastTurn) + } + } catch (error) { + console.log(`error handling websocket connection: ${error}`) } - // TODO: send error message }) });