2
0

GithubContext.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using System.Net;
  3. using System.Threading;
  4. namespace FastGithub.Scanner
  5. {
  6. /// <summary>
  7. /// Github扫描上下文
  8. /// </summary>
  9. sealed class GithubContext : DomainAddress, IEquatable<GithubContext>
  10. {
  11. /// <summary>
  12. /// 获取或设置是否可用
  13. /// </summary>
  14. public bool Available { get; set; }
  15. /// <summary>
  16. /// 设置取消令牌
  17. /// </summary>
  18. public CancellationToken CancellationToken { get; }
  19. /// <summary>
  20. /// 获取扫描历史信息
  21. /// </summary>
  22. public GithubContextHistory History { get; } = new();
  23. /// <summary>
  24. /// Github扫描上下文
  25. /// </summary>
  26. /// <param name="domain"></param>
  27. /// <param name="address"></param>
  28. public GithubContext(string domain, IPAddress address)
  29. : this(domain, address, CancellationToken.None)
  30. {
  31. }
  32. /// <summary>
  33. /// Github扫描上下文
  34. /// </summary>
  35. /// <param name="domain"></param>
  36. /// <param name="address"></param>
  37. /// <param name="cancellationToken"></param>
  38. public GithubContext(string domain, IPAddress address, CancellationToken cancellationToken)
  39. : base(domain, address)
  40. {
  41. this.CancellationToken = cancellationToken;
  42. }
  43. public bool Equals(GithubContext? other)
  44. {
  45. return base.Equals(other);
  46. }
  47. /// <summary>
  48. /// 转换为为统计信息
  49. /// </summary>
  50. /// <returns></returns>
  51. public string ToStatisticsString()
  52. {
  53. var rate = Math.Round(this.History.AvailableRate * 100, 2);
  54. return $"{{Address={this.Address}, AvailableRate={rate}%, AvgElapsed={this.History.AvgElapsed.TotalSeconds}s}}";
  55. }
  56. }
  57. }