public override async Task GetPriceUpdates(PriceUpdatesRequest request, IServerStreamWriter <PriceUpdate> responseStream, ServerCallContext context) { Console.WriteLine($"New price stream connect. peer:{context.Peer}"); var entities = _pricesReader.Get(PriceEntity.GetPk()); var prices = _mapper.Map <List <PriceUpdate> >(entities); if (request.AssetPairIds.Any()) { prices = prices.Where(x => request.AssetPairIds.Contains(x.AssetPairId)).ToList(); } var streamInfo = new StreamInfo <PriceUpdate> { Stream = responseStream, CancelationToken = context.CancellationToken, Peer = context.Peer, Keys = request.AssetPairIds.ToArray() }; var task = await _priceStreamService.RegisterStreamAsync(streamInfo, prices); await task; }
private async Task SubscribeAndHandleQuoteUpdatesAsync() { _logger.LogInformation("Subscribing to all internal quotes updates..."); var priceUpdateRequest = new PriceUpdatesRequest(); var priceStream = _client.PublicApi.GetPriceUpdates(priceUpdateRequest); _logger.LogInformation("Subscribed to all internal quotes updates."); var cancellationToken = new CancellationToken(); // todo: implement reconnection in case of disconnect while (await priceStream.ResponseStream.MoveNext(cancellationToken)) { var priceUpdate = priceStream.ResponseStream.Current; var quote = Map(priceUpdate); foreach (var quoteHandler in _handlers) { await quoteHandler.HandleAsync(quote); } } }
private static async Task FollowPriceUpdate(string[] filter, TradingApiClient client) { var priceUpdateRequest = new PriceUpdatesRequest(); priceUpdateRequest.AssetPairIds.AddRange(filter); Console.WriteLine("Subscribe to prices."); var priceStream = client.PublicApi.GetPriceUpdates(priceUpdateRequest); var token = new CancellationToken(); while (await priceStream.ResponseStream.MoveNext(token)) { var update = priceStream.ResponseStream.Current; Console.WriteLine($"{update.AssetPairId} Bid: {update.Bid} Ask: {update.Ask} {update.Timestamp}"); } Console.WriteLine("Price stream are closed."); }
public override Task GetPriceUpdates(PriceUpdatesRequest request, IServerStreamWriter <PriceUpdate> responseStream, ServerCallContext context) { _priceUpdate.Add(responseStream); return(Task.CompletedTask); }