diff --git a/ArchiSteamFarm/Steam/Bot.cs b/ArchiSteamFarm/Steam/Bot.cs index b8cfd72d58d08..c50b7938497fa 100644 --- a/ArchiSteamFarm/Steam/Bot.cs +++ b/ArchiSteamFarm/Steam/Bot.cs @@ -1648,7 +1648,7 @@ internal async Task RefreshWebSession(bool force = false) { if (string.IsNullOrEmpty(RefreshToken)) { // Without refresh token we can't get fresh access tokens, relog needed - await Connect(true).ConfigureAwait(false); + await Reconnect().ConfigureAwait(false); return false; } @@ -1663,7 +1663,7 @@ internal async Task RefreshWebSession(bool force = false) { BotDatabase.RefreshToken = RefreshToken = null; - await Connect(true).ConfigureAwait(false); + await Reconnect().ConfigureAwait(false); return false; } @@ -1674,7 +1674,7 @@ internal async Task RefreshWebSession(bool force = false) { ArchiLogger.LogGenericWarning(Strings.FormatWarningFailedWithError(nameof(SteamClient.Authentication.GenerateAccessTokenForAppAsync))); - await Connect(true).ConfigureAwait(false); + await Reconnect().ConfigureAwait(false); return false; } @@ -1690,7 +1690,7 @@ internal async Task RefreshWebSession(bool force = false) { // We got the tokens, but failed to authorize? Purge them just to be sure and reconnect BotDatabase.AccessToken = AccessToken = null; - await Connect(true).ConfigureAwait(false); + await Reconnect().ConfigureAwait(false); return false; } finally { @@ -2025,14 +2025,14 @@ internal static IOrderedDictionary ValidateGamesToRedeemInBackground(IOrderedDic return gamesToRedeemInBackground; } - private async Task Connect(bool force = false) { - if (!force && (!KeepRunning || SteamClient.IsConnected)) { + private async Task Connect() { + if (!KeepRunning || SteamClient.IsConnected) { return; } await LimitLoginRequestsAsync().ConfigureAwait(false); - if (!force && (!KeepRunning || SteamClient.IsConnected)) { + if (!KeepRunning || SteamClient.IsConnected) { return; } @@ -2079,11 +2079,11 @@ private async Task Destroy(bool force = false) { await PluginsCore.OnBotDestroy(this).ConfigureAwait(false); } - private void Disconnect() { + private void Disconnect(bool reconnect = false) { StopConnectionFailureTimer(); LastLogOnResult = EResult.OK; - ReconnectOnUserInitiated = false; + ReconnectOnUserInitiated = reconnect; SteamClient.Disconnect(); } @@ -2324,7 +2324,8 @@ private async void HeartBeat(object? state = null) { if (++HeartBeatFailures >= (byte) Math.Ceiling(connectionTimeout / 10.0)) { HeartBeatFailures = byte.MaxValue; ArchiLogger.LogGenericWarning(Strings.BotConnectionLost); - Utilities.InBackground(() => Connect(true)); + + Utilities.InBackground(Reconnect); } } } @@ -3535,6 +3536,14 @@ private void OnWalletInfo(SteamUser.WalletInfoCallback callback) { WalletCurrency = callback.Currency; } + private async Task Reconnect() { + if (SteamClient.IsConnected) { + Disconnect(true); + } else { + await Connect().ConfigureAwait(false); + } + } + private async void RedeemGamesInBackground(object? state = null) { if (!await GamesRedeemerInBackgroundSemaphore.WaitAsync(0).ConfigureAwait(false)) { return;