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); }
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(); }
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}"); } }
public async static Task OnPricesRequest(LobbyServerConnection client, PricesRequest request) { await new PricesRequestHandler().OnMessage(client, request); }