예제 #1
0
        public async Task DoWork(IBaseSocketExchange baseExchange, CancellationToken token)
        {
            var pairs = dbService.GetArbitragePairs("market", baseExchange.Name, counterExchange.Name).Select(p => new ArbitragePair(p));

            SocketTradeHandler handler = ProcessTrade;

            foreach (var pair in pairs)
            {
                baseExchange.RegisterPair(pair, handler);
            }
            baseExchange.SubscribeTrades(token);

            Parallel.ForEach(pairs, pair =>
            {
                try
                {
                    ProcessOrderBook(baseExchange, pair, token).Wait();
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
                }
            });


            await Task.FromResult(0);
        }
예제 #2
0
 public void RegisterPair(ArbitragePair pair, SocketTradeHandler handler)
 {
     if (!_pairs.TryAdd(pair.Symbol, pair))
     {
         throw new Exception("Duplicate pair");
     }
     if (!_handlers.TryAdd(pair.Symbol, handler))
     {
         throw new Exception("Duplicate handler");
     }
 }