Fix websockets

This commit is contained in:
Claus Vium
2019-02-27 21:40:47 +01:00
parent c0b95dbc79
commit e47d121985
3 changed files with 16 additions and 15 deletions

View File

@@ -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;

View File

@@ -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();