From e9c9ca8d349932e86fe84fa80410b6b750635629 Mon Sep 17 00:00:00 2001 From: Shobhit Pathak Date: Wed, 11 Oct 2023 19:29:14 +0530 Subject: [PATCH] Added error handling --- modules/rcon.js | 71 ++++++++++++++++++++++++++----------------------- routes/game.js | 20 ++++++++------ 2 files changed, 50 insertions(+), 41 deletions(-) diff --git a/modules/rcon.js b/modules/rcon.js index d83eb08..b126648 100644 --- a/modules/rcon.js +++ b/modules/rcon.js @@ -50,41 +50,46 @@ class RconManager { } async connect(server_id, server) { - let rcon_connection = null; - rcon_connection = new Rcon({ host: server.serverIP, port: server.serverPort, timeout: 5000 }); - console.log("CONNECTING RCON", server_id, server.serverIP, server.serverPort); - - // Set a timeout for the authentication process - const authenticationTimeout = setTimeout(async () => { - console.error('RCON Authentication timed out', server_id); - try { - await this.disconnect_rcon(server_id); // Disconnect the RCON connection - console.log('Timed out, disconnected RCON', server_id); - } catch (error) { - console.error('Error disconnecting RCON', server_id, error); - } - }, 10000); - try { - await rcon_connection.authenticate(server.rconPassword); - clearTimeout(authenticationTimeout); - console.log('RCON Authenticated', server_id, server.serverIP, server.serverPort); - } catch (error) { - clearTimeout(authenticationTimeout); - console.error('RCON Authentication failed', server_id, error); - // Handle the authentication error here as needed. - } + let rcon_connection = null; + rcon_connection = new Rcon({ host: server.serverIP, port: server.serverPort, timeout: 5000 }); + console.log("CONNECTING RCON", server_id, server.serverIP, server.serverPort); + + // Set a timeout for the authentication process + const authenticationTimeout = setTimeout(async () => { + console.error('RCON Authentication timed out', server_id); + try { + await this.disconnect_rcon(server_id); // Disconnect the RCON connection + console.log('Timed out, disconnected RCON', server_id); + } catch (error) { + console.error('Error disconnecting RCON', server_id, error); + } + }, 10000); - this.rcons[server_id] = rcon_connection; - this.details[server_id] = { - host: server.serverIP, - port: server.serverPort, - rcon_password: server.rconPassword, - connected: rcon_connection.isConnected(), - authenticated: rcon_connection.isAuthenticated() - }; - this.details[server_id].heartbeat_interval = setInterval(async () => this.send_heartbeat(server_id, server), 5000); - return; + try { + await rcon_connection.authenticate(server.rconPassword); + clearTimeout(authenticationTimeout); + console.log('RCON Authenticated', server_id, server.serverIP, server.serverPort); + } catch (error) { + clearTimeout(authenticationTimeout); + console.error('RCON Authentication failed', server_id, error); + } + + this.rcons[server_id] = rcon_connection; + this.details[server_id] = { + host: server.serverIP, + port: server.serverPort, + rcon_password: server.rconPassword, + connected: rcon_connection.isConnected(), + authenticated: rcon_connection.isAuthenticated() + }; + if (rcon_connection.isConnected() && rcon_connection.isAuthenticated()) { + this.details[server_id].heartbeat_interval = setInterval(async () => this.send_heartbeat(server_id, server), 5000); + } + return; + } catch (error) { + console.error('[CONNECTION ERROR]', error); + } } async disconnect_rcon(server_id) { diff --git a/routes/game.js b/routes/game.js index 51d0bdb..17d7d8a 100644 --- a/routes/game.js +++ b/routes/game.js @@ -282,14 +282,18 @@ function execute_cfg_on_server(server_id, cfg_path) { const exported_lines = splitByByteLength(data, 512) function execute_next_item(item) { - if (item < exported_lines.length) { - console.log(exported_lines[item]); - rcon.rcons[server_id].execute(exported_lines[item]); - - // Wait for 200ms before moving to the next iteration - setTimeout(() => { - execute_next_item(item + 1); - }, 200); + try { + if (item < exported_lines.length) { + console.log(exported_lines[item]); + rcon.rcons[server_id].execute(exported_lines[item]); + + // Wait for 200ms before moving to the next iteration + setTimeout(() => { + execute_next_item(item + 1); + }, 200); + } + } catch (error) { + console.log("[execute_next_item] Error:", error) } } execute_next_item(0);