From 0a48b5e31aa712acd988626a88c52c47467945b2 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sat, 21 Jul 2012 14:39:47 -0400 Subject: Added a BaseKernel for the UI and Server to share, and made some other minor re-organizations. --- MediaBrowser.Common/Net/HttpServer.cs | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 MediaBrowser.Common/Net/HttpServer.cs (limited to 'MediaBrowser.Common/Net/HttpServer.cs') diff --git a/MediaBrowser.Common/Net/HttpServer.cs b/MediaBrowser.Common/Net/HttpServer.cs new file mode 100644 index 000000000..fad8d13eb --- /dev/null +++ b/MediaBrowser.Common/Net/HttpServer.cs @@ -0,0 +1,42 @@ +using System; +using System.Net; +using System.Reactive.Linq; + +namespace MediaBrowser.Common.Net +{ + public class HttpServer : IObservable, IDisposable + { + private readonly HttpListener listener; + private readonly IObservable stream; + + 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