/// <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("Локации успешно загружены."); }
/// <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-адресов успешно загружены."); }
/// <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-адресов успешно загружены."); }