From 93b42641d23cf675b74d4bdaf6d6ece07fbb8900 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sat, 8 Sep 2012 10:52:13 -0400 Subject: Switched to MEF to register http handlers --- MediaBrowser.Common/Kernel/BaseKernel.cs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'MediaBrowser.Common/Kernel/BaseKernel.cs') diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 1139fecb9..a4fa91976 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.Logging; using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Configuration; @@ -35,12 +36,23 @@ namespace MediaBrowser.Common.Kernel [ImportMany(typeof(BasePlugin))] public IEnumerable Plugins { get; private set; } + /// + /// Gets the list of currently registered http handlers + /// + [ImportMany(typeof(BaseHandler))] + private IEnumerable HttpHandlers { get; set; } + /// /// Both the UI and server will have a built-in HttpServer. /// People will inevitably want remote control apps so it's needed in the UI too. /// public HttpServer HttpServer { get; private set; } + /// + /// This subscribes to HttpListener requests and finds the appropate BaseHandler to process it + /// + private IDisposable HttpListener { get; set; } + protected virtual string HttpServerUrlPrefix { get @@ -186,6 +198,21 @@ namespace MediaBrowser.Common.Kernel DisposeHttpServer(); HttpServer = new HttpServer(HttpServerUrlPrefix); + + HttpListener = HttpServer.Subscribe((ctx) => + { + BaseHandler handler = HttpHandlers.FirstOrDefault(h => h.HandlesRequest(ctx.Request)); + + // Find the appropiate http handler + if (handler != null) + { + // Need to create a new instance because handlers are currently stateful + handler = Activator.CreateInstance(handler.GetType()) as BaseHandler; + + // No need to await this, despite the compiler warning + handler.ProcessRequest(ctx); + } + }); } /// @@ -249,6 +276,11 @@ namespace MediaBrowser.Common.Kernel { HttpServer.Dispose(); } + + if (HttpListener != null) + { + HttpListener.Dispose(); + } } /// -- cgit v1.2.3