/// <summary>
        /// Get traffic status for region by <paramref name="regionCode"/>.
        /// </summary>
        /// <param name="regionCode"></param>
        /// <returns></returns>
        public Task <RegionTrafficStatus> GetRegionTrafficStatusAsync(string regionCode, DateTimeOffset dateTimeNow)
        {
            if (string.IsNullOrWhiteSpace(regionCode))
            {
                throw new ArgumentException("Argument is not valid!", nameof(regionCode));
            }

            return(Task.Run(() =>
            {
                var random = new Random();

                string title = "SomeTitle_" + regionCode;
                var randomLevel = random.Next(1, 5).ToString();
                var randomIconId = random.Next(1, 3);
                var randomMessageId = random.Next(1, 3);

                var iconText = Icons.Where(icon => icon.Key == randomIconId).Single().Value;
                var messageText = Messages.Where(icon => icon.Key == randomMessageId).Single().Value;


                var regionTrafficStatus = new RegionTrafficStatus(
                    regionCode,
                    title,
                    dateTimeNow,
                    randomLevel,
                    iconText,
                    messageText);

                return regionTrafficStatus;
            }));
        }
示例#2
0
        /// <summary>
        /// Get traffic status for region by regionCode.
        /// </summary>
        /// <param name="regionCode"></param>
        /// <param name="dateTimeNow"></param>
        /// <returns></returns>
        public async Task <RegionTrafficStatus> GetRegionTrafficStatusAsync(string regionCode, DateTimeOffset dateTimeNow)
        {
            if (string.IsNullOrWhiteSpace(regionCode))
            {
                throw new ArgumentException("Argument is not valid!", nameof(regionCode));
            }

            string url    = $@"https://export.yandex.com/bar/reginfo.xml?region={regionCode}&bustCache={dateTimeNow}";
            var    xmlDoc = new XmlDocument();

            try
            {
                var response = await Client.GetAsync(url);

                response.EnsureSuccessStatusCode();

                var stream = await response.Content.ReadAsStreamAsync();

                xmlDoc.Load(stream);

                var title = xmlDoc.SelectSingleNode("//title")?.InnerText ?? "There is no available information!";
                var level = xmlDoc.SelectSingleNode("//level")?.InnerText ?? "There is no available information!";
                var icon  = xmlDoc.SelectSingleNode("//icon")?.InnerText ?? "There is no available information!";
                var text  = xmlDoc.SelectSingleNode("//hint[@lang='en']")?.InnerText ?? "There is no available information!";

                var regionTrafficStatus = new RegionTrafficStatus(
                    regionCode,
                    title,
                    dateTimeNow,
                    level,
                    icon,
                    text);

                return(regionTrafficStatus);
            }
            catch (Exception exception) when(exception.Message == "Root element is missing.")
            {
                return(null);
            }
            catch (Exception exception)
            {
                throw new TrafficServiceException("Could not read results of request to yandex", exception);
            }
        }
        public async Task <RegionTrafficStatusModel> AddRegionTrafficStatusAsync(RegionTrafficStatus result)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            using (var context = this.TrafficDataServiceProvider.GetDataService())
            {
                var regionToUpdate = context.Regions.FirstOrDefault(region => region.RegionCode == result.RegionCode);

                var regionTrafficStatusModel = new RegionTrafficStatusModel();

                if (regionToUpdate == null)
                {
                    regionToUpdate                       = new RegionModel();
                    regionToUpdate.Id                    = Guid.NewGuid();
                    regionToUpdate.RegionCode            = result.RegionCode;
                    regionToUpdate.RegionName            = result.Title;
                    regionToUpdate.RegionTrafficStatuses = new List <RegionTrafficStatusModel> {
                        regionTrafficStatusModel
                    };
                }

                regionTrafficStatusModel.Id             = Guid.NewGuid();
                regionTrafficStatusModel.DateTimeNow    = result.Time;
                regionTrafficStatusModel.Region         = regionToUpdate;
                regionTrafficStatusModel.RegionId       = regionToUpdate.Id;
                regionTrafficStatusModel.TrafficIcon    = result.Icon;
                regionTrafficStatusModel.TrafficLevel   = result.Level;
                regionTrafficStatusModel.TrafficMessage = result.Text;

                context.Add(regionTrafficStatusModel);

                await context.SaveChangesAsync();

                return(regionTrafficStatusModel);
            }
        }