Browse Source

Remove dead code and improve logging

Bond-009 5 years ago
parent
commit
8865b3ea3d

+ 3 - 5
Emby.Server.Implementations/HttpServer/HttpListenerHost.cs

@@ -520,7 +520,7 @@ namespace Emby.Server.Implementations.HttpServer
 
 
             try
             try
             {
             {
-                _logger.LogInformation("WS Request from {IP}", context.Connection.RemoteIpAddress);
+                _logger.LogInformation("WS {IP} request", context.Connection.RemoteIpAddress);
 
 
                 WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false);
                 WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false);
 
 
@@ -536,11 +536,11 @@ namespace Emby.Server.Implementations.HttpServer
                 WebSocketConnected?.Invoke(this, new GenericEventArgs<IWebSocketConnection>(connection));
                 WebSocketConnected?.Invoke(this, new GenericEventArgs<IWebSocketConnection>(connection));
 
 
                 await connection.ProcessAsync().ConfigureAwait(false);
                 await connection.ProcessAsync().ConfigureAwait(false);
-                _logger.LogInformation("WS closed from {IP}", context.Connection.RemoteIpAddress);
+                _logger.LogInformation("WS {IP} closed", context.Connection.RemoteIpAddress);
             }
             }
             catch (Exception ex) // Otherwise ASP.Net will ignore the exception
             catch (Exception ex) // Otherwise ASP.Net will ignore the exception
             {
             {
-                _logger.LogError(ex, "WebSocketRequestHandler error");
+                _logger.LogError(ex, "WS {IP} WebSocketRequestHandler error");
                 if (!context.Response.HasStarted)
                 if (!context.Response.HasStarted)
                 {
                 {
                     context.Response.StatusCode = 500;
                     context.Response.StatusCode = 500;
@@ -705,8 +705,6 @@ namespace Emby.Server.Implementations.HttpServer
                 return Task.CompletedTask;
                 return Task.CompletedTask;
             }
             }
 
 
-            _logger.LogDebug("Websocket message received: {0}", result.MessageType);
-
             IEnumerable<Task> GetTasks()
             IEnumerable<Task> GetTasks()
             {
             {
                 foreach (var x in _webSocketListeners)
                 foreach (var x in _webSocketListeners)

+ 2 - 2
Emby.Server.Implementations/HttpServer/WebSocketConnection.cs

@@ -195,7 +195,7 @@ namespace Emby.Server.Implementations.HttpServer
             // Tell the PipeReader how much of the buffer we have consumed
             // Tell the PipeReader how much of the buffer we have consumed
             reader.AdvanceTo(buffer.End);
             reader.AdvanceTo(buffer.End);
 
 
-            _logger.LogDebug("WS received message: {@Message}", stub);
+            _logger.LogDebug("WS {IP} received message: {@Message}", RemoteEndPoint, stub);
 
 
             var info = new WebSocketMessageInfo
             var info = new WebSocketMessageInfo
             {
             {
@@ -204,7 +204,7 @@ namespace Emby.Server.Implementations.HttpServer
                 Connection = this
                 Connection = this
             };
             };
 
 
-            _logger.LogDebug("WS message info: {@MessageInfo}", info);
+            _logger.LogDebug("WS {IP} message info: {@MessageInfo}", RemoteEndPoint, info);
 
 
             await OnReceive(info).ConfigureAwait(false);
             await OnReceive(info).ConfigureAwait(false);
 
 

+ 0 - 39
Emby.Server.Implementations/Middleware/WebSocketMiddleware.cs

@@ -1,39 +0,0 @@
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Logging;
-using WebSocketManager = Emby.Server.Implementations.WebSockets.WebSocketManager;
-
-namespace Emby.Server.Implementations.Middleware
-{
-    public class WebSocketMiddleware
-    {
-        private readonly RequestDelegate _next;
-        private readonly ILogger<WebSocketMiddleware> _logger;
-        private readonly WebSocketManager _webSocketManager;
-
-        public WebSocketMiddleware(RequestDelegate next, ILogger<WebSocketMiddleware> logger, WebSocketManager webSocketManager)
-        {
-            _next = next;
-            _logger = logger;
-            _webSocketManager = webSocketManager;
-        }
-
-        public async Task Invoke(HttpContext httpContext)
-        {
-            _logger.LogInformation("Handling request: " + httpContext.Request.Path);
-
-            if (httpContext.WebSockets.IsWebSocketRequest)
-            {
-                var webSocketContext = await httpContext.WebSockets.AcceptWebSocketAsync(null).ConfigureAwait(false);
-                if (webSocketContext != null)
-                {
-                    await _webSocketManager.OnWebSocketConnected(webSocketContext).ConfigureAwait(false);
-                }
-            }
-            else
-            {
-                await _next.Invoke(httpContext).ConfigureAwait(false);
-            }
-        }
-    }
-}

+ 0 - 10
Emby.Server.Implementations/WebSockets/WebSocketHandler.cs

@@ -1,10 +0,0 @@
-using System.Threading.Tasks;
-using MediaBrowser.Model.Net;
-
-namespace Emby.Server.Implementations.WebSockets
-{
-    public interface IWebSocketHandler
-    {
-        Task ProcessMessage(WebSocketMessage<object> message, TaskCompletionSource<bool> taskCompletionSource);
-    }
-}

+ 0 - 104
Emby.Server.Implementations/WebSockets/WebSocketManager.cs

@@ -1,104 +0,0 @@
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net.WebSockets;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using MediaBrowser.Controller.Net;
-using MediaBrowser.Model.Net;
-using MediaBrowser.Model.Serialization;
-using Microsoft.Extensions.Logging;
-using UtfUnknown;
-
-namespace Emby.Server.Implementations.WebSockets
-{
-    public class WebSocketManager
-    {
-        private readonly IWebSocketHandler[] _webSocketHandlers;
-        private readonly IJsonSerializer _jsonSerializer;
-        private readonly ILogger<WebSocketManager> _logger;
-        private const int BufferSize = 4096;
-
-        public WebSocketManager(IWebSocketHandler[] webSocketHandlers, IJsonSerializer jsonSerializer, ILogger<WebSocketManager> logger)
-        {
-            _webSocketHandlers = webSocketHandlers;
-            _jsonSerializer = jsonSerializer;
-            _logger = logger;
-        }
-
-        public async Task OnWebSocketConnected(WebSocket webSocket)
-        {
-            var taskCompletionSource = new TaskCompletionSource<bool>();
-            var cancellationToken = new CancellationTokenSource().Token;
-            WebSocketReceiveResult result;
-            var message = new List<byte>();
-
-            // Keep listening for incoming messages, otherwise the socket closes automatically
-            do
-            {
-                var buffer = WebSocket.CreateServerBuffer(BufferSize);
-                result = await webSocket.ReceiveAsync(buffer, cancellationToken).ConfigureAwait(false);
-                message.AddRange(buffer.Array.Take(result.Count));
-
-                if (result.EndOfMessage)
-                {
-                    await ProcessMessage(message.ToArray(), taskCompletionSource).ConfigureAwait(false);
-                    message.Clear();
-                }
-            } while (!taskCompletionSource.Task.IsCompleted &&
-                     webSocket.State == WebSocketState.Open &&
-                     result.MessageType != WebSocketMessageType.Close);
-
-            if (webSocket.State == WebSocketState.Open)
-            {
-                await webSocket.CloseAsync(
-                    result.CloseStatus ?? WebSocketCloseStatus.NormalClosure,
-                    result.CloseStatusDescription,
-                    cancellationToken).ConfigureAwait(false);
-            }
-        }
-
-        private async Task ProcessMessage(byte[] messageBytes, TaskCompletionSource<bool> taskCompletionSource)
-        {
-            var charset = CharsetDetector.DetectFromBytes(messageBytes).Detected?.EncodingName;
-            var message = string.Equals(charset, "utf-8", StringComparison.OrdinalIgnoreCase)
-                ? Encoding.UTF8.GetString(messageBytes, 0, messageBytes.Length)
-                : Encoding.ASCII.GetString(messageBytes, 0, messageBytes.Length);
-
-            // All messages are expected to be valid JSON objects
-            if (!message.StartsWith("{", StringComparison.OrdinalIgnoreCase))
-            {
-                _logger.LogDebug("Received web socket message that is not a json structure: {Message}", message);
-                return;
-            }
-
-            try
-            {
-                var info = _jsonSerializer.DeserializeFromString<WebSocketMessage<object>>(message);
-
-                _logger.LogDebug("Websocket message received: {0}", info.MessageType);
-
-                var tasks = _webSocketHandlers.Select(handler => Task.Run(() =>
-                {
-                    try
-                    {
-                        handler.ProcessMessage(info, taskCompletionSource).ConfigureAwait(false);
-                    }
-                    catch (Exception ex)
-                    {
-                        _logger.LogError(ex, "{HandlerType} failed processing WebSocket message {MessageType}",
-                            handler.GetType().Name, info.MessageType ?? string.Empty);
-                    }
-                }));
-
-                await Task.WhenAll(tasks);
-            }
-            catch (Exception ex)
-            {
-                _logger.LogError(ex, "Error processing web socket message");
-            }
-        }
-    }
-}

+ 8 - 9
MediaBrowser.Api/System/ActivityLogWebSocketListener.cs

@@ -1,5 +1,4 @@
-using System.Collections.Generic;
-using System.Threading;
+using System;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Activity;
 using MediaBrowser.Model.Activity;
@@ -11,7 +10,7 @@ namespace MediaBrowser.Api.System
     /// <summary>
     /// <summary>
     /// Class SessionInfoWebSocketListener
     /// Class SessionInfoWebSocketListener
     /// </summary>
     /// </summary>
-    public class ActivityLogWebSocketListener : BasePeriodicWebSocketListener<List<ActivityLogEntry>, WebSocketListenerState>
+    public class ActivityLogWebSocketListener : BasePeriodicWebSocketListener<ActivityLogEntry[], WebSocketListenerState>
     {
     {
         /// <summary>
         /// <summary>
         /// Gets the name.
         /// Gets the name.
@@ -27,10 +26,10 @@ namespace MediaBrowser.Api.System
         public ActivityLogWebSocketListener(ILogger logger, IActivityManager activityManager) : base(logger)
         public ActivityLogWebSocketListener(ILogger logger, IActivityManager activityManager) : base(logger)
         {
         {
             _activityManager = activityManager;
             _activityManager = activityManager;
-            _activityManager.EntryCreated += _activityManager_EntryCreated;
+            _activityManager.EntryCreated += OnEntryCreated;
         }
         }
 
 
-        void _activityManager_EntryCreated(object sender, GenericEventArgs<ActivityLogEntry> e)
+        private void OnEntryCreated(object sender, GenericEventArgs<ActivityLogEntry> e)
         {
         {
             SendData(true);
             SendData(true);
         }
         }
@@ -39,15 +38,15 @@ namespace MediaBrowser.Api.System
         /// Gets the data to send.
         /// Gets the data to send.
         /// </summary>
         /// </summary>
         /// <returns>Task{SystemInfo}.</returns>
         /// <returns>Task{SystemInfo}.</returns>
-        protected override Task<List<ActivityLogEntry>> GetDataToSend()
+        protected override Task<ActivityLogEntry[]> GetDataToSend()
         {
         {
-            return Task.FromResult(new List<ActivityLogEntry>());
+            return Task.FromResult(Array.Empty<ActivityLogEntry>());
         }
         }
 
 
-
+        /// <inheritdoc />
         protected override void Dispose(bool dispose)
         protected override void Dispose(bool dispose)
         {
         {
-            _activityManager.EntryCreated -= _activityManager_EntryCreated;
+            _activityManager.EntryCreated -= OnEntryCreated;
 
 
             base.Dispose(dispose);
             base.Dispose(dispose);
         }
         }

+ 5 - 6
MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs

@@ -77,8 +77,6 @@ namespace MediaBrowser.Controller.Net
             return Task.CompletedTask;
             return Task.CompletedTask;
         }
         }
 
 
-        protected readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
         /// <summary>
         /// <summary>
         /// Starts sending messages over a web socket
         /// Starts sending messages over a web socket
         /// </summary>
         /// </summary>
@@ -87,12 +85,12 @@ namespace MediaBrowser.Controller.Net
         {
         {
             var vals = message.Data.Split(',');
             var vals = message.Data.Split(',');
 
 
-            var dueTimeMs = long.Parse(vals[0], UsCulture);
-            var periodMs = long.Parse(vals[1], UsCulture);
+            var dueTimeMs = long.Parse(vals[0], CultureInfo.InvariantCulture);
+            var periodMs = long.Parse(vals[1], CultureInfo.InvariantCulture);
 
 
             var cancellationTokenSource = new CancellationTokenSource();
             var cancellationTokenSource = new CancellationTokenSource();
 
 
-            Logger.LogDebug("{1} Begin transmitting over websocket to {0}", message.Connection.RemoteEndPoint, GetType().Name);
+            Logger.LogDebug("WS {1} begin transmitting to {0}", message.Connection.RemoteEndPoint, GetType().Name);
 
 
             var state = new TStateType
             var state = new TStateType
             {
             {
@@ -196,7 +194,7 @@ namespace MediaBrowser.Controller.Net
         /// <param name="connection">The connection.</param>
         /// <param name="connection">The connection.</param>
         private void DisposeConnection(Tuple<IWebSocketConnection, CancellationTokenSource, TStateType> connection)
         private void DisposeConnection(Tuple<IWebSocketConnection, CancellationTokenSource, TStateType> connection)
         {
         {
-            Logger.LogDebug("{1} stop transmitting over websocket to {0}", connection.Item1.RemoteEndPoint, GetType().Name);
+            Logger.LogDebug("WS {1} stop transmitting to {0}", connection.Item1.RemoteEndPoint, GetType().Name);
 
 
             // TODO disposing the connection seems to break websockets in subtle ways, so what is the purpose of this function really...
             // TODO disposing the connection seems to break websockets in subtle ways, so what is the purpose of this function really...
             // connection.Item1.Dispose();
             // connection.Item1.Dispose();
@@ -241,6 +239,7 @@ namespace MediaBrowser.Controller.Net
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
     }
     }