aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Kernel/TcpManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Common/Kernel/TcpManager.cs')
-rw-r--r--MediaBrowser.Common/Kernel/TcpManager.cs78
1 files changed, 57 insertions, 21 deletions
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>