Beispiel #1
0
        public override async Task GetCurrentWeatherStream(GetCurrentWeatherForCityRequest request, IServerStreamWriter <WeatherResponse> responseStream, ServerCallContext context)
        {
            var httpClient = _httpClientFactory.CreateClient();

            for (int i = 0; i < 10; i++)
            {
                if (context.CancellationToken.IsCancellationRequested)
                {
                    _logger.LogInformation("Request was cancelled");
                    break;
                }
                var temperatures = await GetTemperaturesAsync(request, httpClient);

                await responseStream.WriteAsync(new WeatherResponse
                {
                    Temperature = temperatures.Main.Temp,
                    FeelsLike   = temperatures.Main.FeelsLike,
                    Timestamp   = Timestamp.FromDateTime(DateTime.UtcNow),
                    City        = request.City,
                    Units       = request.Units
                });

                await Task.Delay(1000);
            }
        }
Beispiel #2
0
        private async Task <Temperatures> GetTemperaturesAsync(GetCurrentWeatherForCityRequest request, HttpClient httpClient)
        {
            var responseText = await httpClient.GetStringAsync(
                $"https://api.openweathermap.org/data/2.5/weather?q={request.City}&appid={_openWeatherMapApiKey}&units={request.Units}");

            var temperatures = JsonSerializer.Deserialize <Temperatures>(responseText);

            return(temperatures);
        }
Beispiel #3
0
        public override async Task <WeatherResponse> GetCurrentWeather(GetCurrentWeatherForCityRequest request, ServerCallContext context)
        {
            var httpClient   = _httpClientFactory.CreateClient();
            var temperatures = await GetTemperaturesAsync(request, httpClient);

            return(new WeatherResponse
            {
                Temperature = temperatures.Main.Temp,
                FeelsLike = temperatures.Main.FeelsLike,
                Timestamp = Timestamp.FromDateTime(DateTime.UtcNow),
                City = request.City,
                Units = request.Units
            });
        }