From 7ce21cdddcd072835ed360091cd3cf3fb559369f Mon Sep 17 00:00:00 2001 From: gsemaj Date: Wed, 27 Apr 2022 20:50:23 -0400 Subject: [PATCH] Don't perform lookup for obvious IPs and account for async This old version of Node forces us to use callbacks, so I had to rearrange some code to ensure the client only launches after the resolution is complete --- assets/js/serverselector.js | 56 ++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/assets/js/serverselector.js b/assets/js/serverselector.js index f48802c..5a3d0e9 100644 --- a/assets/js/serverselector.js +++ b/assets/js/serverselector.js @@ -156,6 +156,20 @@ function setGameInfo(serverUUID) { window.asseturl = gameversion.url; // gameclient.js needs to access this remotefs.writeFileSync(__dirname+"\\assetInfo.php", asseturl); + if (result.hasOwnProperty('endpoint')) { + var httpendpoint = result.endpoint.replace("https://", "http://") + remotefs.writeFileSync(__dirname+"\\rankurl.txt", httpendpoint+"getranks"); + // Write these out too + remotefs.writeFileSync(__dirname+"\\sponsor.php", httpendpoint+"upsell/sponsor.png"); + remotefs.writeFileSync(__dirname+"\\images.php", httpendpoint+"upsell/"); + } else { + // Remove/default the endpoint related stuff, this server won't be using it + if (remotefs.existsSync(__dirname+"\\rankurl.txt")) { + remotefs.unlinkSync(__dirname+"\\rankurl.txt"); + remotefs.writeFileSync(__dirname+"\\sponsor.php", "assets/img/welcome.png"); + remotefs.writeFileSync(__dirname+"\\images.php", "assets/img/"); + } + } // Server address parsing var address; @@ -169,34 +183,27 @@ function setGameInfo(serverUUID) { port = 23000 // default } - // DNS resolution. there is no synchronous version unfortunately - // if the resolution fails, keep the original entry (includes plain IP cases) - var ip = address; - dns.resolve4(address, function(err, res) { + // DNS resolution. there is no synchronous version for some stupid reason + if(!address.match(/^[0-9.]+$/)) dns.resolve4(address, function(err, res) { if(!err) { - ip = res[0]; - console.log("Resolved " + address + " to " + ip); - } - - var fullAddress = ip + ":" + port; - console.log("Will connect to " + fullAddress); - remotefs.writeFileSync(__dirname+"\\loginInfo.php", fullAddress); - - if (result.hasOwnProperty('endpoint')) { - var httpendpoint = result.endpoint.replace("https://", "http://") - remotefs.writeFileSync(__dirname+"\\rankurl.txt", httpendpoint+"getranks"); - // Write these out too - remotefs.writeFileSync(__dirname+"\\sponsor.php", httpendpoint+"upsell/sponsor.png"); - remotefs.writeFileSync(__dirname+"\\images.php", httpendpoint+"upsell/"); + console.log("Resolved " + address + " to " + res[0]); + address = res[0]; } else { - // Remove/default the endpoint related stuff, this server won't be using it - if (remotefs.existsSync(__dirname+"\\rankurl.txt")) { - remotefs.unlinkSync(__dirname+"\\rankurl.txt"); - remotefs.writeFileSync(__dirname+"\\sponsor.php", "assets/img/welcome.png"); - remotefs.writeFileSync(__dirname+"\\images.php", "assets/img/"); - } + console.log("Err: " + err.code); } + prepConnection(address, port); }); + else { + console.log(address + " is an IP; skipping DNS lookup"); + prepConnection(address, port); + } +} + +function prepConnection(address, port) { + var full = address + ":" + port; + console.log("Will connect to " + full); + remotefs.writeFileSync(__dirname+"\\loginInfo.php", full); + launchGame(); } // Returns the UUID of the server with the selected background color. @@ -216,7 +223,6 @@ function connectToServer() { setTimeout(function(){ $('body,html').css('pointer-events',''); setGameInfo(getSelectedServer()); - launchGame(); }, 200); }); }