diff --git a/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs b/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs
index 88974f9aba..913a51217f 100644
--- a/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs
+++ b/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs
@@ -99,7 +99,6 @@ namespace Emby.Server.Implementations.HttpServer
/// The message.
/// The cancellation token.
/// Task.
- /// message
public Task SendAsync(WebSocketMessage message, CancellationToken cancellationToken)
{
var json = JsonSerializer.SerializeToUtf8Bytes(message, _jsonOptions);
@@ -117,7 +116,6 @@ namespace Emby.Server.Implementations.HttpServer
{
// Allocate at least 512 bytes from the PipeWriter
Memory memory = writer.GetMemory(512);
-
receiveresult = await _socket.ReceiveAsync(memory, cancellationToken);
int bytesRead = receiveresult.Count;
if (bytesRead == 0)
@@ -144,33 +142,30 @@ namespace Emby.Server.Implementations.HttpServer
}
} while (_socket.State == WebSocketState.Open && receiveresult.MessageType != WebSocketMessageType.Close);
- if (_socket.State == WebSocketState.Open)
- {
- _logger.LogWarning("Stopped reading from websocket before it was closed");
- }
-
Closed?.Invoke(this, EventArgs.Empty);
- _socket.Dispose();
+ await _socket.CloseAsync(
+ WebSocketCloseStatus.NormalClosure,
+ string.Empty,
+ cancellationToken).ConfigureAwait(false);
}
private async Task ProcessInternal(PipeReader reader)
{
+ ReadResult result = await reader.ReadAsync().ConfigureAwait(false);
+ ReadOnlySequence buffer = result.Buffer;
+
if (OnReceive == null)
{
+ // Tell the PipeReader how much of the buffer we have consumed
+ reader.AdvanceTo(buffer.End);
return;
}
+ WebSocketMessage