internal async Task OnNewItemsNotification() { if (NowFarming) { await FarmingInitializationSemaphore.WaitAsync().ConfigureAwait(false); try { if (NowFarming) { if (FarmingResetSemaphore.CurrentCount == 0) { FarmingResetSemaphore.Release(); } return; } } finally { FarmingInitializationSemaphore.Release(); } } // If we're not farming, and we got new items, it's likely to be a booster pack or likewise // In this case, perform a loot if user wants to do so await Bot.LootIfNeeded().ConfigureAwait(false); }
internal async Task OnNewItemsNotification() { if (NowFarming) { FarmResetEvent.Set(); return; } // If we're not farming, and we got new items, it's likely to be a booster pack or likewise // In this case, perform a loot if user wants to do so await Bot.LootIfNeeded().ConfigureAwait(false); }
private async Task ParseActiveTrades() { if (string.IsNullOrEmpty(Bot.BotConfig.SteamApiKey)) { return; } HashSet <Steam.TradeOffer> tradeOffers = Bot.ArchiWebHandler.GetActiveTradeOffers(); if ((tradeOffers == null) || (tradeOffers.Count == 0)) { return; } if (tradeOffers.RemoveWhere(tradeoffer => IgnoredTrades.Contains(tradeoffer.TradeOfferID)) > 0) { if (tradeOffers.Count == 0) { return; } } ParseTradeResult[] results = await Task.WhenAll(tradeOffers.Select(ParseTrade)).ConfigureAwait(false); if (Bot.HasMobileAuthenticator) { HashSet <ulong> acceptedWithItemLoseTradeIDs = new HashSet <ulong>(results.Where(result => (result != null) && (result.Result == ParseTradeResult.EResult.AcceptedWithItemLose)).Select(result => result.TradeID)); if (acceptedWithItemLoseTradeIDs.Count > 0) { await Task.Delay(1000).ConfigureAwait(false); // Sometimes we can be too fast for Steam servers to generate confirmations, wait a short moment await Bot.AcceptConfirmations(true, Steam.ConfirmationDetails.EType.Trade, 0, acceptedWithItemLoseTradeIDs).ConfigureAwait(false); } } if (results.Any(result => (result != null) && ((result.Result == ParseTradeResult.EResult.AcceptedWithItemLose) || (result.Result == ParseTradeResult.EResult.AcceptedWithoutItemLose)))) { // If we finished a trade, perform a loot if user wants to do so await Bot.LootIfNeeded().ConfigureAwait(false); } }