/// <summary> /// Процедура проверки включения указанного диапазона ip-адресов в правило выбора цели /// </summary> /// <param name="range">Диапазон ip-адресов</param> /// <returns></returns> public override RuleKind Proceed(Range range) { if (range.LocationId.HasValue && (range.LocationId.Value == LocationId)) { return Kind; } return RuleKind.Maybe; }
/// <summary> /// Процедура проверки включения указанного диапазона ip-адресов в правило выбора цели /// </summary> /// <param name="range">Диапазон ip-адресов</param> /// <returns></returns> public override RuleKind Proceed(Range range) { if (range.Location != null) { Location location = range.Location; if (location.RegionId == RegionId) { return Kind; } } return RuleKind.Maybe; }
/// <summary> /// Проверяет соответствие диапазона ip-адресов данной цели /// </summary> /// <param name="range"></param> /// <returns></returns> public bool IsSatisfied(Range range) { bool satisfied = false; foreach (RuleBase rule in Rules) { switch (rule.Proceed(range)) { case RuleKind.Include: satisfied = true; break; case RuleKind.Exclude: return false; } } return satisfied; }
/// <summary> /// Обновляет или создает диапазон ip-адресов с указанными данными /// </summary> /// <param name="start">Начало диапазона ip-адресов</param> /// <param name="end">Конец диапазона ip-адресов</param> /// <param name="description">Интервал ip-адресов в понятном виде</param> /// <param name="country">Двухсимвольный код страны</param> /// <param name="location">Географическая локация</param> /// <returns></returns> public Range UpdateOrCreateRange(long start, long end, string description, string country, Location location) { Range range = RangeRepository.FindByStartAndEnd(start, end); if (range == null) { range = new Range() { Start = start, End = end, Description = description, Country = country, Location = location }; RangeRepository.Create(range); } else if ((range.Description != description) || (range.Country != country) || (range.Location != location)) { range.Description = description; range.Country = country; range.Location = location; RangeRepository.Save(range); } return range; }
/// <summary> /// Процедура проверки включения указанного диапазона ip-адресов в правило выбора цели /// </summary> /// <param name="range">Диапазон ip-адресов</param> /// <returns></returns> public abstract RuleKind Proceed(Range range);
/// <summary> /// Процедура проверки включения указанного диапазона ip-адресов в правило выбора цели /// </summary> /// <param name="range">Диапазон ip-адресов</param> /// <returns></returns> public override RuleKind Proceed(Range range) { if (range.Country == Country) return Kind; return RuleKind.Maybe; }
/// <summary> /// Находит цель геолокации, в которую попадает указанный диапазон ip-адресов /// </summary> /// <param name="range">Диапазон ip-адресов</param> /// <returns></returns> public Target Resolve(Range range) { if (range == null) return null; foreach (Target t in TargetRepository.FindAllWithRules()) { if (t.IsSatisfied(range)) { return t; } } return null; }