close web socket gracefully to reduce error messages in server log

This commit is contained in:
Luke Pulverenti 2013-09-08 14:50:55 -04:00
parent 52ca9527cc
commit 8398a5a32e
3 changed files with 27 additions and 10 deletions

View file

@ -88,6 +88,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer
break; break;
} }
if (bytes == null)
{
// Connection closed
break;
}
if (OnReceiveBytes != null) if (OnReceiveBytes != null)
{ {
OnReceiveBytes(bytes); OnReceiveBytes(bytes);
@ -110,7 +116,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
if (result.CloseStatus.HasValue) if (result.CloseStatus.HasValue)
{ {
throw new WebSocketException("Connection closed"); _logger.Info("Web socket connection closed.");
return null;
} }
return buffer.Array; return buffer.Array;

View file

@ -2,7 +2,7 @@
window.MediaBrowser = {}; window.MediaBrowser = {};
} }
MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, window) {
/** /**
* Creates a new api client instance * Creates a new api client instance
@ -27,6 +27,14 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) {
var currentUserId; var currentUserId;
var webSocket; 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. * Gets the server host name.
*/ */
@ -3419,15 +3427,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) {
throw new Error("null itemId"); 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, []); // deferred.resolveWith(null, []);
return deferred.promise(); // return deferred.promise();
} //}
var params = { 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 * Provides a friendly way to create an api client instance using information from the browser's current url

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <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.Common" version="3.9.58" targetFramework="net45" />
<package id="ServiceStack.Text" version="3.9.58" targetFramework="net45" /> <package id="ServiceStack.Text" version="3.9.58" targetFramework="net45" />
</packages> </packages>