HttpListenerPrefixCollection.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. List<string> prefixes = new List<string>();
  10. HttpListener listener;
  11. private ILogger _logger;
  12. internal HttpListenerPrefixCollection(ILogger logger, HttpListener listener)
  13. {
  14. _logger = logger;
  15. this.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. return;
  26. prefixes.Add(uriPrefix);
  27. if (listener.IsListening)
  28. HttpEndPointManager.AddPrefix(_logger, uriPrefix, listener);
  29. }
  30. public void Clear()
  31. {
  32. listener.CheckDisposed();
  33. prefixes.Clear();
  34. if (listener.IsListening)
  35. HttpEndPointManager.RemoveListener(_logger, listener);
  36. }
  37. public bool Contains(string uriPrefix)
  38. {
  39. listener.CheckDisposed();
  40. return prefixes.Contains(uriPrefix);
  41. }
  42. public void CopyTo(string[] array, int offset)
  43. {
  44. listener.CheckDisposed();
  45. prefixes.CopyTo(array, offset);
  46. }
  47. public void CopyTo(Array array, int offset)
  48. {
  49. listener.CheckDisposed();
  50. ((ICollection)prefixes).CopyTo(array, offset);
  51. }
  52. public IEnumerator<string> GetEnumerator()
  53. {
  54. return prefixes.GetEnumerator();
  55. }
  56. IEnumerator IEnumerable.GetEnumerator()
  57. {
  58. return prefixes.GetEnumerator();
  59. }
  60. public bool Remove(string uriPrefix)
  61. {
  62. listener.CheckDisposed();
  63. if (uriPrefix == null)
  64. throw new ArgumentNullException(nameof(uriPrefix));
  65. bool result = prefixes.Remove(uriPrefix);
  66. if (result && listener.IsListening)
  67. HttpEndPointManager.RemovePrefix(_logger, uriPrefix, listener);
  68. return result;
  69. }
  70. }
  71. }