From 33b3255a3870e5b8c68dfc2fb4556b2204578988 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 23 Dec 2024 11:31:17 -0800 Subject: [PATCH] try-catch on websocket message to prevent crashing server --- src/server/GameServer.ts | 24 ++++++++------ src/server/Server.ts | 68 +++++++++++++++++++++------------------- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index 6dbed548f..ccb3da1ab 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -76,17 +76,21 @@ export class GameServer { this.allClients.set(client.clientID, 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(`${this.id}: 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(`${this.id}: 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 handline websocket request in game server: ${error}`) } }) client.ws.on('close', () => { diff --git a/src/server/Server.ts b/src/server/Server.ts index 3804e0076..0ae07394e 100644 --- a/src/server/Server.ts +++ b/src/server/Server.ts @@ -107,40 +107,44 @@ 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({ - logKey: 'websocket_msg', - msg: 'server received websocket message', - data: clientMsg, - severity: 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, - clientMsg.persistentID, - ip, - clientMsg.username, - ws - ), - clientMsg.gameID, - clientMsg.lastTurn - ) - } - if (clientMsg.type == "log") { + try { + const clientMsg: ClientMessage = ClientMessageSchema.parse(JSON.parse(message)) slog({ - logKey: "client_console_log", - msg: clientMsg.log, - severity: clientMsg.severity, - clientID: clientMsg.clientID, - gameID: clientMsg.gameID, - persistentID: clientMsg.persistentID, + logKey: 'websocket_msg', + msg: 'server received websocket message', + data: clientMsg, + severity: 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, + clientMsg.persistentID, + ip, + clientMsg.username, + ws + ), + clientMsg.gameID, + clientMsg.lastTurn + ) + } + if (clientMsg.type == "log") { + slog({ + logKey: "client_console_log", + msg: clientMsg.log, + severity: clientMsg.severity, + clientID: clientMsg.clientID, + gameID: clientMsg.gameID, + persistentID: clientMsg.persistentID, + }) + } + } catch (error) { + console.log(`errror handling websocket message: ${error}`) } }) });