diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index d8f0c0c61..abeb45fc6 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -921,24 +921,22 @@ namespace ArchiSteamFarm { await SessionSemaphore.WaitAsync().ConfigureAwait(false); - if (DateTime.Now.Subtract(LastSessionRefreshCheck).TotalSeconds < MinSessionTTL) { + try { + if (DateTime.Now.Subtract(LastSessionRefreshCheck).TotalSeconds < MinSessionTTL) { + return true; + } + + bool? isLoggedIn = await IsLoggedIn().ConfigureAwait(false); + if (isLoggedIn.GetValueOrDefault(true)) { + LastSessionRefreshCheck = DateTime.Now; + return true; + } else { + Logging.LogGenericInfo("Refreshing our session!", Bot.BotName); + return await Bot.RefreshSession().ConfigureAwait(false); + } + } finally { SessionSemaphore.Release(); - return true; } - - bool result; - - bool? isLoggedIn = await IsLoggedIn().ConfigureAwait(false); - if (isLoggedIn.GetValueOrDefault(true)) { - result = true; - LastSessionRefreshCheck = DateTime.Now; - } else { - Logging.LogGenericInfo("Refreshing our session!", Bot.BotName); - result = await Bot.RefreshSession().ConfigureAwait(false); - } - - SessionSemaphore.Release(); - return result; } private async Task UnlockParentalAccount(string parentalPin) { diff --git a/ArchiSteamFarm/CardsFarmer.cs b/ArchiSteamFarm/CardsFarmer.cs index 5d8d24122..1bd949778 100755 --- a/ArchiSteamFarm/CardsFarmer.cs +++ b/ArchiSteamFarm/CardsFarmer.cs @@ -47,7 +47,7 @@ namespace ArchiSteamFarm { [JsonProperty] internal ushort CardsRemaining { get; set; } - internal string HeaderURL => "https://steamcdn-a.akamaihd.net/steam/apps/" + AppID + "/header.jpg"; + //internal string HeaderURL => "https://steamcdn-a.akamaihd.net/steam/apps/" + AppID + "/header.jpg"; internal Game(uint appID, string gameName, float hoursPlayed, ushort cardsRemaining) { if ((appID == 0) || string.IsNullOrEmpty(gameName) || (hoursPlayed < 0) || (cardsRemaining == 0)) { @@ -146,30 +146,30 @@ namespace ArchiSteamFarm { await FarmingSemaphore.WaitAsync().ConfigureAwait(false); - if (NowFarming || ManualMode || Bot.PlayingBlocked) { - FarmingSemaphore.Release(); // We have nothing to do, don't forget to release semaphore - return; + try { + if (NowFarming || ManualMode || Bot.PlayingBlocked) { + return; + } + + if (!await IsAnythingToFarm().ConfigureAwait(false)) { + Logging.LogGenericInfo("We don't have anything to farm on this account!", Bot.BotName); + await Bot.OnFarmingFinished(false).ConfigureAwait(false); + return; + } + + Logging.LogGenericInfo("We have a total of " + GamesToFarm.Count + " games (" + GamesToFarm.Sum(game => game.CardsRemaining) + " cards) to farm on this account...", Bot.BotName); + + // This is the last moment for final check if we can farm + if (Bot.PlayingBlocked) { + Logging.LogGenericInfo("But account is currently occupied, so farming is stopped!", Bot.BotName); + return; + } + + KeepFarming = NowFarming = true; + } finally { + FarmingSemaphore.Release(); } - if (!await IsAnythingToFarm().ConfigureAwait(false)) { - FarmingSemaphore.Release(); // We have nothing to do, don't forget to release semaphore - Logging.LogGenericInfo("We don't have anything to farm on this account!", Bot.BotName); - await Bot.OnFarmingFinished(false).ConfigureAwait(false); - return; - } - - Logging.LogGenericInfo("We have a total of " + GamesToFarm.Count + " games (" + GamesToFarm.Sum(game => game.CardsRemaining) + " cards) to farm on this account...", Bot.BotName); - - // This is the last moment for final check if we can farm - if (Bot.PlayingBlocked) { - Logging.LogGenericInfo("But account is currently occupied, so farming is stopped!", Bot.BotName); - FarmingSemaphore.Release(); // We have nothing to do, don't forget to release semaphore - return; - } - - KeepFarming = NowFarming = true; - FarmingSemaphore.Release(); // From this point we allow other calls to shut us down - do { // Now the algorithm used for farming depends on whether account is restricted or not if (Bot.BotConfig.CardDropsRestricted) { // If we have restricted card drops, we use complex algorithm @@ -223,27 +223,29 @@ namespace ArchiSteamFarm { await FarmingSemaphore.WaitAsync().ConfigureAwait(false); - if (!NowFarming) { + try { + if (!NowFarming) { + return; + } + + Logging.LogGenericInfo("Sending signal to stop farming", Bot.BotName); + KeepFarming = false; + FarmResetEvent.Set(); + + Logging.LogGenericInfo("Waiting for reaction...", Bot.BotName); + for (byte i = 0; (i < 5) && NowFarming; i++) { + await Task.Delay(1000).ConfigureAwait(false); + } + + if (NowFarming) { + Logging.LogGenericWarning("Timed out!", Bot.BotName); + } + + Logging.LogGenericInfo("Farming stopped!", Bot.BotName); + Bot.OnFarmingStopped(); + } finally { FarmingSemaphore.Release(); - return; } - - Logging.LogGenericInfo("Sending signal to stop farming", Bot.BotName); - KeepFarming = false; - FarmResetEvent.Set(); - - Logging.LogGenericInfo("Waiting for reaction...", Bot.BotName); - for (byte i = 0; (i < 5) && NowFarming; i++) { - await Task.Delay(1000).ConfigureAwait(false); - } - - if (NowFarming) { - Logging.LogGenericWarning("Timed out!", Bot.BotName); - } - - Logging.LogGenericInfo("Farming stopped!", Bot.BotName); - Bot.OnFarmingStopped(); - FarmingSemaphore.Release(); } internal void OnDisconnected() => StopFarming().Forget(); diff --git a/ArchiSteamFarm/MobileAuthenticator.cs b/ArchiSteamFarm/MobileAuthenticator.cs index 005444748..59ab10719 100644 --- a/ArchiSteamFarm/MobileAuthenticator.cs +++ b/ArchiSteamFarm/MobileAuthenticator.cs @@ -276,14 +276,17 @@ namespace ArchiSteamFarm { await TimeSemaphore.WaitAsync().ConfigureAwait(false); - if (!SteamTimeDifference.HasValue) { - uint serverTime = Bot.ArchiWebHandler.GetServerTime(); - if (serverTime != 0) { - SteamTimeDifference = (short) (serverTime - Utilities.GetUnixTime()); + try { + if (!SteamTimeDifference.HasValue) { + uint serverTime = Bot.ArchiWebHandler.GetServerTime(); + if (serverTime != 0) { + SteamTimeDifference = (short) (serverTime - Utilities.GetUnixTime()); + } } + } finally { + TimeSemaphore.Release(); } - TimeSemaphore.Release(); return (uint) (Utilities.GetUnixTime() + SteamTimeDifference.GetValueOrDefault()); }