private async Task ProcessMessageAsync(OrderbookMessage orderbookMessage) { OrderbookEntity orderbook = null; try { orderbook = await _orderbookWriter.GetAsync(OrderbookEntity.GetPk(), orderbookMessage.AssetPair); } catch (Exception ex) { _log.Warning($"Can't get orderbook from mynosql for assetPair = {orderbookMessage.AssetPair}", ex); } var entity = orderbook ?? new OrderbookEntity(orderbookMessage.AssetPair) { CreatedAt = orderbookMessage.Timestamp }; entity.CreatedAt = orderbookMessage.Timestamp; var prices = orderbookMessage.IsBuy ? entity.Bids : entity.Asks; prices.Clear(); foreach (var price in orderbookMessage.Prices) { prices.Add(new VolumePriceEntity((decimal)price.Volume, (decimal)price.Price)); } await _orderbookWriter.InsertOrReplaceAsync(entity); }
private async Task ProcessMessageAsync(OrderbookMessage orderbookMessage) { var entity = await _orderbookWriter.GetAsync(OrderbookEntity.GetPk(), orderbookMessage.AssetPair) ?? new OrderbookEntity(orderbookMessage.AssetPair) { CreatedAt = orderbookMessage.Timestamp, }; entity.CreatedAt = orderbookMessage.Timestamp; var prices = orderbookMessage.IsBuy ? entity.Bids : entity.Asks; prices.Clear(); foreach (var price in orderbookMessage.Prices) { prices.Add(new VolumePriceEntity((decimal)price.Volume, (decimal)price.Price)); } await _orderbookWriter.InsertOrReplaceAsync(entity); }
private async Task <Orderbook> GetOrderbookAsync(string assetPairId) { var orderbookEntity = _orderbooksReader.Get(OrderbookEntity.GetPk(), assetPairId); if (orderbookEntity != null) { var orderbook = _mapper.Map <Orderbook>(orderbookEntity); orderbook.Bids.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(orderbookEntity.Bids)); orderbook.Asks.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(orderbookEntity.Asks)); return(orderbook); } var buyBook = GetOrderbook(assetPairId, true); var sellBook = GetOrderbook(assetPairId, false); await Task.WhenAll(buyBook, sellBook); var result = new Orderbook { AssetPairId = assetPairId, Timestamp = buyBook.Result.Timestamp > sellBook.Result.Timestamp ? Timestamp.FromDateTime(buyBook.Result.Timestamp.ToUniversalTime()) : Timestamp.FromDateTime(sellBook.Result.Timestamp.ToUniversalTime()), }; result.Bids.AddRange(buyBook.Result.Prices.Select(x => new Orderbook.Types.PriceVolume { V = Math.Abs(x.Volume).ToString(CultureInfo.InvariantCulture), P = x.Price.ToString(CultureInfo.InvariantCulture) })); result.Asks.AddRange(sellBook.Result.Prices.Select(x => new Orderbook.Types.PriceVolume { V = Math.Abs(x.Volume).ToString(CultureInfo.InvariantCulture), P = x.Price.ToString(CultureInfo.InvariantCulture) })); return(result); }
private async Task <Orderbook> GetOrderbookAsync(string assetPairId) { var orderbookEntity = _orderbooksReader.Get(OrderbookEntity.GetPk(), assetPairId); if (orderbookEntity != null) { return(_mapper.Map <Orderbook>(orderbookEntity)); } var buyBook = GetOrderbook(assetPairId, true); var sellBook = GetOrderbook(assetPairId, false); await Task.WhenAll(buyBook, sellBook); return(new Orderbook { AssetPairId = assetPairId, Timestamp = buyBook.Result.Timestamp > sellBook.Result.Timestamp ? buyBook.Result.Timestamp : sellBook.Result.Timestamp, Bids = buyBook.Result.Prices.Select(x => new VolumePrice(Math.Abs(x.Volume), x.Price)).ToList(), Asks = sellBook.Result.Prices.Select(x => new VolumePrice(Math.Abs(x.Volume), x.Price)).ToList() }); }