From b50f78e5da6f3fdfc59e577ca61b88771da7d211 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Thu, 12 Jul 2012 02:55:27 -0400 Subject: Initial check-in --- MediaBrowser.Controller/Net/HttpServer.cs | 47 +++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 MediaBrowser.Controller/Net/HttpServer.cs (limited to 'MediaBrowser.Controller/Net/HttpServer.cs') diff --git a/MediaBrowser.Controller/Net/HttpServer.cs b/MediaBrowser.Controller/Net/HttpServer.cs new file mode 100644 index 000000000..bb014ca5a --- /dev/null +++ b/MediaBrowser.Controller/Net/HttpServer.cs @@ -0,0 +1,47 @@ +using System; +using System.Net; +using System.Reactive.Linq; + +namespace MediaBrowser.Controller.Net +{ + public class HttpServer : IObservable, IDisposable + { + private readonly HttpListener listener; + private readonly IObservable stream; + + public HttpServer(int port) + : this("http://+:" + port + "/") + { + } + + public HttpServer(string url) + { + listener = new HttpListener(); + listener.Prefixes.Add(url); + listener.Start(); + stream = ObservableHttpContext(); + } + + private IObservable ObservableHttpContext() + { + return Observable.Create(obs => + Observable.FromAsyncPattern(listener.BeginGetContext, + listener.EndGetContext)() + .Select(c => new RequestContext(c)) + .Subscribe(obs)) + .Repeat() + .Retry() + .Publish() + .RefCount(); + } + public void Dispose() + { + listener.Stop(); + } + + public IDisposable Subscribe(IObserver observer) + { + return stream.Subscribe(observer); + } + } +} \ No newline at end of file -- cgit v1.2.3