コード例 #1
0
        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;
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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.");
        }
コード例 #4
0
 public override Task GetPriceUpdates(PriceUpdatesRequest request, IServerStreamWriter <PriceUpdate> responseStream, ServerCallContext context)
 {
     _priceUpdate.Add(responseStream);
     return(Task.CompletedTask);
 }