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();
}
public override string ToString()
{
return $"[{string.Join(", ", this.addressElapseds.Select(item => item.Adddress))}]";
}
}
}