HttpListenerPrefixCollection.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using MediaBrowser.Model.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
  18. {
  19. get { return prefixes.Count; }
  20. }
  21. public bool IsReadOnly
  22. {
  23. get { return false; }
  24. }
  25. public bool IsSynchronized
  26. {
  27. get { return false; }
  28. }
  29. public void Add(string uriPrefix)
  30. {
  31. listener.CheckDisposed();
  32. //ListenerPrefix.CheckUri(uriPrefix);
  33. if (prefixes.Contains(uriPrefix))
  34. return;
  35. prefixes.Add(uriPrefix);
  36. if (listener.IsListening)
  37. HttpEndPointManager.AddPrefix(_logger, uriPrefix, listener);
  38. }
  39. public void Clear()
  40. {
  41. listener.CheckDisposed();
  42. prefixes.Clear();
  43. if (listener.IsListening)
  44. HttpEndPointManager.RemoveListener(_logger, listener);
  45. }
  46. public bool Contains(string uriPrefix)
  47. {
  48. listener.CheckDisposed();
  49. return prefixes.Contains(uriPrefix);
  50. }
  51. public void CopyTo(string[] array, int offset)
  52. {
  53. listener.CheckDisposed();
  54. prefixes.CopyTo(array, offset);
  55. }
  56. public void CopyTo(Array array, int offset)
  57. {
  58. listener.CheckDisposed();
  59. ((ICollection)prefixes).CopyTo(array, offset);
  60. }
  61. public IEnumerator<string> GetEnumerator()
  62. {
  63. return prefixes.GetEnumerator();
  64. }
  65. IEnumerator IEnumerable.GetEnumerator()
  66. {
  67. return prefixes.GetEnumerator();
  68. }
  69. public bool Remove(string uriPrefix)
  70. {
  71. listener.CheckDisposed();
  72. if (uriPrefix == null)
  73. throw new ArgumentNullException("uriPrefix");
  74. bool result = prefixes.Remove(uriPrefix);
  75. if (result && listener.IsListening)
  76. HttpEndPointManager.RemovePrefix(_logger, uriPrefix, listener);
  77. return result;
  78. }
  79. }
  80. }