public override Task GetOrderbookUpdates(OrderbookUpdatesRequest request, IServerStreamWriter <Orderbook> responseStream, ServerCallContext context) { _orderBookUpdate.Add(responseStream); return(Task.CompletedTask); }
public override async Task GetOrderbookUpdates(OrderbookUpdatesRequest request, IServerStreamWriter <Orderbook> responseStream, ServerCallContext context) { Console.WriteLine($"New orderbook stream connect. peer:{context.Peer}"); var data = await _orderbooksService.GetAsync(request.AssetPairId); var orderbooks = new List <Orderbook>(); foreach (var item in data) { var orderbook = _mapper.Map <Orderbook>(item); orderbook.Asks.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(item.Asks)); orderbook.Bids.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(item.Bids)); orderbooks.Add(orderbook); } var streamInfo = new StreamInfo <Orderbook> { Stream = responseStream, CancelationToken = context.CancellationToken, Keys = new [] { request.AssetPairId }, Peer = context.Peer }; var task = await _orderbookStreamService.RegisterStreamAsync(streamInfo, orderbooks); await task; }
public override Task GetOrderbookUpdates(OrderbookUpdatesRequest request, IServerStreamWriter <Orderbook> responseStream, ServerCallContext context) { Console.WriteLine($"New orderbook stream connect. peer:{context.Peer}"); var streamInfo = new StreamInfo <Orderbook> { Stream = responseStream, Key = request.AssetPairId, Peer = context.Peer }; return(_orderbookUpdateService.RegisterStream(streamInfo)); }
public override async Task GetOrderbookUpdates(OrderbookUpdatesRequest request, IServerStreamWriter <Orderbook> responseStream, ServerCallContext context) { Console.WriteLine($"New orderbook stream connect. peer:{context.Peer}"); var assetPairIds = new List <string>(); if (!string.IsNullOrEmpty(request.AssetPairId)) { assetPairIds.Add(request.AssetPairId); } else { assetPairIds = request.AssetPairIds?.ToList() ?? new List <string>(); } var data = await _orderbooksService.GetAsync(); if (assetPairIds.Any()) { data = data.Where(x => assetPairIds.Contains(x.AssetPairId, StringComparer.InvariantCultureIgnoreCase)) .ToList(); } var orderbooks = new List <Orderbook>(); foreach (var item in data) { var orderbook = _mapper.Map <Orderbook>(item); orderbook.Asks.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(item.Asks)); orderbook.Bids.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(item.Bids)); orderbooks.Add(orderbook); } var streamInfo = new StreamInfo <Orderbook> { Stream = responseStream, CancelationToken = context.CancellationToken, Keys = assetPairIds.ToArray(), Peer = context.Peer }; var task = await _orderbookUpdateService.RegisterStreamAsync(streamInfo, orderbooks); await task; }
static async Task UpdateThread(TradingApiClient client, string filter) { var reqiest = new OrderbookUpdatesRequest(); reqiest.AssetPairId = filter; var stream = client.PublicApi.GetOrderbookUpdates(reqiest); var token = new CancellationToken(); while (await stream.ResponseStream.MoveNext(token)) { var update = stream.ResponseStream.Current; foreach (Orderbook.Types.PriceVolume ask in update.Asks) { var price = decimal.Parse(ask.P); if (ask.V == "0") { _ask.Remove(price); } else { _ask[price] = ask.V; } } foreach (Orderbook.Types.PriceVolume bid in update.Bids) { var price = decimal.Parse(bid.P); if (bid.V == "0") { _bid.Remove(price); } else { _bid[price] = bid.V; } } } }