Example #1
0
        public WeatherData GetWeather(string city, string country)
        {
            GlobalWeatherSoapClient soapClient = new GlobalWeatherSoapClient();
            string result = soapClient.GetWeather(city, country);

            XmlSerializer serializer = new XmlSerializer(typeof(CurrentWeather));
            MemoryStream reader = new MemoryStream(Encoding.Unicode.GetBytes(result));

            CurrentWeather weatherResult = (CurrentWeather)serializer.Deserialize(reader);

            var data = new WeatherData()
            {
                LocationName = weatherResult.Location,
                Conditions = weatherResult.SkyConditions
            };
            
            string timeStamp = weatherResult.Time.Substring(weatherResult.Time.IndexOf("/") + 1)
                                                 .Replace('.', '-')
                                                 .Replace("UTC", "")
                                                 .TrimEnd();
            string formattedTime = timeStamp.Substring(0, timeStamp.Length - 2) + ":" + timeStamp.Substring(timeStamp.Length - 2);
            data.CurrentTime = Convert.ToDateTime(formattedTime);

            int length = weatherResult.Temperature.Length;
            string celsius = weatherResult.Temperature.Substring(weatherResult.Temperature.IndexOf("(") + 1, length - (weatherResult.Temperature.IndexOf(")") - 1));
            data.Temp.AddCelsius(Convert.ToDouble(celsius));

            return data;
        }
        public ActionResult Index(WeatherData weatherData)
        {
            weatherData.AverageTemperature = string.Empty;
            weatherData.AverageWindSpeed = string.Empty;
            if (weatherData.Location == null)
            {
                ViewBag.ErrorDescription = "You must supply a location";
                ModelState.Clear();
                return View(weatherData);
            }

            var client = new RestClient("http://localhost:50082/api");
            var request = new RestRequest("weather/" + weatherData.Location);
            var response = client.Execute(request);
            if (response.StatusCode != HttpStatusCode.OK)
            {
                ViewBag.ErrorDescription = "An error has occurred calling WeatherFinder service";
                ModelState.Clear();
                return View(weatherData);
            }
            var results = JsonConvert.DeserializeObject<AverageWeatherResult>(response.Content);
            if (results.Status != HttpStatusCode.OK)
            {
                ViewBag.ErrorDescription = "An error has occurred calling a weather provider";
                ModelState.Clear();
                return View(weatherData);
            }
            switch (weatherData.TemperatureUnits)
            {
                case "Celsius":
                    weatherData.AverageTemperature = Math.Round(results.AverageTemperatureCelsius).ToString();
                    break;
                case "Fahrenheit":
                    weatherData.AverageTemperature = Math.Round(results.AverageTemperatureFahrenheit).ToString();
                    break;
            }
            switch (weatherData.WindSpeedUnits)
            {
                case "Kph":
                    weatherData.AverageWindSpeed = Math.Round(results.AverageWindSpeedKph).ToString();
                    break;
                case "Mph":
                    weatherData.AverageWindSpeed = Math.Round(results.AverageWindSpeedMph).ToString();
                    break;
            }

            ViewBag.ErrorDescription = string.Empty;
            ModelState.Clear();
            return View(weatherData);
        }