aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs9
-rw-r--r--MediaBrowser.WebDashboard/ApiClient.js26
-rw-r--r--MediaBrowser.WebDashboard/packages.config2
3 files changed, 27 insertions, 10 deletions
diff --git a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs
index 96f61912a..e96492317 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 4bdd3f779..66bf34248 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 f111dfc5a..21812f626 100644
--- a/MediaBrowser.WebDashboard/packages.config
+++ b/MediaBrowser.WebDashboard/packages.config
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="MediaBrowser.ApiClient.Javascript" version="3.0.171" targetFramework="net45" />
+ <package id="MediaBrowser.ApiClient.Javascript" version="3.0.172" targetFramework="net45" />
<package id="ServiceStack.Common" version="3.9.58" targetFramework="net45" />
<package id="ServiceStack.Text" version="3.9.58" targetFramework="net45" />
</packages> \ No newline at end of file