HttpListenerPrefixCollection.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using Microsoft.Extensions.Logging;
  5. namespace SocketHttpListener.Net
  6. {
  7. public class HttpListenerPrefixCollection : ICollection<string>, IEnumerable<string>, IEnumerable
  8. {
  9. private List<string> _prefixes = new List<string>();
  10. private HttpListener _listener;
  11. private ILogger _logger;
  12. internal HttpListenerPrefixCollection(ILogger logger, HttpListener listener)
  13. {
  14. _logger = logger;
  15. _listener = listener;
  16. }
  17. public int Count => _prefixes.Count;
  18. public bool IsReadOnly => false;
  19. public bool IsSynchronized => false;
  20. public void Add(string uriPrefix)
  21. {
  22. _listener.CheckDisposed();
  23. //ListenerPrefix.CheckUri(uriPrefix);
  24. if (_prefixes.Contains(uriPrefix))
  25. {
  26. return;
  27. }
  28. _prefixes.Add(uriPrefix);
  29. if (_listener.IsListening)
  30. {
  31. HttpEndPointManager.AddPrefix(_logger, uriPrefix, _listener);
  32. }
  33. }
  34. public void AddRange(IEnumerable<string> uriPrefixes)
  35. {
  36. _listener.CheckDisposed();
  37. foreach (var uriPrefix in uriPrefixes)
  38. {
  39. if (_prefixes.Contains(uriPrefix))
  40. {
  41. continue;
  42. }
  43. _prefixes.Add(uriPrefix);
  44. if (_listener.IsListening)
  45. {
  46. HttpEndPointManager.AddPrefix(_logger, uriPrefix, _listener);
  47. }
  48. }
  49. }
  50. public void Clear()
  51. {
  52. _listener.CheckDisposed();
  53. _prefixes.Clear();
  54. if (_listener.IsListening)
  55. {
  56. HttpEndPointManager.RemoveListener(_logger, _listener);
  57. }
  58. }
  59. public bool Contains(string uriPrefix)
  60. {
  61. _listener.CheckDisposed();
  62. return _prefixes.Contains(uriPrefix);
  63. }
  64. public void CopyTo(string[] array, int offset)
  65. {
  66. _listener.CheckDisposed();
  67. _prefixes.CopyTo(array, offset);
  68. }
  69. public void CopyTo(Array array, int offset)
  70. {
  71. _listener.CheckDisposed();
  72. ((ICollection)_prefixes).CopyTo(array, offset);
  73. }
  74. public IEnumerator<string> GetEnumerator()
  75. {
  76. return _prefixes.GetEnumerator();
  77. }
  78. IEnumerator IEnumerable.GetEnumerator()
  79. {
  80. return _prefixes.GetEnumerator();
  81. }
  82. public bool Remove(string uriPrefix)
  83. {
  84. _listener.CheckDisposed();
  85. if (uriPrefix == null)
  86. {
  87. throw new ArgumentNullException(nameof(uriPrefix));
  88. }
  89. bool result = _prefixes.Remove(uriPrefix);
  90. if (result && _listener.IsListening)
  91. {
  92. HttpEndPointManager.RemovePrefix(_logger, uriPrefix, _listener);
  93. }
  94. return result;
  95. }
  96. }
  97. }