aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-12-06 21:15:48 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-12-06 21:15:48 +0100
commitdb12bae0d9764c2825130dd766b9a1fe10956044 (patch)
tree5dda757773089dedbebfa302720b08730b1609d9
parent530ae608a0df5f9f961bd4bbc3e5eda9ddeb3bc0 (diff)
attempt to fall back if server connection closes unexpectedly
-rw-r--r--server_conn.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/server_conn.go b/server_conn.go
index 034b5f9..ec3164f 100644
--- a/server_conn.go
+++ b/server_conn.go
@@ -104,6 +104,7 @@ func handleSrv(sc *ServerConn) {
}
}()
+RecvLoop:
for {
pkt, err := sc.Recv()
if err != nil {
@@ -115,6 +116,21 @@ func handleSrv(sc *ServerConn) {
}
if sc.client() != nil {
+ if errors.Is(sc.WhyClosed(), rudp.ErrTimedOut) {
+ sc.client().SendChatMsg("Server connection timed out, triggering fallback.")
+ } else {
+ sc.client().SendChatMsg("Server connection lost, triggering fallback.")
+ }
+
+ for _, srvName := range FallbackServers(sc.name) {
+ if err := sc.client().HopRaw(srvName); err != nil {
+ sc.client().Log("<-", err)
+ sc.client().SendChatMsg("Could not connect to "+srvName+", continuing fallback. Error:", err.Error())
+ }
+
+ break RecvLoop
+ }
+
ack, _ := sc.client().SendCmd(&mt.ToCltKick{
Reason: mt.Custom,
Custom: "Server connection closed unexpectedly.",