diff options
Diffstat (limited to 'MediaBrowser.Common/Kernel')
| -rw-r--r-- | MediaBrowser.Common/Kernel/BaseKernel.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/BaseManager.cs | 49 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/IApplicationHost.cs | 7 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/TcpManager.cs | 78 |
4 files changed, 65 insertions, 72 deletions
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 2b9550496..08e8c3e75 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Events; -using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.ScheduledTasks; @@ -396,7 +395,7 @@ namespace MediaBrowser.Common.Kernel await ReloadComposableParts().ConfigureAwait(false); DisposeTcpManager(); - TcpManager = new TcpManager(ApplicationHost, this, Logger); + TcpManager = new TcpManager(ApplicationHost, this, ApplicationHost.Resolve<INetworkManager>(), Logger); } /// <summary> diff --git a/MediaBrowser.Common/Kernel/BaseManager.cs b/MediaBrowser.Common/Kernel/BaseManager.cs deleted file mode 100644 index 3d830caef..000000000 --- a/MediaBrowser.Common/Kernel/BaseManager.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; - -namespace MediaBrowser.Common.Kernel -{ - /// <summary> - /// Class BaseManager - /// </summary> - /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam> - public abstract class BaseManager<TKernelType> : IDisposable - where TKernelType : class, IKernel - { - /// <summary> - /// The _kernel - /// </summary> - protected readonly TKernelType Kernel; - - /// <summary> - /// Initializes a new instance of the <see cref="BaseManager" /> class. - /// </summary> - /// <param name="kernel">The kernel.</param> - /// <exception cref="System.ArgumentNullException">kernel</exception> - protected BaseManager(TKernelType kernel) - { - if (kernel == null) - { - throw new ArgumentNullException("kernel"); - } - - Kernel = kernel; - } - - /// <summary> - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// </summary> - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// <summary> - /// Releases unmanaged and - optionally - managed resources. - /// </summary> - /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> - protected virtual void Dispose(bool dispose) - { - } - } -} diff --git a/MediaBrowser.Common/Kernel/IApplicationHost.cs b/MediaBrowser.Common/Kernel/IApplicationHost.cs index ae2e71667..dccb65b2a 100644 --- a/MediaBrowser.Common/Kernel/IApplicationHost.cs +++ b/MediaBrowser.Common/Kernel/IApplicationHost.cs @@ -59,6 +59,13 @@ namespace MediaBrowser.Common.Kernel void Register<T>(T obj) where T : class; /// <summary> + /// Registers the specified service type. + /// </summary> + /// <param name="serviceType">Type of the service.</param> + /// <param name="implementation">Type of the implementation.</param> + void Register(Type serviceType, Type implementation); + + /// <summary> /// Resolves this instance. /// </summary> /// <typeparam name="T"></typeparam> diff --git a/MediaBrowser.Common/Kernel/TcpManager.cs b/MediaBrowser.Common/Kernel/TcpManager.cs index 086815cbf..0b171c492 100644 --- a/MediaBrowser.Common/Kernel/TcpManager.cs +++ b/MediaBrowser.Common/Kernel/TcpManager.cs @@ -22,7 +22,7 @@ namespace MediaBrowser.Common.Kernel /// <summary> /// Manages the Http Server, Udp Server and WebSocket connections /// </summary> - public class TcpManager : BaseManager<IKernel> + public class TcpManager : IDisposable { /// <summary> /// This is the udp server used for server discovery by clients @@ -66,6 +66,11 @@ namespace MediaBrowser.Common.Kernel private readonly ILogger _logger; /// <summary> + /// The _network manager + /// </summary> + private readonly INetworkManager _networkManager; + + /// <summary> /// The _application host /// </summary> private readonly IApplicationHost _applicationHost; @@ -76,6 +81,11 @@ namespace MediaBrowser.Common.Kernel private bool? _supportsNativeWebSocket; /// <summary> + /// The _kernel + /// </summary> + private readonly IKernel _kernel; + + /// <summary> /// Gets a value indicating whether [supports web socket]. /// </summary> /// <value><c>true</c> if [supports web socket]; otherwise, <c>false</c>.</value> @@ -107,7 +117,7 @@ namespace MediaBrowser.Common.Kernel /// <value>The web socket port number.</value> public int WebSocketPortNumber { - get { return SupportsNativeWebSocket ? Kernel.Configuration.HttpServerPortNumber : Kernel.Configuration.LegacyWebSocketPortNumber; } + get { return SupportsNativeWebSocket ? _kernel.Configuration.HttpServerPortNumber : _kernel.Configuration.LegacyWebSocketPortNumber; } } /// <summary> @@ -115,12 +125,31 @@ namespace MediaBrowser.Common.Kernel /// </summary> /// <param name="applicationHost">The application host.</param> /// <param name="kernel">The kernel.</param> + /// <param name="networkManager">The network manager.</param> /// <param name="logger">The logger.</param> - public TcpManager(IApplicationHost applicationHost, IKernel kernel, ILogger logger) - : base(kernel) + public TcpManager(IApplicationHost applicationHost, IKernel kernel, INetworkManager networkManager, ILogger logger) { + if (applicationHost == null) + { + throw new ArgumentNullException("applicationHost"); + } + if (kernel == null) + { + throw new ArgumentNullException("kernel"); + } + if (networkManager == null) + { + throw new ArgumentNullException("networkManager"); + } + if (logger == null) + { + throw new ArgumentNullException("logger"); + } + _logger = logger; + _kernel = kernel; _applicationHost = applicationHost; + _networkManager = networkManager; if (kernel.IsFirstRun) { @@ -142,14 +171,14 @@ namespace MediaBrowser.Common.Kernel private void ReloadExternalWebSocketServer() { // Avoid windows firewall prompts in the ui - if (Kernel.KernelContext != KernelContext.Server) + if (_kernel.KernelContext != KernelContext.Server) { return; } DisposeExternalWebSocketServer(); - ExternalWebSocketServer = new WebSocketServer(Kernel.Configuration.LegacyWebSocketPortNumber, IPAddress.Any) + ExternalWebSocketServer = new WebSocketServer(_kernel.Configuration.LegacyWebSocketPortNumber, IPAddress.Any) { OnConnected = OnAlchemyWebSocketClientConnected, TimeOut = TimeSpan.FromMinutes(60) @@ -178,7 +207,7 @@ namespace MediaBrowser.Common.Kernel public void ReloadHttpServer(bool registerServerOnFailure = true) { // Only reload if the port has changed, so that we don't disconnect any active users - if (HttpServer != null && HttpServer.UrlPrefix.Equals(Kernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase)) + if (HttpServer != null && HttpServer.UrlPrefix.Equals(_kernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase)) { return; } @@ -189,7 +218,7 @@ namespace MediaBrowser.Common.Kernel try { - HttpServer = new HttpServer(Kernel.HttpServerUrlPrefix, "Media Browser", _applicationHost, Kernel, _logger); + HttpServer = new HttpServer(_kernel.HttpServerUrlPrefix, "Media Browser", _applicationHost, _kernel, _logger); } catch (HttpListenerException ex) { @@ -229,7 +258,7 @@ namespace MediaBrowser.Common.Kernel /// <param name="result">The result.</param> private async void ProcessWebSocketMessageReceived(WebSocketMessageInfo result) { - var tasks = Kernel.WebSocketListeners.Select(i => Task.Run(async () => + var tasks = _kernel.WebSocketListeners.Select(i => Task.Run(async () => { try { @@ -256,7 +285,7 @@ namespace MediaBrowser.Common.Kernel } // Avoid windows firewall prompts in the ui - if (Kernel.KernelContext != KernelContext.Server) + if (_kernel.KernelContext != KernelContext.Server) { return; } @@ -266,7 +295,7 @@ namespace MediaBrowser.Common.Kernel try { // The port number can't be in configuration because we don't want it to ever change - UdpServer = new UdpServer(new IPEndPoint(IPAddress.Any, Kernel.UdpServerPortNumber)); + UdpServer = new UdpServer(new IPEndPoint(IPAddress.Any, _kernel.UdpServerPortNumber)); } catch (SocketException ex) { @@ -276,7 +305,7 @@ namespace MediaBrowser.Common.Kernel UdpListener = UdpServer.Subscribe(async res => { - var expectedMessage = String.Format("who is MediaBrowser{0}?", Kernel.KernelContext); + var expectedMessage = String.Format("who is MediaBrowser{0}?", _kernel.KernelContext); var expectedMessageBytes = Encoding.UTF8.GetBytes(expectedMessage); if (expectedMessageBytes.SequenceEqual(res.Buffer)) @@ -284,7 +313,7 @@ namespace MediaBrowser.Common.Kernel _logger.Info("Received UDP server request from " + res.RemoteEndPoint.ToString()); // Send a response back with our ip address and port - var response = String.Format("MediaBrowser{0}|{1}:{2}", Kernel.KernelContext, NetUtils.GetLocalIpAddress(), Kernel.UdpServerPortNumber); + var response = String.Format("MediaBrowser{0}|{1}:{2}", _kernel.KernelContext, _networkManager.GetLocalIpAddress(), _kernel.UdpServerPortNumber); await UdpServer.SendAsync(response, res.RemoteEndPoint); } @@ -422,7 +451,7 @@ namespace MediaBrowser.Common.Kernel private void RegisterServerWithAdministratorAccess() { // Create a temp file path to extract the bat file to - var tmpFile = Path.Combine(Kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".bat"); + var tmpFile = Path.Combine(_kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".bat"); // Extract the bat file using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Common.Kernel.RegisterServer.bat")) @@ -437,10 +466,10 @@ namespace MediaBrowser.Common.Kernel { FileName = tmpFile, - Arguments = string.Format("{0} {1} {2} {3}", Kernel.Configuration.HttpServerPortNumber, - Kernel.HttpServerUrlPrefix, - Kernel.UdpServerPortNumber, - Kernel.Configuration.LegacyWebSocketPortNumber), + Arguments = string.Format("{0} {1} {2} {3}", _kernel.Configuration.HttpServerPortNumber, + _kernel.HttpServerUrlPrefix, + _kernel.UdpServerPortNumber, + _kernel.Configuration.LegacyWebSocketPortNumber), CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, @@ -455,18 +484,25 @@ namespace MediaBrowser.Common.Kernel } /// <summary> + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// </summary> + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// <summary> /// Releases unmanaged and - optionally - managed resources. /// </summary> /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> - protected override void Dispose(bool dispose) + protected virtual void Dispose(bool dispose) { if (dispose) { DisposeUdpServer(); DisposeHttpServer(); } - - base.Dispose(dispose); } /// <summary> |
