IPAddressElapsedCollection.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.Linq;
  6. namespace FastGithub.DomainResolve
  7. {
  8. /// <summary>
  9. /// IP延时集合
  10. /// </summary>
  11. [DebuggerDisplay("Count={Count} IsExpired={IsExpired}")]
  12. sealed class IPAddressElapsedCollection : IEnumerable<IPAddressElapsed>
  13. {
  14. private readonly List<IPAddressElapsed> addressElapseds;
  15. private readonly int creationTickCount = Environment.TickCount;
  16. private static readonly int maxLifeTime = 60 * 1000;
  17. /// <summary>
  18. /// 获取空的
  19. /// </summary>
  20. public static IPAddressElapsedCollection Empty = new();
  21. /// <summary>
  22. /// 获取数量
  23. /// </summary>
  24. public int Count => this.addressElapseds.Count;
  25. /// <summary>
  26. /// 获取是否为空
  27. /// </summary>
  28. public bool IsEmpty => this.addressElapseds.Count == 0;
  29. /// <summary>
  30. /// 获取是否已过期
  31. /// </summary>
  32. public bool IsExpired => Environment.TickCount - this.creationTickCount > maxLifeTime;
  33. /// <summary>
  34. /// IP延时集合
  35. /// </summary>
  36. private IPAddressElapsedCollection()
  37. {
  38. this.addressElapseds = new List<IPAddressElapsed>();
  39. this.creationTickCount = 0;
  40. }
  41. /// <summary>
  42. /// IP延时集合
  43. /// </summary>
  44. /// <param name="addressElapsed"></param>
  45. public IPAddressElapsedCollection(IPAddressElapsed addressElapsed)
  46. {
  47. this.addressElapseds = new List<IPAddressElapsed> { addressElapsed };
  48. }
  49. /// <summary>
  50. /// IP延时集合
  51. /// </summary>
  52. /// <param name="addressElapseds"></param>
  53. public IPAddressElapsedCollection(IEnumerable<IPAddressElapsed> addressElapseds)
  54. {
  55. this.addressElapseds = addressElapseds.OrderBy(item => item.Elapsed).ToList();
  56. }
  57. /// <summary>
  58. /// 获取迭代器
  59. /// </summary>
  60. /// <returns></returns>
  61. public IEnumerator<IPAddressElapsed> GetEnumerator()
  62. {
  63. return this.addressElapseds.GetEnumerator();
  64. }
  65. IEnumerator IEnumerable.GetEnumerator()
  66. {
  67. return this.addressElapseds.GetEnumerator();
  68. }
  69. }
  70. }