|
@@ -131,69 +131,20 @@ namespace Emby.Dlna.Main
|
|
|
{
|
|
|
await ((DlnaManager)_dlnaManager).InitProfilesAsync().ConfigureAwait(false);
|
|
|
|
|
|
- ReloadComponents();
|
|
|
+ await ReloadComponents().ConfigureAwait(false);
|
|
|
|
|
|
- _config.NamedConfigurationUpdated += _config_NamedConfigurationUpdated;
|
|
|
- }
|
|
|
-
|
|
|
- public void Dispose()
|
|
|
- {
|
|
|
- DisposeDevicePublisher();
|
|
|
- DisposePlayToManager();
|
|
|
- DisposeDeviceDiscovery();
|
|
|
-
|
|
|
- if (_communicationsServer != null)
|
|
|
- {
|
|
|
- _logger.LogInformation("Disposing SsdpCommunicationsServer");
|
|
|
- _communicationsServer.Dispose();
|
|
|
- _communicationsServer = null;
|
|
|
- }
|
|
|
-
|
|
|
- ContentDirectory = null;
|
|
|
- ConnectionManager = null;
|
|
|
- MediaReceiverRegistrar = null;
|
|
|
- Current = null;
|
|
|
- }
|
|
|
-
|
|
|
- public async Task StartDevicePublisher(Configuration.DlnaOptions options)
|
|
|
- {
|
|
|
- if (!options.BlastAliveMessages)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (_publisher != null)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- try
|
|
|
- {
|
|
|
- _publisher = new SsdpDevicePublisher(_communicationsServer, _networkManager, OperatingSystem.Name, Environment.OSVersion.VersionString, _config.GetDlnaConfiguration().SendOnlyMatchedHost)
|
|
|
- {
|
|
|
- LogFunction = LogMessage,
|
|
|
- SupportPnpRootDevice = false
|
|
|
- };
|
|
|
-
|
|
|
- await RegisterServerEndpoints().ConfigureAwait(false);
|
|
|
-
|
|
|
- _publisher.StartBroadcastingAliveMessages(TimeSpan.FromSeconds(options.BlastAliveMessageIntervalSeconds));
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- _logger.LogError(ex, "Error registering endpoint");
|
|
|
- }
|
|
|
- }
|
|
|
+ _config.NamedConfigurationUpdated += OnNamedConfigurationUpdated;
|
|
|
+ }
|
|
|
|
|
|
- void _config_NamedConfigurationUpdated(object sender, ConfigurationUpdateEventArgs e)
|
|
|
+ private async void OnNamedConfigurationUpdated(object sender, ConfigurationUpdateEventArgs e)
|
|
|
{
|
|
|
if (string.Equals(e.Key, "dlna", StringComparison.OrdinalIgnoreCase))
|
|
|
{
|
|
|
- ReloadComponents();
|
|
|
+ await ReloadComponents().ConfigureAwait(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private async void ReloadComponents()
|
|
|
+ private async Task ReloadComponents()
|
|
|
{
|
|
|
var options = _config.GetDlnaConfiguration();
|
|
|
|
|
@@ -227,7 +178,7 @@ namespace Emby.Dlna.Main
|
|
|
var enableMultiSocketBinding = OperatingSystem.Id == OperatingSystemId.Windows ||
|
|
|
OperatingSystem.Id == OperatingSystemId.Linux;
|
|
|
|
|
|
- _communicationsServer = new SsdpCommunicationsServer(_socketFactory, _networkManager, _logger, enableMultiSocketBinding)
|
|
|
+ _communicationsServer = new SsdpCommunicationsServer(_config, _socketFactory, _networkManager, _logger, enableMultiSocketBinding)
|
|
|
{
|
|
|
IsShared = true
|
|
|
};
|
|
@@ -271,6 +222,36 @@ namespace Emby.Dlna.Main
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public async Task StartDevicePublisher(Configuration.DlnaOptions options)
|
|
|
+ {
|
|
|
+ if (!options.BlastAliveMessages)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_publisher != null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ _publisher = new SsdpDevicePublisher(_communicationsServer, _networkManager, OperatingSystem.Name, Environment.OSVersion.VersionString, _config.GetDlnaConfiguration().SendOnlyMatchedHost)
|
|
|
+ {
|
|
|
+ LogFunction = LogMessage,
|
|
|
+ SupportPnpRootDevice = false
|
|
|
+ };
|
|
|
+
|
|
|
+ await RegisterServerEndpoints().ConfigureAwait(false);
|
|
|
+
|
|
|
+ _publisher.StartBroadcastingAliveMessages(TimeSpan.FromSeconds(options.BlastAliveMessageIntervalSeconds));
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _logger.LogError(ex, "Error registering endpoint");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private async Task RegisterServerEndpoints()
|
|
|
{
|
|
|
var addresses = await _appHost.GetLocalIpAddresses(CancellationToken.None).ConfigureAwait(false);
|
|
@@ -418,6 +399,25 @@ namespace Emby.Dlna.Main
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void Dispose()
|
|
|
+ {
|
|
|
+ DisposeDevicePublisher();
|
|
|
+ DisposePlayToManager();
|
|
|
+ DisposeDeviceDiscovery();
|
|
|
+
|
|
|
+ if (_communicationsServer != null)
|
|
|
+ {
|
|
|
+ _logger.LogInformation("Disposing SsdpCommunicationsServer");
|
|
|
+ _communicationsServer.Dispose();
|
|
|
+ _communicationsServer = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ ContentDirectory = null;
|
|
|
+ ConnectionManager = null;
|
|
|
+ MediaReceiverRegistrar = null;
|
|
|
+ Current = null;
|
|
|
+ }
|
|
|
+
|
|
|
public void DisposeDevicePublisher()
|
|
|
{
|
|
|
if (_publisher != null)
|