Beispiel #1
0
        public async Task <bool> StartAsync()
        {
            if (!_serviceIsStarted && !_serviceIsStarting)
            {
                _serviceIsStarting = true;

                if (!ConfigService.Instance.ConfigIsInitialized)
                {
                    if (!ConfigService.Instance.LoadConfig())
                    {
                        WriteLog(LogType.Warning, "Failed loading config");
                        return(false);
                    }
                }

                var config = ConfigService.Instance.Configuration;

                if (config.TelegramActive)
                {
                    _telegram.Start();
                    LoggerHelper.TelegramHelper = _telegram;
                    _telegramConfigUpdater      = new TelegramConfigUpdater(_telegram);
                    _telegramConfigUpdater.Start();
                }

                WriteLog(LogType.Information, "Starting Service");

                ConfigService.Instance.OnConfigUpdated += OnConfigUpdated;

                _service = new Service(config.Key);
                if (!await _service.Init())
                {
                    WriteLog(LogType.Error, "Failed initialising MarketAPI. Is the ApiKey correct?");
                    return(false);
                }

                var mainSteamID = await _service.GetMySteamIDAsync();

                _steamID64 = mainSteamID.SteamID64;
                _inventoryMonitor.Add(_steamID64, InventoryMonitor.StartNewService(_steamID64));

                foreach (var steamID in config.Entries.SelectMany(s => s.AltAccounts).GroupBy(a => a.SteamID64))
                {
                    _inventoryMonitor.Add(steamID.Key, InventoryMonitor.StartNewService(steamID.Key));
                }

                if (ConfigService.GetConfig().Entries.Any(c => c.Mode != BuyMode.IgnoreAveragePrice))
                {
                    WriteLog(LogType.Information, "Prefilling average item prices");
                    await _timers.AddEntry(new TimerHelper(config.AveragePriceCheckInterval * 60 * 1000, UpdateAverageItemPriceListAsync, true)).RunActionAsync(); // Get average prices every 5 minutes
                }

                _timers.Add(new TimerHelper(ConfigService.GetConfig().CheckInterval, BuyItemsAsync, true)); // Buy items every n milliseconds
                _timers.Add(new TimerHelper(1 * 60 * 1000, UpdateBalanceAsync, true));                      // Get current balance every minute


                if (ConfigService.GetConfig().EnablePing)
                {
                    WriteLog(LogType.Information, "Activating Selling/Autopurchase");
                    _timers.Add(new TimerHelper(3 * 61 * 1000, HandlePingAsync, true));
                }

                _serviceIsStarting = false;
                return(_serviceIsStarted = true);
            }

            return(false);
        }