Beispiel #1
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-адресов успешно загружены.");
        }