Added error handling

This commit is contained in:
Shobhit Pathak 2023-10-11 19:29:14 +05:30
parent dbd77dde34
commit e9c9ca8d34
2 changed files with 50 additions and 41 deletions

View File

@ -50,41 +50,46 @@ class RconManager {
} }
async connect(server_id, server) { 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 { try {
await rcon_connection.authenticate(server.rconPassword); let rcon_connection = null;
clearTimeout(authenticationTimeout); rcon_connection = new Rcon({ host: server.serverIP, port: server.serverPort, timeout: 5000 });
console.log('RCON Authenticated', server_id, server.serverIP, server.serverPort); console.log("CONNECTING RCON", server_id, server.serverIP, server.serverPort);
} catch (error) {
clearTimeout(authenticationTimeout); // Set a timeout for the authentication process
console.error('RCON Authentication failed', server_id, error); const authenticationTimeout = setTimeout(async () => {
// Handle the authentication error here as needed. 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; try {
this.details[server_id] = { await rcon_connection.authenticate(server.rconPassword);
host: server.serverIP, clearTimeout(authenticationTimeout);
port: server.serverPort, console.log('RCON Authenticated', server_id, server.serverIP, server.serverPort);
rcon_password: server.rconPassword, } catch (error) {
connected: rcon_connection.isConnected(), clearTimeout(authenticationTimeout);
authenticated: rcon_connection.isAuthenticated() console.error('RCON Authentication failed', server_id, error);
}; }
this.details[server_id].heartbeat_interval = setInterval(async () => this.send_heartbeat(server_id, server), 5000);
return; 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) { async disconnect_rcon(server_id) {

View File

@ -282,14 +282,18 @@ function execute_cfg_on_server(server_id, cfg_path) {
const exported_lines = splitByByteLength(data, 512) const exported_lines = splitByByteLength(data, 512)
function execute_next_item(item) { function execute_next_item(item) {
if (item < exported_lines.length) { try {
console.log(exported_lines[item]); if (item < exported_lines.length) {
rcon.rcons[server_id].execute(exported_lines[item]); console.log(exported_lines[item]);
rcon.rcons[server_id].execute(exported_lines[item]);
// Wait for 200ms before moving to the next iteration
setTimeout(() => { // Wait for 200ms before moving to the next iteration
execute_next_item(item + 1); setTimeout(() => {
}, 200); execute_next_item(item + 1);
}, 200);
}
} catch (error) {
console.log("[execute_next_item] Error:", error)
} }
} }
execute_next_item(0); execute_next_item(0);