From 642b877ab0fd38150a5b053fd9c3b0c39b4ad9e3 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 10:40:42 +0100 Subject: [PATCH 1/6] Update JoinDialog.java --- core/src/mindustry/ui/dialogs/JoinDialog.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index f3d200f08a..db62efef65 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -8,6 +8,7 @@ import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; +import arc.util.Timer.*; import arc.util.serialization.*; import mindustry.*; import mindustry.core.*; @@ -33,6 +34,10 @@ public class JoinDialog extends BaseDialog{ int refreshes; boolean showHidden; + String lastIp; + int lastPort; + Task ping; + public JoinDialog(){ super("@joingame"); @@ -445,13 +450,29 @@ public class JoinDialog extends BaseDialog{ logic.reset(); net.reset(); Vars.netClient.beginConnecting(); - net.connect(ip, port, () -> { + net.connect(lastIp = ip, lastPort = port, () -> { hide(); add.hide(); }); }); } + public void reconnect(){ + ui.loadfrag.show("@reconnecting"); + + this.ping = Timer.schedule(() -> { + net.pingHost(lastIp, lastPort, host -> { + ping.cancel(); + connect(lastIp, lastPort); + }, exception -> {}); + }, 1, 1); + + ui.loadfrag.setButton(() -> { + ui.loadfrag.hide(); + ping.cancel(); + }); + } + void safeConnect(String ip, int port, int version){ if(version != Version.build && Version.build != -1 && version != -1){ ui.showInfo("[scarlet]" + (version > Version.build ? KickReason.clientOutdated : KickReason.serverOutdated).toString() + "\n[]" + From f5e06cca54d0a253f2fc5175e56359bf8e30df14 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 10:41:41 +0100 Subject: [PATCH 2/6] Update NetClient.java --- core/src/mindustry/core/NetClient.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 841e7e42a7..85bbfd6f95 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -257,6 +257,11 @@ public class NetClient implements ApplicationListener{ public static void kick(KickReason reason){ netClient.disconnectQuietly(); logic.reset(); + + if(reason == KickReason.serverRestarting){ + ui.join.reconnect(); + return; + } if(!reason.quiet){ if(reason.extraText() != null){ From b002d8b4469f01fceaf55f8ccd7e32cc935f4404 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 10:42:13 +0100 Subject: [PATCH 3/6] Update bundle.properties --- core/assets/bundles/bundle.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 8149f4ff3c..068068ff94 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -230,6 +230,7 @@ disconnect.timeout = Timed out. disconnect.data = Failed to load world data! cantconnect = Unable to join game ([accent]{0}[]). connecting = [accent]Connecting... +reconnecting = [accent]Reconnecting... connecting.data = [accent]Loading world data... server.port = Port: server.addressinuse = Address already in use! From ff20928becee5d2c76954a4527659f023b2e4bed Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 16:49:36 +0100 Subject: [PATCH 4/6] Anukify reconnect logic --- core/src/mindustry/ui/dialogs/JoinDialog.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index db62efef65..62cc2e9391 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -458,18 +458,21 @@ public class JoinDialog extends BaseDialog{ } public void reconnect(){ + if(lastIp.isEmpty()) return; ui.loadfrag.show("@reconnecting"); - this.ping = Timer.schedule(() -> { + ping = Timer.schedule(() -> { net.pingHost(lastIp, lastPort, host -> { + if(ping == null) return; ping.cancel(); + ping = null; connect(lastIp, lastPort); }, exception -> {}); }, 1, 1); ui.loadfrag.setButton(() -> { ui.loadfrag.hide(); - ping.cancel(); + if(ping != null) ping.cancel(); }); } From 3d6390a76a975eae281876045d616ce32c4b3af9 Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 16:51:57 +0100 Subject: [PATCH 5/6] Set the ping to null when canceling manually as well --- core/src/mindustry/ui/dialogs/JoinDialog.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 62cc2e9391..155945fc0f 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -469,10 +469,12 @@ public class JoinDialog extends BaseDialog{ connect(lastIp, lastPort); }, exception -> {}); }, 1, 1); - + ui.loadfrag.setButton(() -> { ui.loadfrag.hide(); - if(ping != null) ping.cancel(); + if(ping == null) return; + ping.cancel(); + ping = null; }); } From f26b3358ef95731b4d89bcbbcbb0590365b2b7fe Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Wed, 25 Nov 2020 17:08:03 +0100 Subject: [PATCH 6/6] Update core/src/mindustry/ui/dialogs/JoinDialog.java Co-authored-by: Anuken --- core/src/mindustry/ui/dialogs/JoinDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 155945fc0f..fe5ea1bdaf 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -458,7 +458,7 @@ public class JoinDialog extends BaseDialog{ } public void reconnect(){ - if(lastIp.isEmpty()) return; + if(lastIp == null || lastIp.isEmpty()) return; ui.loadfrag.show("@reconnecting"); ping = Timer.schedule(() -> {