Merge pull request #4285 from cvium/fix_websocketlisteners
Fix IWebSocketListener service registration
This commit is contained in:
commit
f9bd7be741
|
@ -128,7 +128,6 @@ namespace Emby.Server.Implementations
|
||||||
private IMediaEncoder _mediaEncoder;
|
private IMediaEncoder _mediaEncoder;
|
||||||
private ISessionManager _sessionManager;
|
private ISessionManager _sessionManager;
|
||||||
private IHttpClientFactory _httpClientFactory;
|
private IHttpClientFactory _httpClientFactory;
|
||||||
private IWebSocketManager _webSocketManager;
|
|
||||||
|
|
||||||
private string[] _urlPrefixes;
|
private string[] _urlPrefixes;
|
||||||
|
|
||||||
|
@ -259,8 +258,8 @@ namespace Emby.Server.Implementations
|
||||||
IServiceCollection serviceCollection)
|
IServiceCollection serviceCollection)
|
||||||
{
|
{
|
||||||
_xmlSerializer = new MyXmlSerializer();
|
_xmlSerializer = new MyXmlSerializer();
|
||||||
_jsonSerializer = new JsonSerializer();
|
_jsonSerializer = new JsonSerializer();
|
||||||
|
|
||||||
ServiceCollection = serviceCollection;
|
ServiceCollection = serviceCollection;
|
||||||
|
|
||||||
_networkManager = networkManager;
|
_networkManager = networkManager;
|
||||||
|
@ -667,7 +666,6 @@ namespace Emby.Server.Implementations
|
||||||
_mediaEncoder = Resolve<IMediaEncoder>();
|
_mediaEncoder = Resolve<IMediaEncoder>();
|
||||||
_sessionManager = Resolve<ISessionManager>();
|
_sessionManager = Resolve<ISessionManager>();
|
||||||
_httpClientFactory = Resolve<IHttpClientFactory>();
|
_httpClientFactory = Resolve<IHttpClientFactory>();
|
||||||
_webSocketManager = Resolve<IWebSocketManager>();
|
|
||||||
|
|
||||||
((AuthenticationRepository)Resolve<IAuthenticationRepository>()).Initialize();
|
((AuthenticationRepository)Resolve<IAuthenticationRepository>()).Initialize();
|
||||||
|
|
||||||
|
@ -788,7 +786,6 @@ namespace Emby.Server.Implementations
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
_urlPrefixes = GetUrlPrefixes().ToArray();
|
_urlPrefixes = GetUrlPrefixes().ToArray();
|
||||||
_webSocketManager.Init(GetExports<IWebSocketListener>());
|
|
||||||
|
|
||||||
Resolve<ILibraryManager>().AddParts(
|
Resolve<ILibraryManager>().AddParts(
|
||||||
GetExports<IResolverIgnoreRule>(),
|
GetExports<IResolverIgnoreRule>(),
|
||||||
|
@ -1058,7 +1055,7 @@ namespace Emby.Server.Implementations
|
||||||
{
|
{
|
||||||
// No metafile, so lets see if the folder is versioned.
|
// No metafile, so lets see if the folder is versioned.
|
||||||
metafile = dir.Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries)[^1];
|
metafile = dir.Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries)[^1];
|
||||||
|
|
||||||
int versionIndex = dir.LastIndexOf('_');
|
int versionIndex = dir.LastIndexOf('_');
|
||||||
if (versionIndex != -1 && Version.TryParse(dir.Substring(versionIndex + 1), out Version ver))
|
if (versionIndex != -1 && Version.TryParse(dir.Substring(versionIndex + 1), out Version ver))
|
||||||
{
|
{
|
||||||
|
@ -1067,9 +1064,9 @@ namespace Emby.Server.Implementations
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Un-versioned folder - Add it under the path name and version 0.0.0.1.
|
// Un-versioned folder - Add it under the path name and version 0.0.0.1.
|
||||||
versions.Add((new Version(0, 0, 0, 1), metafile, dir));
|
versions.Add((new Version(0, 0, 0, 1), metafile, dir));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Net.WebSockets;
|
using System.Net.WebSockets;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Events;
|
using Jellyfin.Data.Events;
|
||||||
|
@ -14,16 +13,18 @@ namespace Emby.Server.Implementations.HttpServer
|
||||||
{
|
{
|
||||||
public class WebSocketManager : IWebSocketManager
|
public class WebSocketManager : IWebSocketManager
|
||||||
{
|
{
|
||||||
|
private readonly Lazy<IEnumerable<IWebSocketListener>> _webSocketListeners;
|
||||||
private readonly ILogger<WebSocketManager> _logger;
|
private readonly ILogger<WebSocketManager> _logger;
|
||||||
private readonly ILoggerFactory _loggerFactory;
|
private readonly ILoggerFactory _loggerFactory;
|
||||||
|
|
||||||
private IWebSocketListener[] _webSocketListeners = Array.Empty<IWebSocketListener>();
|
|
||||||
private bool _disposed = false;
|
private bool _disposed = false;
|
||||||
|
|
||||||
public WebSocketManager(
|
public WebSocketManager(
|
||||||
|
Lazy<IEnumerable<IWebSocketListener>> webSocketListeners,
|
||||||
ILogger<WebSocketManager> logger,
|
ILogger<WebSocketManager> logger,
|
||||||
ILoggerFactory loggerFactory)
|
ILoggerFactory loggerFactory)
|
||||||
{
|
{
|
||||||
|
_webSocketListeners = webSocketListeners;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_loggerFactory = loggerFactory;
|
_loggerFactory = loggerFactory;
|
||||||
}
|
}
|
||||||
|
@ -68,15 +69,6 @@ namespace Emby.Server.Implementations.HttpServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds the rest handlers.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="listeners">The web socket listeners.</param>
|
|
||||||
public void Init(IEnumerable<IWebSocketListener> listeners)
|
|
||||||
{
|
|
||||||
_webSocketListeners = listeners.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Processes the web socket message received.
|
/// Processes the web socket message received.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -90,7 +82,8 @@ namespace Emby.Server.Implementations.HttpServer
|
||||||
|
|
||||||
IEnumerable<Task> GetTasks()
|
IEnumerable<Task> GetTasks()
|
||||||
{
|
{
|
||||||
foreach (var x in _webSocketListeners)
|
var listeners = _webSocketListeners.Value;
|
||||||
|
foreach (var x in listeners)
|
||||||
{
|
{
|
||||||
yield return x.ProcessMessageAsync(result);
|
yield return x.ProcessMessageAsync(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Emby.Drawing;
|
using Emby.Drawing;
|
||||||
using Emby.Server.Implementations;
|
using Emby.Server.Implementations;
|
||||||
|
using Emby.Server.Implementations.Session;
|
||||||
|
using Jellyfin.Api.WebSocketListeners;
|
||||||
using Jellyfin.Drawing.Skia;
|
using Jellyfin.Drawing.Skia;
|
||||||
using Jellyfin.Server.Implementations;
|
using Jellyfin.Server.Implementations;
|
||||||
using Jellyfin.Server.Implementations.Activity;
|
using Jellyfin.Server.Implementations.Activity;
|
||||||
|
@ -14,6 +16,7 @@ using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Events;
|
using MediaBrowser.Controller.Events;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
using MediaBrowser.Controller.Net;
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
@ -80,6 +83,14 @@ namespace Jellyfin.Server
|
||||||
ServiceCollection.AddSingleton<IUserManager, UserManager>();
|
ServiceCollection.AddSingleton<IUserManager, UserManager>();
|
||||||
ServiceCollection.AddSingleton<IDisplayPreferencesManager, DisplayPreferencesManager>();
|
ServiceCollection.AddSingleton<IDisplayPreferencesManager, DisplayPreferencesManager>();
|
||||||
|
|
||||||
|
ServiceCollection.AddScoped<IWebSocketListener, SessionWebSocketListener>();
|
||||||
|
ServiceCollection.AddScoped<IWebSocketListener, ActivityLogWebSocketListener>();
|
||||||
|
ServiceCollection.AddScoped<IWebSocketListener, ScheduledTasksWebSocketListener>();
|
||||||
|
ServiceCollection.AddScoped<IWebSocketListener, SessionInfoWebSocketListener>();
|
||||||
|
|
||||||
|
// TODO fix circular dependency on IWebSocketManager
|
||||||
|
ServiceCollection.AddScoped(serviceProvider => new Lazy<IEnumerable<IWebSocketListener>>(serviceProvider.GetRequiredService<IEnumerable<IWebSocketListener>>));
|
||||||
|
|
||||||
base.RegisterServices();
|
base.RegisterServices();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -378,7 +378,7 @@ namespace Jellyfin.Server
|
||||||
.ConfigureServices(services =>
|
.ConfigureServices(services =>
|
||||||
{
|
{
|
||||||
// Merge the external ServiceCollection into ASP.NET DI
|
// Merge the external ServiceCollection into ASP.NET DI
|
||||||
services.TryAdd(serviceCollection);
|
services.Add(serviceCollection);
|
||||||
})
|
})
|
||||||
.UseStartup<Startup>();
|
.UseStartup<Startup>();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,12 +16,6 @@ namespace MediaBrowser.Controller.Net
|
||||||
/// </summary>
|
/// </summary>
|
||||||
event EventHandler<GenericEventArgs<IWebSocketConnection>> WebSocketConnected;
|
event EventHandler<GenericEventArgs<IWebSocketConnection>> WebSocketConnected;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Inits this instance.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="listeners">The websocket listeners.</param>
|
|
||||||
void Init(IEnumerable<IWebSocketListener> listeners);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The HTTP request handler.
|
/// The HTTP request handler.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user