public override async Task GetPublicTradeUpdates(PublicTradesUpdatesRequest request, IServerStreamWriter <PublicTradeUpdate> responseStream, ServerCallContext context) { Console.WriteLine($"New public trades stream connect. peer:{context.Peer}"); var data = await _tradesAdapterClient.GetTradesByAssetPairIdAsync(request.AssetPairId, 0, 50); var trades = _mapper.Map <List <PublicTrade> >(data.Records); var initData = new PublicTradeUpdate(); initData.Trades.AddRange(trades); var streamInfo = new StreamInfo <PublicTradeUpdate> { Stream = responseStream, CancelationToken = context.CancellationToken, Keys = new [] { request.AssetPairId }, Peer = context.Peer }; var task = await _publicTradesStreamService.RegisterStreamAsync(streamInfo, new List <PublicTradeUpdate> { initData }); await task; }
public override async Task <PublicTradeUpdate> GetPublicTrades(PublicTradesRequest request, ServerCallContext context) { var data = await _tradesAdapterClient.GetTradesByAssetPairIdAsync(request.AssetPairId, request.Offset, request.Take); var result = new PublicTradeUpdate(); result.Trades.AddRange(_mapper.Map <List <PublicTrade> >(data.Records)); return(result); }
private async Task ProcessMessageAsync(List <Trade> message) { if (!message.Any()) { return; } var tradesByAssetId = message.GroupBy(x => x.AssetPairId); var tasks = new List <Task>(); foreach (var tradeByAsset in tradesByAssetId) { var tradesUpdate = new PublicTradeUpdate(); tradesUpdate.Trades.AddRange(_mapper.Map <List <PublicTrade> >(tradeByAsset.ToList())); tasks.Add(_publicTradesStreamService.WriteToStreamAsync(tradesUpdate, tradeByAsset.Key)); } await Task.WhenAll(tasks); }