Skip to content

Commit

Permalink
Merge pull request jellyfin#4285 from cvium/fix_websocketlisteners
Browse files Browse the repository at this point in the history
Fix IWebSocketListener service registration
  • Loading branch information
joshuaboniface committed Oct 17, 2020
2 parents 19c2abb + 137baab commit f9bd7be
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 27 deletions.
13 changes: 5 additions & 8 deletions Emby.Server.Implementations/ApplicationHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@ public abstract class ApplicationHost : IServerApplicationHost, IDisposable
private IMediaEncoder _mediaEncoder;
private ISessionManager _sessionManager;
private IHttpClientFactory _httpClientFactory;
private IWebSocketManager _webSocketManager;

private string[] _urlPrefixes;

Expand Down Expand Up @@ -259,8 +258,8 @@ public ApplicationHost(
IServiceCollection serviceCollection)
{
_xmlSerializer = new MyXmlSerializer();
_jsonSerializer = new JsonSerializer();
_jsonSerializer = new JsonSerializer();

ServiceCollection = serviceCollection;

_networkManager = networkManager;
Expand Down Expand Up @@ -667,7 +666,6 @@ public async Task InitializeServices()
_mediaEncoder = Resolve<IMediaEncoder>();
_sessionManager = Resolve<ISessionManager>();
_httpClientFactory = Resolve<IHttpClientFactory>();
_webSocketManager = Resolve<IWebSocketManager>();

((AuthenticationRepository)Resolve<IAuthenticationRepository>()).Initialize();

Expand Down Expand Up @@ -788,7 +786,6 @@ private void FindParts()
.ToArray();

_urlPrefixes = GetUrlPrefixes().ToArray();
_webSocketManager.Init(GetExports<IWebSocketListener>());

Resolve<ILibraryManager>().AddParts(
GetExports<IResolverIgnoreRule>(),
Expand Down Expand Up @@ -1058,7 +1055,7 @@ private IEnumerable<string> GetPlugins(string path, bool cleanup = true)
{
// No metafile, so lets see if the folder is versioned.
metafile = dir.Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries)[^1];

int versionIndex = dir.LastIndexOf('_');
if (versionIndex != -1 && Version.TryParse(dir.Substring(versionIndex + 1), out Version ver))
{
Expand All @@ -1067,9 +1064,9 @@ private IEnumerable<string> GetPlugins(string path, bool cleanup = true)
}
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));
}
}
}
}
catch
Expand Down
17 changes: 5 additions & 12 deletions Emby.Server.Implementations/HttpServer/WebSocketManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.WebSockets;
using System.Threading.Tasks;
using Jellyfin.Data.Events;
Expand All @@ -14,16 +13,18 @@ namespace Emby.Server.Implementations.HttpServer
{
public class WebSocketManager : IWebSocketManager
{
private readonly Lazy<IEnumerable<IWebSocketListener>> _webSocketListeners;
private readonly ILogger<WebSocketManager> _logger;
private readonly ILoggerFactory _loggerFactory;

private IWebSocketListener[] _webSocketListeners = Array.Empty<IWebSocketListener>();
private bool _disposed = false;

public WebSocketManager(
Lazy<IEnumerable<IWebSocketListener>> webSocketListeners,
ILogger<WebSocketManager> logger,
ILoggerFactory loggerFactory)
{
_webSocketListeners = webSocketListeners;
_logger = logger;
_loggerFactory = loggerFactory;
}
Expand Down Expand Up @@ -68,15 +69,6 @@ public async Task WebSocketRequestHandler(HttpContext context)
}
}

/// <summary>
/// Adds the rest handlers.
/// </summary>
/// <param name="listeners">The web socket listeners.</param>
public void Init(IEnumerable<IWebSocketListener> listeners)
{
_webSocketListeners = listeners.ToArray();
}

/// <summary>
/// Processes the web socket message received.
/// </summary>
Expand All @@ -90,7 +82,8 @@ private Task ProcessWebSocketMessageReceived(WebSocketMessageInfo result)

IEnumerable<Task> GetTasks()
{
foreach (var x in _webSocketListeners)
var listeners = _webSocketListeners.Value;
foreach (var x in listeners)
{
yield return x.ProcessMessageAsync(result);
}
Expand Down
11 changes: 11 additions & 0 deletions Jellyfin.Server/CoreAppHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
using System.Reflection;
using Emby.Drawing;
using Emby.Server.Implementations;
using Emby.Server.Implementations.Session;
using Jellyfin.Api.WebSocketListeners;
using Jellyfin.Drawing.Skia;
using Jellyfin.Server.Implementations;
using Jellyfin.Server.Implementations.Activity;
Expand All @@ -14,6 +16,7 @@
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Activity;
using MediaBrowser.Model.IO;
using Microsoft.EntityFrameworkCore;
Expand Down Expand Up @@ -80,6 +83,14 @@ protected override void RegisterServices()
ServiceCollection.AddSingleton<IUserManager, UserManager>();
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();
}

Expand Down
2 changes: 1 addition & 1 deletion Jellyfin.Server/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ public static IWebHostBuilder ConfigureWebHostBuilder(
.ConfigureServices(services =>
{
// Merge the external ServiceCollection into ASP.NET DI
services.TryAdd(serviceCollection);
services.Add(serviceCollection);
})
.UseStartup<Startup>();
}
Expand Down
6 changes: 0 additions & 6 deletions MediaBrowser.Controller/Net/IWebSocketManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,6 @@ public interface IWebSocketManager
/// </summary>
event EventHandler<GenericEventArgs<IWebSocketConnection>> WebSocketConnected;

/// <summary>
/// Inits this instance.
/// </summary>
/// <param name="listeners">The websocket listeners.</param>
void Init(IEnumerable<IWebSocketListener> listeners);

/// <summary>
/// The HTTP request handler.
/// </summary>
Expand Down

0 comments on commit f9bd7be

Please sign in to comment.