From 6e881cbfaf18ec0d3a0bd9f4fdf711b7531b035b Mon Sep 17 00:00:00 2001 From: gsemaj Date: Wed, 27 Apr 2022 13:16:24 -0400 Subject: [PATCH 1/3] Connect to default port 23000 if port not specified --- assets/js/serverselector.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/assets/js/serverselector.js b/assets/js/serverselector.js index ec5e606..11495f8 100644 --- a/assets/js/serverselector.js +++ b/assets/js/serverselector.js @@ -155,7 +155,19 @@ function setGameInfo(serverUUID) { window.asseturl = gameversion.url; // gameclient.js needs to access this remotefs.writeFileSync(__dirname+"\\assetInfo.php", asseturl); - remotefs.writeFileSync(__dirname+"\\loginInfo.php", result.ip); + + // Server address parsing + var address; + var port; + var sepPos = result.ip.indexOf(":"); + if (sepPos > -1) { + address = result.ip.substr(0, sepPos); + port = result.ip.substr(sepPos + 1); + } else { + address = result.ip + port = 23000 // default + } + remotefs.writeFileSync(__dirname+"\\loginInfo.php", address + ":" + port); if (result.hasOwnProperty('endpoint')) { var httpendpoint = result.endpoint.replace("https://", "http://") From 8d6e546628b0f33cba7de3dc34cd843143f7ef15 Mon Sep 17 00:00:00 2001 From: gsemaj Date: Wed, 27 Apr 2022 13:44:08 -0400 Subject: [PATCH 2/3] Add automatic DNS resolution for server addresses --- assets/js/serverselector.js | 42 ++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/assets/js/serverselector.js b/assets/js/serverselector.js index 11495f8..f48802c 100644 --- a/assets/js/serverselector.js +++ b/assets/js/serverselector.js @@ -1,5 +1,6 @@ var remote = require("remote"); var remotefs = remote.require('fs-extra'); +var dns = remote.require('dns'); var userdir = remote.require('app').getPath('userData'); var versionarray @@ -167,22 +168,35 @@ function setGameInfo(serverUUID) { address = result.ip port = 23000 // default } - remotefs.writeFileSync(__dirname+"\\loginInfo.php", address + ":" + port); - 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/"); + // 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) { + 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/"); + } 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/"); + } + } + }); } // Returns the UUID of the server with the selected background color. From 7ce21cdddcd072835ed360091cd3cf3fb559369f Mon Sep 17 00:00:00 2001 From: gsemaj Date: Wed, 27 Apr 2022 20:50:23 -0400 Subject: [PATCH 3/3] 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); }); }