private Task ProcessMessageAsync(OrderBookSnapshotEvent message) { try { var brokerId = message.OrderBook.BrokerId; var symbol = message.OrderBook.Asset; var timestamp = message.OrderBook.Timestamp.ToDateTime(); var limitOrders = message.OrderBook.Levels .Select(level => new LimitOrder { Id = Guid.Parse(level.OrderId), Price = decimal.Parse(level.Price), Volume = Math.Abs(decimal.Parse(level.Volume)), WalletId = level.WalletId, Type = message.OrderBook.IsBuy ? LimitOrderType.Buy : LimitOrderType.Sell }) .ToList(); _orderBooksHandler.Handle(brokerId, symbol, message.OrderBook.IsBuy, timestamp, limitOrders); _logger.LogInformation("Received an Order Book. {@OrderBook}", message); } catch (Exception exception) { _logger.LogError(exception, "An error occurred during processing order book. {@Message}", message); } return(Task.CompletedTask); }
private async Task ProcessMessageAsync(OrderBookSnapshotEvent message) { if (message.OrderBook.IsBuy && _priceType == PriceType.Ask) { return; } if (!message.OrderBook.IsBuy && _priceType == PriceType.Bid) { return; } if (!message.OrderBook.Levels.Any()) { return; } try { string priceValue; if (_priceType == PriceType.Ask) { priceValue = message.OrderBook.Levels .OrderBy(level => level.Price) .First() .Price; } else if (_priceType == PriceType.Bid) { priceValue = message.OrderBook.Levels .OrderByDescending(level => level.Price) .First() .Price; } else { return; } var assetPairId = message.OrderBook.Asset; var time = message.OrderBook.Timestamp.ToDateTime(); var price = decimal.Parse(priceValue); await _pricesHandler.HandleAsync(assetPairId, time, (double)price); } catch (Exception exception) { _logger.LogError(exception, "An error occurred during processing order book. {@Message}", message); } }