Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }