Esempio n. 1
0
        public override async Task <PricesResponse> GetPrices(PricesRequest request, ServerCallContext context)
        {
            var entities = _pricesReader.Get(PriceEntity.GetPk());

            List <PriceUpdate> result;

            if (entities.Any())
            {
                result = _mapper.Map <List <PriceUpdate> >(entities);
            }
            else
            {
                var marketData = await _marketDataClient.GetMarketDataAsync(new Empty());

                result = _mapper.Map <List <PriceUpdate> >(marketData.Items.ToList());
            }

            if (request.AssetPairIds.Any())
            {
                result = result.Where(x =>
                                      request.AssetPairIds.Contains(x.AssetPairId, StringComparer.InvariantCultureIgnoreCase))
                         .ToList();
            }

            var response = new PricesResponse();

            response.Payload.AddRange(result);

            return(response);
        }
Esempio n. 2
0
        public void HandlePricesRequest(PricesRequest request)
        {
            PricesResponse response = StoreManager.GetPricesResponse();

            response.ResponseId = request.RequestId;
            Send(response);
        }
        public override Task <PricesResponse> GetPrices(PricesRequest request, ServerCallContext context)
        {
            var symbols = request.AssetPairIds.ToList();

            var prices = _marketDataService.GetPrices(DefaultTenantId);

            IEnumerable <PriceEntity> data = prices;

            if (symbols.Any())
            {
                data = data.Where(p => symbols.Contains(p.Symbol));
            }

            var response = new PricesResponse
            {
                Prices =
                {
                    data.Select(p =>

                                new PriceUpdate
                    {
                        AssetPairId    = p.Symbol,
                        Timestamp      = Timestamp.FromDateTime(DateTime.SpecifyKind(p.LastUpdate, DateTimeKind.Utc)),
                        Ask            = p.Ask.HasValue ? p.Ask.ToString() : string.Empty,
                        Bid            = p.Ask.HasValue ? p.Bid.ToString() : string.Empty,
                        PriceChange24H = "0",         //todo: calculate 24h statistic and write to mynisql to use here
                        VolumeBase24H  = "0",
                        VolumeQuote24H = "0"
                    })
                    .ToList()
                }
            };

            return(Task.FromResult(response));
        }
        public async Task InitializeAsync()
        {
            _logger.LogInformation("Initializing internal quotes...");

            var priceRequest = new PricesRequest();

            _logger.LogInformation("Receiving all internal quotes...");

            var pricesResponse = await _client.PublicApi.GetPricesAsync(priceRequest);

            ValidateResponse(pricesResponse.Error);

            _logger.LogInformation($"Received {pricesResponse.Payload.Count} internal quotes.");

            foreach (var priceUpdate in pricesResponse.Payload)
            {
                var quote = Map(priceUpdate);

                foreach (var quoteHandler in _handlers)
                {
                    await quoteHandler.HandleAsync(quote);
                }
            }

            _logger.LogInformation("Handled all internal quotes.");

            // todo: to make it consistent we need to subscribe to updates first,
            // todo: then receive all quotes and update only those that has not been received yet
            SubscribeAndHandleQuoteUpdatesAsync();
        }
Esempio n. 5
0
        public override Task <PricesResponse> GetPrices(PricesRequest request, ServerCallContext context)
        {
            var entities = _pricesReader.Get(PriceEntity.GetPk());

            var result = new List <PriceUpdate>();

            if (entities.Any())
            {
                result = _mapper.Map <List <PriceUpdate> >(entities);
            }

            if (request.AssetPairIds.Any())
            {
                result = result.Where(x =>
                                      request.AssetPairIds.Contains(x.AssetPairId, StringComparer.InvariantCultureIgnoreCase))
                         .ToList();
            }

            var response = new PricesResponse {
                Body = new PricesResponse.Types.Body()
            };

            response.Body.Prices.AddRange(result);

            return(Task.FromResult(response));
        }
        private static async Task GetPriceSnapshot(string[] filter, TradingApiClient client)
        {
            var priceRequest = new PricesRequest();

            priceRequest.AssetPairIds.AddRange(filter);

            var prices = await client.PublicApi.GetPricesAsync(priceRequest);

            ValidateResult(prices.Error);
            Console.WriteLine($"Count prices: {prices.Payload.Count}.");

            foreach (var price in prices.Payload)
            {
                Console.WriteLine($"{price.AssetPairId}: Ask={price.Ask}; Bid={price.Bid}; Time={price.Timestamp}");
            }
        }
Esempio n. 7
0
 public async static Task OnPricesRequest(LobbyServerConnection client, PricesRequest request)
 {
     await new PricesRequestHandler().OnMessage(client, request);
 }