using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace FastGithub.DomainResolve { /// /// IP延时集合 /// [DebuggerDisplay("Count={Count} IsExpired={IsExpired}")] sealed class IPAddressElapsedCollection : IEnumerable { private readonly List addressElapseds; private readonly int creationTickCount = Environment.TickCount; private static readonly int maxLifeTime = 60 * 1000; /// /// 获取空的 /// public static IPAddressElapsedCollection Empty = new(); /// /// 获取数量 /// public int Count => this.addressElapseds.Count; /// /// 获取是否为空 /// public bool IsEmpty => this.addressElapseds.Count == 0; /// /// 获取是否已过期 /// public bool IsExpired => Environment.TickCount - this.creationTickCount > maxLifeTime; /// /// IP延时集合 /// private IPAddressElapsedCollection() { this.addressElapseds = new List(); this.creationTickCount = 0; } /// /// IP延时集合 /// /// public IPAddressElapsedCollection(IPAddressElapsed addressElapsed) { this.addressElapseds = new List { addressElapsed }; } /// /// IP延时集合 /// /// public IPAddressElapsedCollection(IEnumerable addressElapseds) { this.addressElapseds = addressElapseds.OrderBy(item => item.Elapsed).ToList(); } /// /// 获取迭代器 /// /// public IEnumerator GetEnumerator() { return this.addressElapseds.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return this.addressElapseds.GetEnumerator(); } } }