aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/EntryPoints
diff options
context:
space:
mode:
authordkanada <dkanada@users.noreply.github.com>2020-01-08 01:21:09 +0900
committerdkanada <dkanada@users.noreply.github.com>2020-01-08 01:21:09 +0900
commitaca31457c06ea13042accd60e27ab61208a51577 (patch)
treeb734310d099f9b896ccce0b200ab96a3786d168b /Emby.Server.Implementations/EntryPoints
parentdee247453e7b5cab1badb6a844af690cdf80aacd (diff)
parent0b592376d59d10d14dbdd248c24f7ec6397c3508 (diff)
merge branch master into media-attachments
Diffstat (limited to 'Emby.Server.Implementations/EntryPoints')
-rw-r--r--Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs2
-rw-r--r--Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs262
-rw-r--r--Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs17
-rw-r--r--Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs2
-rw-r--r--Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs37
-rw-r--r--Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs109
-rw-r--r--Emby.Server.Implementations/EntryPoints/StartupWizard.cs21
-rw-r--r--Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs35
-rw-r--r--Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs2
9 files changed, 220 insertions, 267 deletions
diff --git a/Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs b/Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs
index 19ea09359..d69b0909d 100644
--- a/Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs
+++ b/Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs
@@ -1,3 +1,5 @@
+#pragma warning disable CS1591
+
using System;
using System.Linq;
using System.Threading;
diff --git a/Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs b/Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
index d55dc2f18..e290c62e1 100644
--- a/Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
+++ b/Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
@@ -1,10 +1,11 @@
+#pragma warning disable CS1591
+
using System;
using System.Collections.Generic;
-using System.Globalization;
using System.Net;
+using System.Text;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Plugins;
@@ -15,179 +16,105 @@ using Mono.Nat;
namespace Emby.Server.Implementations.EntryPoints
{
+ /// <summary>
+ /// Server entrypoint handling external port forwarding.
+ /// </summary>
public class ExternalPortForwarding : IServerEntryPoint
{
private readonly IServerApplicationHost _appHost;
private readonly ILogger _logger;
- private readonly IHttpClient _httpClient;
private readonly IServerConfigurationManager _config;
private readonly IDeviceDiscovery _deviceDiscovery;
+ private readonly object _createdRulesLock = new object();
+ private List<IPEndPoint> _createdRules = new List<IPEndPoint>();
private Timer _timer;
+ private string _lastConfigIdentifier;
- private NatManager _natManager;
-
- private readonly object _createdRulesLock = new object();
- private List<string> _createdRules = new List<string>();
- private readonly object _usnsHandledLock = new object();
- private List<string> _usnsHandled = new List<string>();
+ private bool _disposed = false;
- public ExternalPortForwarding(ILoggerFactory loggerFactory, IServerApplicationHost appHost, IServerConfigurationManager config, IDeviceDiscovery deviceDiscovery, IHttpClient httpClient)
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ExternalPortForwarding"/> class.
+ /// </summary>
+ /// <param name="logger">The logger.</param>
+ /// <param name="appHost">The application host.</param>
+ /// <param name="config">The configuration manager.</param>
+ /// <param name="deviceDiscovery">The device discovery.</param>
+ public ExternalPortForwarding(
+ ILogger<ExternalPortForwarding> logger,
+ IServerApplicationHost appHost,
+ IServerConfigurationManager config,
+ IDeviceDiscovery deviceDiscovery)
{
- _logger = loggerFactory.CreateLogger("PortMapper");
+ _logger = logger;
_appHost = appHost;
_config = config;
_deviceDiscovery = deviceDiscovery;
- _httpClient = httpClient;
- _config.ConfigurationUpdated += _config_ConfigurationUpdated1;
}
- private void _config_ConfigurationUpdated1(object sender, EventArgs e)
- {
- _config_ConfigurationUpdated(sender, e);
- }
-
- private string _lastConfigIdentifier;
private string GetConfigIdentifier()
{
- var values = new List<string>();
+ const char Separator = '|';
var config = _config.Configuration;
- values.Add(config.EnableUPnP.ToString());
- values.Add(config.PublicPort.ToString(CultureInfo.InvariantCulture));
- values.Add(_appHost.HttpPort.ToString(CultureInfo.InvariantCulture));
- values.Add(_appHost.HttpsPort.ToString(CultureInfo.InvariantCulture));
- values.Add(_appHost.EnableHttps.ToString());
- values.Add((config.EnableRemoteAccess).ToString());
-
- return string.Join("|", values.ToArray());
+ return new StringBuilder(32)
+ .Append(config.EnableUPnP).Append(Separator)
+ .Append(config.PublicPort).Append(Separator)
+ .Append(_appHost.HttpPort).Append(Separator)
+ .Append(_appHost.HttpsPort).Append(Separator)
+ .Append(_appHost.EnableHttps).Append(Separator)
+ .Append(config.EnableRemoteAccess).Append(Separator)
+ .ToString();
}
- private async void _config_ConfigurationUpdated(object sender, EventArgs e)
+ private void OnConfigurationUpdated(object sender, EventArgs e)
{
if (!string.Equals(_lastConfigIdentifier, GetConfigIdentifier(), StringComparison.OrdinalIgnoreCase))
{
- DisposeNat();
-
- await RunAsync();
+ Stop();
+ Start();
}
}
+ /// <inheritdoc />
public Task RunAsync()
{
- if (_config.Configuration.EnableUPnP && _config.Configuration.EnableRemoteAccess)
- {
- Start();
- }
+ Start();
- _config.ConfigurationUpdated -= _config_ConfigurationUpdated;
- _config.ConfigurationUpdated += _config_ConfigurationUpdated;
+ _config.ConfigurationUpdated += OnConfigurationUpdated;
return Task.CompletedTask;
}
private void Start()
{
- _logger.LogDebug("Starting NAT discovery");
- if (_natManager == null)
+ if (!_config.Configuration.EnableUPnP || !_config.Configuration.EnableRemoteAccess)
{
- _natManager = new NatManager(_logger, _httpClient);
- _natManager.DeviceFound += NatUtility_DeviceFound;
- _natManager.StartDiscovery();
+ return;
}
+ _logger.LogDebug("Starting NAT discovery");
+
+ NatUtility.DeviceFound += OnNatUtilityDeviceFound;
+ NatUtility.StartDiscovery();
+
_timer = new Timer(ClearCreatedRules, null, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(10));
- _deviceDiscovery.DeviceDiscovered += _deviceDiscovery_DeviceDiscovered;
+ _deviceDiscovery.DeviceDiscovered += OnDeviceDiscoveryDeviceDiscovered;
_lastConfigIdentifier = GetConfigIdentifier();
}
- private async void _deviceDiscovery_DeviceDiscovered(object sender, GenericEventArgs<UpnpDeviceInfo> e)
+ private void Stop()
{
- if (_disposed)
- {
- return;
- }
-
- var info = e.Argument;
-
- if (!info.Headers.TryGetValue("USN", out string usn)) usn = string.Empty;
-
- if (!info.Headers.TryGetValue("NT", out string nt)) nt = string.Empty;
-
- // Filter device type
- if (usn.IndexOf("WANIPConnection:", StringComparison.OrdinalIgnoreCase) == -1 &&
- nt.IndexOf("WANIPConnection:", StringComparison.OrdinalIgnoreCase) == -1 &&
- usn.IndexOf("WANPPPConnection:", StringComparison.OrdinalIgnoreCase) == -1 &&
- nt.IndexOf("WANPPPConnection:", StringComparison.OrdinalIgnoreCase) == -1)
- {
- return;
- }
-
- var identifier = string.IsNullOrWhiteSpace(usn) ? nt : usn;
-
- if (info.Location == null)
- {
- return;
- }
-
- lock (_usnsHandledLock)
- {
- if (_usnsHandled.Contains(identifier))
- {
- return;
- }
-
- _usnsHandled.Add(identifier);
- }
-
- _logger.LogDebug("Found NAT device: " + identifier);
-
- if (IPAddress.TryParse(info.Location.Host, out var address))
- {
- // The Handle method doesn't need the port
- var endpoint = new IPEndPoint(address, info.Location.Port);
-
- IPAddress localAddress = null;
-
- try
- {
- var localAddressString = await _appHost.GetLocalApiUrl(CancellationToken.None).ConfigureAwait(false);
+ _logger.LogDebug("Stopping NAT discovery");
- if (Uri.TryCreate(localAddressString, UriKind.Absolute, out var uri))
- {
- localAddressString = uri.Host;
+ NatUtility.StopDiscovery();
+ NatUtility.DeviceFound -= OnNatUtilityDeviceFound;
- if (!IPAddress.TryParse(localAddressString, out localAddress))
- {
- return;
- }
- }
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Error");
- return;
- }
+ _timer?.Dispose();
- if (_disposed)
- {
- return;
- }
-
- // This should never happen, but the Handle method will throw ArgumentNullException if it does
- if (localAddress == null)
- {
- return;
- }
-
- var natManager = _natManager;
- if (natManager != null)
- {
- await natManager.Handle(localAddress, info, endpoint, NatProtocol.Upnp).ConfigureAwait(false);
- }
- }
+ _deviceDiscovery.DeviceDiscovered -= OnDeviceDiscoveryDeviceDiscovered;
}
private void ClearCreatedRules(object state)
@@ -196,30 +123,24 @@ namespace Emby.Server.Implementations.EntryPoints
{
_createdRules.Clear();
}
-
- lock (_usnsHandledLock)
- {
- _usnsHandled.Clear();
- }
}
- void NatUtility_DeviceFound(object sender, DeviceEventArgs e)
+ private void OnDeviceDiscoveryDeviceDiscovered(object sender, GenericEventArgs<UpnpDeviceInfo> e)
{
- if (_disposed)
- {
- return;
- }
+ NatUtility.Search(e.Argument.LocalIpAddress, NatProtocol.Upnp);
+ }
+ private void OnNatUtilityDeviceFound(object sender, DeviceEventArgs e)
+ {
try
{
var device = e.Device;
CreateRules(device);
}
- catch
+ catch (Exception ex)
{
- // Commenting out because users are reporting problems out of our control
- //_logger.LogError(ex, "Error creating port forwarding rules");
+ _logger.LogError(ex, "Error creating port forwarding rules");
}
}
@@ -232,15 +153,13 @@ namespace Emby.Server.Implementations.EntryPoints
// On some systems the device discovered event seems to fire repeatedly
// This check will help ensure we're not trying to port map the same device over and over
- var address = device.LocalAddress;
-
- var addressString = address.ToString();
+ var address = device.DeviceEndpoint;
lock (_createdRulesLock)
{
- if (!_createdRules.Contains(addressString))
+ if (!_createdRules.Contains(address))
{
- _createdRules.Add(addressString);
+ _createdRules.Add(address);
}
else
{
@@ -268,54 +187,43 @@ namespace Emby.Server.Implementations.EntryPoints
}
}
- private Task CreatePortMap(INatDevice device, int privatePort, int publicPort)
+ private Task<Mapping> CreatePortMap(INatDevice device, int privatePort, int publicPort)
{
- _logger.LogDebug("Creating port map on local port {0} to public port {1} with device {2}", privatePort, publicPort, device.LocalAddress.ToString());
-
- return device.CreatePortMap(new Mapping(Protocol.Tcp, privatePort, publicPort)
- {
- Description = _appHost.Name
- });
+ _logger.LogDebug(
+ "Creating port map on local port {0} to public port {1} with device {2}",
+ privatePort,
+ publicPort,
+ device.DeviceEndpoint);
+
+ return device.CreatePortMapAsync(
+ new Mapping(Protocol.Tcp, privatePort, publicPort, 0, _appHost.Name));
}
- private bool _disposed = false;
+ /// <inheritdoc />
public void Dispose()
{
- _disposed = true;
- DisposeNat();
+ Dispose(true);
+ GC.SuppressFinalize(this);
}
- private void DisposeNat()
+ /// <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)
{
- _logger.LogDebug("Stopping NAT discovery");
-
- if (_timer != null)
+ if (_disposed)
{
- _timer.Dispose();
- _timer = null;
+ return;
}
- _deviceDiscovery.DeviceDiscovered -= _deviceDiscovery_DeviceDiscovered;
+ _config.ConfigurationUpdated -= OnConfigurationUpdated;
- var natManager = _natManager;
+ Stop();
- if (natManager != null)
- {
- _natManager = null;
+ _timer = null;
- using (natManager)
- {
- try
- {
- natManager.StopDiscovery();
- natManager.DeviceFound -= NatUtility_DeviceFound;
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Error stopping NAT Discovery");
- }
- }
- }
+ _disposed = true;
}
}
}
diff --git a/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs b/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
index 9c0db2cf5..5f938e59a 100644
--- a/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
+++ b/Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
@@ -1,3 +1,5 @@
+#pragma warning disable CS1591
+
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -21,7 +23,7 @@ namespace Emby.Server.Implementations.EntryPoints
public class LibraryChangedNotifier : IServerEntryPoint
{
/// <summary>
- /// The _library manager
+ /// The library manager.
/// </summary>
private readonly ILibraryManager _libraryManager;
@@ -30,7 +32,7 @@ namespace Emby.Server.Implementations.EntryPoints
private readonly ILogger _logger;
/// <summary>
- /// The _library changed sync lock
+ /// The library changed sync lock.
/// </summary>
private readonly object _libraryChangedSyncLock = new object();
@@ -48,7 +50,7 @@ namespace Emby.Server.Implementations.EntryPoints
private Timer LibraryUpdateTimer { get; set; }
/// <summary>
- /// The library update duration
+ /// The library update duration.
/// </summary>
private const int LibraryUpdateDuration = 30000;
@@ -188,8 +190,11 @@ namespace Emby.Server.Implementations.EntryPoints
{
if (LibraryUpdateTimer == null)
{
- LibraryUpdateTimer = new Timer(LibraryUpdateTimerCallback, null, LibraryUpdateDuration,
- Timeout.Infinite);
+ LibraryUpdateTimer = new Timer(
+ LibraryUpdateTimerCallback,
+ null,
+ LibraryUpdateDuration,
+ Timeout.Infinite);
}
else
{
@@ -452,7 +457,7 @@ namespace Emby.Server.Implementations.EntryPoints
return new[] { item };
}
- return new T[] { };
+ return Array.Empty<T>();
}
/// <summary>
diff --git a/Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs b/Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs
index 0186da9e1..dbb3503c4 100644
--- a/Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs
+++ b/Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs
@@ -1,3 +1,5 @@
+#pragma warning disable CS1591
+
using System;
using System.Linq;
using System.Threading;
diff --git a/Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs b/Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs
index 3a7516dca..f00996b5f 100644
--- a/Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs
+++ b/Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Library;
@@ -12,42 +11,51 @@ using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.EntryPoints
{
/// <summary>
- /// Class RefreshUsersMetadata
+ /// Class RefreshUsersMetadata.
/// </summary>
public class RefreshUsersMetadata : IScheduledTask, IConfigurableScheduledTask
{
private readonly ILogger _logger;
+
/// <summary>
- /// The _user manager
+ /// The user manager.
/// </summary>
private readonly IUserManager _userManager;
private IFileSystem _fileSystem;
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RefreshUsersMetadata" /> class.
+ /// </summary>
+ public RefreshUsersMetadata(ILogger logger, IUserManager userManager, IFileSystem fileSystem)
+ {
+ _logger = logger;
+ _userManager = userManager;
+ _fileSystem = fileSystem;
+ }
+
+ /// <inheritdoc />
public string Name => "Refresh Users";
+ /// <inheritdoc />
public string Key => "RefreshUsers";
+ /// <inheritdoc />
public string Description => "Refresh user infos";
+ /// <inheritdoc />
public string Category => "Library";
+ /// <inheritdoc />
public bool IsHidden => true;
+ /// <inheritdoc />
public bool IsEnabled => true;
+ /// <inheritdoc />
public bool IsLogged => true;
- /// <summary>
- /// Initializes a new instance of the <see cref="RefreshUsersMetadata" /> class.
- /// </summary>
- public RefreshUsersMetadata(ILogger logger, IUserManager userManager, IFileSystem fileSystem)
- {
- _logger = logger;
- _userManager = userManager;
- _fileSystem = fileSystem;
- }
-
+ /// <inheritdoc />
public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
{
foreach (var user in _userManager.Users)
@@ -58,9 +66,10 @@ namespace Emby.Server.Implementations.EntryPoints
}
}
+ /// <inheritdoc />
public IEnumerable<TaskTriggerInfo> GetDefaultTriggers()
{
- return new List<TaskTriggerInfo>
+ return new[]
{
new TaskTriggerInfo
{
diff --git a/Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs b/Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs
index 141e72958..e1dbb663b 100644
--- a/Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs
+++ b/Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs
@@ -16,33 +16,46 @@ using MediaBrowser.Model.Tasks;
namespace Emby.Server.Implementations.EntryPoints
{
/// <summary>
- /// Class WebSocketEvents
+ /// Class WebSocketEvents.
/// </summary>
public class ServerEventNotifier : IServerEntryPoint
{
/// <summary>
- /// The _user manager
+ /// The user manager.
/// </summary>
private readonly IUserManager _userManager;
/// <summary>
- /// The _installation manager
+ /// The installation manager.
/// </summary>
private readonly IInstallationManager _installationManager;
/// <summary>
- /// The _kernel
+ /// The kernel.
/// </summary>
private readonly IServerApplicationHost _appHost;
/// <summary>
- /// The _task manager
+ /// The task manager.
/// </summary>
private readonly ITaskManager _taskManager;
private readonly ISessionManager _sessionManager;
- public ServerEventNotifier(IServerApplicationHost appHost, IUserManager userManager, IInstallationManager installationManager, ITaskManager taskManager, ISessionManager sessionManager)
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ServerEventNotifier"/> class.
+ /// </summary>
+ /// <param name="appHost">The application host.</param>
+ /// <param name="userManager">The user manager.</param>
+ /// <param name="installationManager">The installation manager.</param>
+ /// <param name="taskManager">The task manager.</param>
+ /// <param name="sessionManager">The session manager.</param>
+ public ServerEventNotifier(
+ IServerApplicationHost appHost,
+ IUserManager userManager,
+ IInstallationManager installationManager,
+ ITaskManager taskManager,
+ ISessionManager sessionManager)
{
_userManager = userManager;
_installationManager = installationManager;
@@ -51,47 +64,48 @@ namespace Emby.Server.Implementations.EntryPoints
_sessionManager = sessionManager;
}
+ /// <inheritdoc />
public Task RunAsync()
{
- _userManager.UserDeleted += userManager_UserDeleted;
- _userManager.UserUpdated += userManager_UserUpdated;
- _userManager.UserPolicyUpdated += _userManager_UserPolicyUpdated;
- _userManager.UserConfigurationUpdated += _userManager_UserConfigurationUpdated;
+ _userManager.UserDeleted += OnUserDeleted;
+ _userManager.UserUpdated += OnUserUpdated;
+ _userManager.UserPolicyUpdated += OnUserPolicyUpdated;
+ _userManager.UserConfigurationUpdated += OnUserConfigurationUpdated;
- _appHost.HasPendingRestartChanged += kernel_HasPendingRestartChanged;
+ _appHost.HasPendingRestartChanged += OnHasPendingRestartChanged;
- _installationManager.PluginUninstalled += InstallationManager_PluginUninstalled;
- _installationManager.PackageInstalling += _installationManager_PackageInstalling;
- _installationManager.PackageInstallationCancelled += _installationManager_PackageInstallationCancelled;
- _installationManager.PackageInstallationCompleted += _installationManager_PackageInstallationCompleted;
- _installationManager.PackageInstallationFailed += _installationManager_PackageInstallationFailed;
+ _installationManager.PluginUninstalled += OnPluginUninstalled;
+ _installationManager.PackageInstalling += OnPackageInstalling;
+ _installationManager.PackageInstallationCancelled += OnPackageInstallationCancelled;
+ _installationManager.PackageInstallationCompleted += OnPackageInstallationCompleted;
+ _installationManager.PackageInstallationFailed += OnPackageInstallationFailed;
- _taskManager.TaskCompleted += _taskManager_TaskCompleted;
+ _taskManager.TaskCompleted += OnTaskCompleted;
return Task.CompletedTask;
}
- void _installationManager_PackageInstalling(object sender, InstallationEventArgs e)
+ private void OnPackageInstalling(object sender, InstallationEventArgs e)
{
SendMessageToAdminSessions("PackageInstalling", e.InstallationInfo);
}
- void _installationManager_PackageInstallationCancelled(object sender, InstallationEventArgs e)
+ private void OnPackageInstallationCancelled(object sender, InstallationEventArgs e)
{
SendMessageToAdminSessions("PackageInstallationCancelled", e.InstallationInfo);
}
- void _installationManager_PackageInstallationCompleted(object sender, InstallationEventArgs e)
+ private void OnPackageInstallationCompleted(object sender, InstallationEventArgs e)
{
SendMessageToAdminSessions("PackageInstallationCompleted", e.InstallationInfo);
}
- void _installationManager_PackageInstallationFailed(object sender, InstallationFailedEventArgs e)
+ private void OnPackageInstallationFailed(object sender, InstallationFailedEventArgs e)
{
SendMessageToAdminSessions("PackageInstallationFailed", e.InstallationInfo);
}
- void _taskManager_TaskCompleted(object sender, TaskCompletionEventArgs e)
+ private void OnTaskCompleted(object sender, TaskCompletionEventArgs e)
{
SendMessageToAdminSessions("ScheduledTaskEnded", e.Result);
}
@@ -101,7 +115,7 @@ namespace Emby.Server.Implementations.EntryPoints
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
- void InstallationManager_PluginUninstalled(object sender, GenericEventArgs<IPlugin> e)
+ private void OnPluginUninstalled(object sender, GenericEventArgs<IPlugin> e)
{
SendMessageToAdminSessions("PluginUninstalled", e.Argument.GetPluginInfo());
}
@@ -111,7 +125,7 @@ namespace Emby.Server.Implementations.EntryPoints
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
- void kernel_HasPendingRestartChanged(object sender, EventArgs e)
+ private void OnHasPendingRestartChanged(object sender, EventArgs e)
{
_sessionManager.SendRestartRequiredNotification(CancellationToken.None);
}
@@ -121,7 +135,7 @@ namespace Emby.Server.Implementations.EntryPoints
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
- void userManager_UserUpdated(object sender, GenericEventArgs<User> e)
+ private void OnUserUpdated(object sender, GenericEventArgs<User> e)
{
var dto = _userManager.GetUserDto(e.Argument);
@@ -133,19 +147,19 @@ namespace Emby.Server.Implementations.EntryPoints
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
- void userManager_UserDeleted(object sender, GenericEventArgs<User> e)
+ private void OnUserDeleted(object sender, GenericEventArgs<User> e)
{
SendMessageToUserSession(e.Argument, "UserDeleted", e.Argument.Id.ToString("N", CultureInfo.InvariantCulture));
}
- void _userManager_UserPolicyUpdated(object sender, GenericEventArgs<User> e)
+ private void OnUserPolicyUpdated(object sender, GenericEventArgs<User> e)
{
var dto = _userManager.GetUserDto(e.Argument);
SendMessageToUserSession(e.Argument, "UserPolicyUpdated", dto);
}
- void _userManager_UserConfigurationUpdated(object sender, GenericEventArgs<User> e)
+ private void OnUserConfigurationUpdated(object sender, GenericEventArgs<User> e)
{
var dto = _userManager.GetUserDto(e.Argument);
@@ -156,7 +170,7 @@ namespace Emby.Server.Implementations.EntryPoints
{
try
{
- await _sessionManager.SendMessageToAdminSessions(name, data, CancellationToken.None);
+ await _sessionManager.SendMessageToAdminSessions(name, data, CancellationToken.None).ConfigureAwait(false);
}
catch (Exception)
{
@@ -168,7 +182,11 @@ namespace Emby.Server.Implementations.EntryPoints
{
try
{
- await _sessionManager.SendMessageToUserSessions(new List<Guid> { user.Id }, name, data, CancellationToken.None);
+ await _sessionManager.SendMessageToUserSessions(
+ new List<Guid> { user.Id },
+ name,
+ data,
+ CancellationToken.None).ConfigureAwait(false);
}
catch (Exception)
{
@@ -176,12 +194,11 @@ namespace Emby.Server.Implementations.EntryPoints
}
}
- /// <summary>
- /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
- /// </summary>
+ /// <inheritdoc />
public void Dispose()
{
Dispose(true);
+ GC.SuppressFinalize(this);
}
/// <summary>
@@ -192,18 +209,20 @@ namespace Emby.Server.Implementations.EntryPoints
{
if (dispose)
{
- _userManager.UserDeleted -= userManager_UserDeleted;
- _userManager.UserUpdated -= userManager_UserUpdated;
- _userManager.UserPolicyUpdated -= _userManager_UserPolicyUpdated;
- _userManager.UserConfigurationUpdated -= _userManager_UserConfigurationUpdated;
-
- _installationManager.PluginUninstalled -= InstallationManager_PluginUninstalled;
- _installationManager.PackageInstalling -= _installationManager_PackageInstalling;
- _installationManager.PackageInstallationCancelled -= _installationManager_PackageInstallationCancelled;
- _installationManager.PackageInstallationCompleted -= _installationManager_PackageInstallationCompleted;
- _installationManager.PackageInstallationFailed -= _installationManager_PackageInstallationFailed;
-
- _appHost.HasPendingRestartChanged -= kernel_HasPendingRestartChanged;
+ _userManager.UserDeleted -= OnUserDeleted;
+ _userManager.UserUpdated -= OnUserUpdated;
+ _userManager.UserPolicyUpdated -= OnUserPolicyUpdated;
+ _userManager.UserConfigurationUpdated -= OnUserConfigurationUpdated;
+
+ _installationManager.PluginUninstalled -= OnPluginUninstalled;
+ _installationManager.PackageInstalling -= OnPackageInstalling;
+ _installationManager.PackageInstallationCancelled -= OnPackageInstallationCancelled;
+ _installationManager.PackageInstallationCompleted -= OnPackageInstallationCompleted;
+ _installationManager.PackageInstallationFailed -= OnPackageInstallationFailed;
+
+ _appHost.HasPendingRestartChanged -= OnHasPendingRestartChanged;
+
+ _taskManager.TaskCompleted -= OnTaskCompleted;
}
}
}
diff --git a/Emby.Server.Implementations/EntryPoints/StartupWizard.cs b/Emby.Server.Implementations/EntryPoints/StartupWizard.cs
index 8be6db87d..161788c63 100644
--- a/Emby.Server.Implementations/EntryPoints/StartupWizard.cs
+++ b/Emby.Server.Implementations/EntryPoints/StartupWizard.cs
@@ -8,21 +8,28 @@ using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.EntryPoints
{
/// <summary>
- /// Class StartupWizard
+ /// Class StartupWizard.
/// </summary>
public class StartupWizard : IServerEntryPoint
{
/// <summary>
- /// The _app host
+ /// The app host.
/// </summary>
private readonly IServerApplicationHost _appHost;
+
/// <summary>
- /// The _user manager
+ /// The user manager.
/// </summary>
private readonly ILogger _logger;
private IServerConfigurationManager _config;
+ /// <summary>
+ /// Initializes a new instance of the <see cref="StartupWizard"/> class.
+ /// </summary>
+ /// <param name="appHost">The application host.</param>
+ /// <param name="logger">The logger.</param>
+ /// <param name="config">The configuration manager.</param>
public StartupWizard(IServerApplicationHost appHost, ILogger logger, IServerConfigurationManager config)
{
_appHost = appHost;
@@ -30,9 +37,7 @@ namespace Emby.Server.Implementations.EntryPoints
_config = config;
}
- /// <summary>
- /// Runs this instance.
- /// </summary>
+ /// <inheritdoc />
public Task RunAsync()
{
if (!_appHost.CanLaunchWebBrowser)
@@ -57,9 +62,7 @@ namespace Emby.Server.Implementations.EntryPoints
return Task.CompletedTask;
}
- /// <summary>
- /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
- /// </summary>
+ /// <inheritdoc />
public void Dispose()
{
}
diff --git a/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs b/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs
index 5b90dc1fb..9ee219854 100644
--- a/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs
+++ b/Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs
@@ -10,30 +10,36 @@ using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.EntryPoints
{
/// <summary>
- /// Class UdpServerEntryPoint
+ /// Class UdpServerEntryPoint.
/// </summary>
public class UdpServerEntryPoint : IServerEntryPoint
{
/// <summary>
- /// Gets or sets the UDP server.
+ /// The port of the UDP server.
/// </summary>
- /// <value>The UDP server.</value>
- private UdpServer UdpServer { get; set; }
+ public const int PortNumber = 7359;
/// <summary>
- /// The _logger
+ /// The logger.
/// </summary>
private readonly ILogger _logger;
private readonly ISocketFactory _socketFactory;
private readonly IServerApplicationHost _appHost;
private readonly IJsonSerializer _json;
- public const int PortNumber = 7359;
+ /// <summary>
+ /// The UDP server.
+ /// </summary>
+ private UdpServer _udpServer;
/// <summary>
/// Initializes a new instance of the <see cref="UdpServerEntryPoint" /> class.
/// </summary>
- public UdpServerEntryPoint(ILogger logger, IServerApplicationHost appHost, IJsonSerializer json, ISocketFactory socketFactory)
+ public UdpServerEntryPoint(
+ ILogger logger,
+ IServerApplicationHost appHost,
+ IJsonSerializer json,
+ ISocketFactory socketFactory)
{
_logger = logger;
_appHost = appHost;
@@ -41,9 +47,7 @@ namespace Emby.Server.Implementations.EntryPoints
_socketFactory = socketFactory;
}
- /// <summary>
- /// Runs this instance.
- /// </summary>
+ /// <inheritdoc />
public Task RunAsync()
{
var udpServer = new UdpServer(_logger, _appHost, _json, _socketFactory);
@@ -52,7 +56,7 @@ namespace Emby.Server.Implementations.EntryPoints
{
udpServer.Start(PortNumber);
- UdpServer = udpServer;
+ _udpServer = udpServer;
}
catch (Exception ex)
{
@@ -62,12 +66,11 @@ namespace Emby.Server.Implementations.EntryPoints
return Task.CompletedTask;
}
- /// <summary>
- /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
- /// </summary>
+ /// <inheritdoc />
public void Dispose()
{
Dispose(true);
+ GC.SuppressFinalize(this);
}
/// <summary>
@@ -78,9 +81,9 @@ namespace Emby.Server.Implementations.EntryPoints
{
if (dispose)
{
- if (UdpServer != null)
+ if (_udpServer != null)
{
- UdpServer.Dispose();
+ _udpServer.Dispose();
}
}
}
diff --git a/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs b/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
index bae3422ff..e431da148 100644
--- a/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
+++ b/Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
@@ -1,3 +1,5 @@
+#pragma warning disable CS1591
+
using System;
using System.Collections.Generic;
using System.Globalization;