Ejemplo n.º 1
0
        /// <summary>
        /// Обрабатываем базу городов
        /// </summary>
        /// <param name="cityStream"></param>
        static void ProceedCities(Stream cityStream)
        {
            Console.Write("Загружаем локации... ");

            LoadService service = new LoadService();
            string[] data;
            Int32 id;
            string locationName, regionName, areaName;
            Decimal latitlude, longitude;

            using (DataReader reader = new DataReader(cityStream))
            {
                while (reader.HasMore())
                {
                    data = reader.Next();
                    locationName = data[1];
                    regionName = data[2];
                    areaName = data[3];

                    if (!Int32.TryParse(data[0], out id))
                    {
                        Console.WriteLine("Ошибка при чтении локаций: неверный формат идентификатора локации");
                        Environment.Exit(1);
                    }

                    if (!Decimal.TryParse(data[4].Replace('.', ','), out latitlude))
                    {
                        Console.WriteLine("Ошибка при чтении локаций: неверный формат широты центра локации");
                        Environment.Exit(1);
                    }

                    if (!Decimal.TryParse(data[5].Replace('.', ','), out longitude))
                    {
                        Console.WriteLine("Ошибка при чтении локаций: неверный формат долготы центра локации");
                        Environment.Exit(1);
                    }

                    Area area = service.GetOrCreateArea(areaName);
                    Region region = service.GetOrCreateRegion(regionName, area);
                    service.UpdateOrCreateLocation(id, locationName, latitlude, longitude, region);
                }
            }

            Console.WriteLine("Локации успешно загружены.");
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Обрабатываем базу диапазонов ip-адресов
        /// </summary>
        /// <param name="cityStream"></param>
        static void ProceedRanges(Stream rangeStream)
        {
            Console.Write("Загружаем диапазоны ip-адресов... ");

            using (DataReader reader = new DataReader(rangeStream))
            {
                using (BlockingCollection<string[]> bc = new BlockingCollection<string[]>())
                {
                    using (Task loadTask = Task.Factory.StartNew(() =>
                        {
                            while (reader.HasMore())
                            {
                                bc.Add(reader.Next());
                            }

                            bc.CompleteAdding();
                        }))
                    {
                        Action storeAction = () =>
                        {
                            LoadService service = new LoadService();
                            string[] data;
                            long start, end;
                            string description, country;
                            Location location = null;
                            int locationId;

                            while (bc.TryTake(out data))
                            {
                                description = data[2];
                                country = data[3];

                                if (!long.TryParse(data[0], out start))
                                {
                                    Console.WriteLine("Ошибка при чтении диапазонов ip-фдресов: неверный формат начала диапазона");
                                    Environment.Exit(1);
                                }

                                if (!long.TryParse(data[1], out end))
                                {
                                    Console.WriteLine("Ошибка при чтении диапазонов ip-фдресов: неверный формат конца диапазона");
                                    Environment.Exit(1);
                                }

                                location = (data[4] != "-") && Int32.TryParse(data[4], out locationId) ? service.GetLocation(locationId) : null;
                                service.UpdateOrCreateRange(start, end, description, country, location);
                            }
                        };

                        Parallel.Invoke(storeAction, storeAction, storeAction);
                    }
                }
            }

            //string[] data;
            //long start, end;
            //string description, country;
            //Location location = null;
            //int locationId;

            //while (reader.HasMore())
            //{
            //    data = reader.Next();
            //    description = data[2];
            //    country = data[3];

            //    if (!long.TryParse(data[0], out start))
            //    {
            //        Console.WriteLine("Ошибка при чтении диапазонов ip-фдресов: неверный формат начала диапазона");
            //        Environment.Exit(1);
            //    }

            //    if (!long.TryParse(data[1], out end))
            //    {
            //        Console.WriteLine("Ошибка при чтении диапазонов ip-фдресов: неверный формат конца диапазона");
            //        Environment.Exit(1);
            //    }

            //    location = (data[4] != "-") && Int32.TryParse(data[4], out locationId) ? service.GetLocation(locationId) : null;
            //    service.UpdateOrCreateRange(start, end, description, country, location);
            //}

            Console.WriteLine("Диапазоны ip-адресов успешно загружены.");
        }