Пример #1
0
 public ScanRunner(CurrencyType[] currencies,
                   ITradeProvider TradeProvider,
                   string league,
                   int cycleTime   = 5000,
                   int resultLimit = 30)
 {
     _tradeProvider = TradeProvider;
     _currencies    = currencies;
     League         = league;
     _scanCycleTime = cycleTime;
     _resultLimit   = resultLimit;
 }
Пример #2
0
        /// <summary>
        /// Starts a scan using the given trade provider.
        /// </summary>
        /// <param name="currencies">currencies to scan for.</param>
        /// <param name="tradeProvider">provider</param>
        public async Task StartScan()
        {
            if (IsRunning)
            {
                return;
            }

            IsRunning = true;
            _logger.Info($"Initializing for League: {League}\n" +
                         $"Provider: {_tradeProvider.ProviderName()}({_tradeProvider.ProviderUrl()}).\n" +
                         $"Scan Cycle: {_scanCycleTime}. Result Limit: {_resultLimit}");
            _provider = _tradeProvider;
            _logger.Info("Starting Scan");


            InitializeScannerQueue(_currencies);
            // scan while we haven't called stop and we still have scanners to process.
            while (IsRunning && _scanQueue.Count > 0)
            {
                _logger.Info("Getting Scanner");
                var scanner = _scanQueue.Dequeue();

                if (OfferData.ContainsKey(scanner.BuyingType))
                {
                    _logger.Info($"Clearing offer data stored for {scanner.BuyingType}");
                    OfferData[scanner.BuyingType].Clear();
                }

                _logger.Info($"Getting Buy Offers for {scanner}");

                await Task.Run(async() => await CompileOfferData(scanner, _currencies));

                // exit so we don't wait on the last iteration
                if (_scanQueue.Count <= 0)
                {
                    continue;
                }

                _logger.Info($"Waiting {_scanCycleTime} to run next scanner.");
                await Task.Delay(_scanCycleTime);
            }

            _logger.Info("Completed scan.");
            Finished?.Invoke(this, EventArgs.Empty);
            IsRunning = false;
        }
Пример #3
0
 /// <summary>
 /// Creates a new offer
 /// </summary>
 /// <param name="buying">Currency being bought by the user</param>
 /// <param name="selling">Currency being sold by the user</param>
 /// <param name="username">the user selling the currency</param>
 /// <param name="league">the league of the user</param>
 public Offer(CurrencyItem buying,
              CurrencyItem selling,
              double currentStock,
              string username,
              string league,
              ITradeProvider provider)
 {
     Buying        = buying;
     Selling       = selling;
     CurrentStock  = currentStock;
     Username      = username;
     League        = league;
     TradeProvider = provider;
     _logger       = LogManager.GetCurrentClassLogger();
     _logger.Trace(
         $"Found Offer on {TradeProvider.ProviderName()}:[{Buying} => {Selling}] Stock: {CurrentStock}");
 }
Пример #4
0
 protected TradeStrategyBase(TradeStrategyContext context)
 {
     Context  = context;
     Id       = ObjectId.NewObjectId();
     Provider = Context.Network.Providers.Where(x => x.IsDirect).FirstProviderOf <ITradeProvider>();
 }
Пример #5
0
 /// <summary>
 /// Creates a new scanner with the given buying type and trade provider.
 /// </summary>
 /// <param name="buyingType">type to check buy offers for</param>
 /// <param name="provider">provider to scan on</param>
 public Scanner(CurrencyType buyingType, ITradeProvider provider)
 {
     BuyingType = buyingType;
     _provider  = provider;
 }