private async Task ProcessMessageAsync(LykkeOrderBook message) { try { var limitOrders = message.LimitOrders .Select(o => new LimitOrder(o.Id, o.WalletId, o.Price, Math.Abs(o.Volume))) .Where(x => x.Price > 0 && x.Volume > 0) // Filter out negative and zero prices and volumes .ToList(); IReadOnlyList <LimitOrder> bids = null; IReadOnlyList <LimitOrder> asks = null; if (message.IsBuy) { bids = limitOrders; } else { asks = limitOrders; } var lykkeOrderBook = new OrderBook(LykkeExchangeName, new AssetPair(message.AssetPairId), bids, asks, message.Timestamp); await Task.WhenAll(_lykkeOrderBookHandlers.Select(o => o.HandleAsync(lykkeOrderBook))); } catch (Exception exception) { _log.Error(exception, "An error occurred during processing lykke order book", message); } }
private async Task ProcessMessageAsync(LykkeOrderBook message) { try { var limitOrders = message.LimitOrders .Select(o => new LimitOrder { Id = o.Id, WalletId = o.ClientId, Volume = Math.Abs(o.Volume), Price = o.Price, Type = message.IsBuy ? LimitOrderType.Buy : LimitOrderType.Sell }) .ToArray(); if (message.IsBuy) { await _orderBookService.UpdateBuyLimitOrdersAsync(message.AssetPairId, message.Timestamp, limitOrders); } else { await _orderBookService.UpdateSellLimitOrdersAsync(message.AssetPairId, message.Timestamp, limitOrders); } } catch (Exception exception) { _log.Error(exception, "An error occurred during processing lykke order book", message); } }