From 3fc4c6830a0ebbfcbae41e491f5ba36cfdcabdfc Mon Sep 17 00:00:00 2001 From: toasterparty Date: Wed, 20 Dec 2023 14:28:21 -0800 Subject: [PATCH] Better login error handling --- .../ArchipelagoClient/ArchipelagoClient.cs | 65 +++++++++++++------ OC2Modding/OC2Modding.csproj.epic | 2 +- OC2Modding/OC2Modding.csproj.steam | 2 +- 3 files changed, 48 insertions(+), 21 deletions(-) diff --git a/OC2Modding/ArchipelagoClient/ArchipelagoClient.cs b/OC2Modding/ArchipelagoClient/ArchipelagoClient.cs index 50fa311..7f95f1b 100644 --- a/OC2Modding/ArchipelagoClient/ArchipelagoClient.cs +++ b/OC2Modding/ArchipelagoClient/ArchipelagoClient.cs @@ -414,6 +414,7 @@ private static LoginResult ConnectionAttempt(string server, string user, string } cachedConnectionResult = null; + if (!OC2Helpers.HasLeaderboardScores()) { OC2Helpers.BuildLeaderboardScores(false); @@ -430,6 +431,8 @@ private static LoginResult ConnectionAttempt(string server, string user, string // Derrive the full uri, accounting for every possible variation of user stupidity serverUrl = server.ToLower(); + var wsFirst = serverUrl.StartsWith("ws://"); + // remove the protocol if (serverUrl.Contains("://")) { @@ -452,27 +455,51 @@ private static LoginResult ConnectionAttempt(string server, string user, string password = pass; LoginResult result = null; - foreach(string prefix in new string[] {"wss://", "ws://"}) + + string[] prefixes; + if (wsFirst) + { + prefixes = new string[] {"ws://", "wss://", ""}; + } + else + { + prefixes = new string[] {"wss://", "ws://", ""}; + } + + foreach(string prefix in prefixes) { - var url = prefix + serverUrl; - var uri = new Uri(url); - session = ArchipelagoSessionFactory.CreateSession(uri); - - OC2Modding.Log.LogInfo($"Connecting to {url}"); - - result = session.TryConnectAndLogin( - "Overcooked! 2", - userName, - REMOTE_INVENTORY ? ItemsHandlingFlags.AllItems : ItemsHandlingFlags.RemoteItems, - MinimumProtocolVersion, - tags: new string[0], - uuid: null, - password: password - ); - - if (result is LoginSuccessful) + try { - break; + var url = prefix + serverUrl; + var uri = new Uri(url); + session = ArchipelagoSessionFactory.CreateSession(uri); + + OC2Modding.Log.LogInfo($"Connecting to {url}"); + + var tempResult = session.TryConnectAndLogin( + "Overcooked! 2", + userName, + REMOTE_INVENTORY ? ItemsHandlingFlags.AllItems : ItemsHandlingFlags.RemoteItems, + MinimumProtocolVersion, + tags: new string[0], + uuid: null, + password: password + ); + + if (tempResult is LoginSuccessful) + { + result = tempResult; + break; + } + } + catch (Exception e) + { + OC2Modding.Log.LogWarning($"{e.Message}"); + + if (result == null) + { + result = new LoginFailure(e.GetBaseException().Message); + } } } diff --git a/OC2Modding/OC2Modding.csproj.epic b/OC2Modding/OC2Modding.csproj.epic index 6eae4f8..f241d62 100644 --- a/OC2Modding/OC2Modding.csproj.epic +++ b/OC2Modding/OC2Modding.csproj.epic @@ -3,7 +3,7 @@ net46 com.github.toasterparty.oc2modding.epic Overcooked! 2 Modding - 1.9.2 + 1.9.4 true latest diff --git a/OC2Modding/OC2Modding.csproj.steam b/OC2Modding/OC2Modding.csproj.steam index 109bca5..75da15c 100644 --- a/OC2Modding/OC2Modding.csproj.steam +++ b/OC2Modding/OC2Modding.csproj.steam @@ -3,7 +3,7 @@ net35 com.github.toasterparty.oc2modding.steam Overcooked! 2 Modding - 1.9.2 + 1.9.4 true latest