From 8398a5a32e98e5ae00e7f463b6ec009b1ef0c3e2 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 8 Sep 2013 14:50:55 -0400 Subject: [PATCH] close web socket gracefully to reduce error messages in server log --- .../HttpServer/NativeWebSocket.cs | 9 ++++++- MediaBrowser.WebDashboard/ApiClient.js | 26 +++++++++++++------ MediaBrowser.WebDashboard/packages.config | 2 +- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs index 96f61912a3..e96492317f 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs @@ -88,6 +88,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer break; } + if (bytes == null) + { + // Connection closed + break; + } + if (OnReceiveBytes != null) { OnReceiveBytes(bytes); @@ -110,7 +116,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer if (result.CloseStatus.HasValue) { - throw new WebSocketException("Connection closed"); + _logger.Info("Web socket connection closed."); + return null; } return buffer.Array; diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index 4bdd3f7795..66bf342488 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -2,7 +2,7 @@ window.MediaBrowser = {}; } -MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { +MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, window) { /** * Creates a new api client instance @@ -27,6 +27,14 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { var currentUserId; var webSocket; + $(window).on("beforeunload", function () { + + // Close the connection gracefully when possible + if (webSocket && webSocket.readyState === WebSocket.OPEN) { + webSocket.close(); + } + }); + /** * Gets the server host name. */ @@ -3419,15 +3427,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null itemId"); } - if (self.isWebSocketOpen()) { + // Always use the http api in case playback is stopped by closing the browser + // See window beforeunload event at the top of this file + //if (self.isWebSocketOpen()) { - var deferred = $.Deferred(); + // var deferred = $.Deferred(); - self.sendWebSocketMessage("PlaybackStopped", itemId + "|" + (positionTicks == null ? "" : positionTicks)); + // self.sendWebSocketMessage("PlaybackStopped", itemId + "|" + (positionTicks == null ? "" : positionTicks)); - deferred.resolveWith(null, []); - return deferred.promise(); - } + // deferred.resolveWith(null, []); + // return deferred.promise(); + //} var params = { }; @@ -3535,7 +3545,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }; } -}(jQuery, navigator, window.JSON, window.WebSocket, setTimeout); +}(jQuery, navigator, window.JSON, window.WebSocket, setTimeout, window); /** * Provides a friendly way to create an api client instance using information from the browser's current url diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index f111dfc5aa..21812f626b 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file