aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaus Vium <clausvium@gmail.com>2019-02-27 21:40:47 +0100
committerClaus Vium <clausvium@gmail.com>2019-02-27 21:40:47 +0100
commite47d12198556abfbfb57d2c1a9e45f6f7230bf63 (patch)
tree84840db902c026ef0679c390590193d4da8fc580
parentc0b95dbc791acae1c28bf50fb3a33c06935e7192 (diff)
Fix websockets
-rw-r--r--Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs5
-rw-r--r--Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs13
-rw-r--r--MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs13
3 files changed, 16 insertions, 15 deletions
diff --git a/Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs b/Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs
index dcbfb8048..eebbe8b78 100644
--- a/Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs
+++ b/Emby.Server.Implementations/SocketSharp/SharpWebSocket.cs
@@ -85,6 +85,11 @@ namespace Emby.Server.Implementations.SocketSharp
if (dispose)
{
_cancellationTokenSource.Cancel();
+ if (_webSocket.State == WebSocketState.Open)
+ {
+ _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closed by client",
+ CancellationToken.None);
+ }
}
_disposed = true;
diff --git a/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs b/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
index 9f046c3fd..c5abad5d3 100644
--- a/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
+++ b/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
@@ -76,18 +76,23 @@ using Microsoft.Extensions.Logging;
Endpoint = endpoint
});
- var buffer = WebSocket.CreateClientBuffer(4096, 4096);
WebSocketReceiveResult result;
var message = new List<byte>();
do
{
+ var buffer = WebSocket.CreateServerBuffer(4096);
result = await webSocketContext.ReceiveAsync(buffer, _disposeCancellationToken);
- socket.OnReceiveBytes(buffer.Array);
message.AddRange(buffer.Array.Take(result.Count));
- } while (!result.EndOfMessage && result.MessageType != WebSocketMessageType.Close);
- socket.OnReceiveBytes(message.ToArray());
+ if (result.EndOfMessage)
+ {
+ socket.OnReceiveBytes(message.ToArray());
+ message.Clear();
+ }
+ } while (socket.State == WebSocketState.Open && result.MessageType != WebSocketMessageType.Close);
+
+
await webSocketContext.CloseAsync(result.CloseStatus ?? WebSocketCloseStatus.NormalClosure,
result.CloseStatusDescription, _disposeCancellationToken);
socket.Dispose();
diff --git a/MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs b/MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs
index 4242a00e2..d2d0fbbc6 100644
--- a/MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs
+++ b/MediaBrowser.Controller/Net/BasePeriodicWebSocketListener.cs
@@ -80,12 +80,7 @@ namespace MediaBrowser.Controller.Net
protected readonly CultureInfo UsCulture = new CultureInfo("en-US");
- protected virtual bool SendOnTimer => false;
-
- protected virtual void ParseMessageParams(string[] values)
- {
-
- }
+ protected bool SendOnTimer => false;
/// <summary>
/// Starts sending messages over a web socket
@@ -98,11 +93,6 @@ namespace MediaBrowser.Controller.Net
var dueTimeMs = long.Parse(vals[0], UsCulture);
var periodMs = long.Parse(vals[1], UsCulture);
- if (vals.Length > 2)
- {
- ParseMessageParams(vals.Skip(2).ToArray());
- }
-
var cancellationTokenSource = new CancellationTokenSource();
Logger.LogDebug("{1} Begin transmitting over websocket to {0}", message.Connection.RemoteEndPoint, GetType().Name);
@@ -250,6 +240,7 @@ namespace MediaBrowser.Controller.Net
{
Logger.LogDebug("{1} stop transmitting over websocket to {0}", connection.Item1.RemoteEndPoint, GetType().Name);
+ connection.Item1.Dispose();
var timer = connection.Item3;
if (timer != null)