HttpServer.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. using System.Net;
  3. using System.Reactive.Linq;
  4. namespace MediaBrowser.Common.Net
  5. {
  6. public class HttpServer : IObservable<HttpListenerContext>, IDisposable
  7. {
  8. private readonly HttpListener listener;
  9. private readonly IObservable<HttpListenerContext> stream;
  10. public HttpServer(string url)
  11. {
  12. listener = new HttpListener();
  13. listener.Prefixes.Add(url);
  14. listener.Start();
  15. stream = ObservableHttpContext();
  16. }
  17. private IObservable<HttpListenerContext> ObservableHttpContext()
  18. {
  19. return Observable.Create<HttpListenerContext>(obs =>
  20. Observable.FromAsyncPattern<HttpListenerContext>(listener.BeginGetContext,
  21. listener.EndGetContext)()
  22. .Subscribe(obs))
  23. .Repeat()
  24. .Retry()
  25. .Publish()
  26. .RefCount();
  27. }
  28. public void Dispose()
  29. {
  30. listener.Stop();
  31. }
  32. public IDisposable Subscribe(IObserver<HttpListenerContext> observer)
  33. {
  34. return stream.Subscribe(observer);
  35. }
  36. }
  37. }