diff --git a/Jung.SimpleWebSocket/Jung.SimpleWebSocket.csproj b/Jung.SimpleWebSocket/Jung.SimpleWebSocket.csproj
index 9223703..e73f3b2 100644
--- a/Jung.SimpleWebSocket/Jung.SimpleWebSocket.csproj
+++ b/Jung.SimpleWebSocket/Jung.SimpleWebSocket.csproj
@@ -5,7 +5,7 @@
net8.0
enable
enable
- 2.0.1
+ 2.0.2
diff --git a/Jung.SimpleWebSocket/SimpleWebSocketServer.cs b/Jung.SimpleWebSocket/SimpleWebSocketServer.cs
index 943ca4a..fa6da43 100644
--- a/Jung.SimpleWebSocket/SimpleWebSocketServer.cs
+++ b/Jung.SimpleWebSocket/SimpleWebSocketServer.cs
@@ -274,21 +274,29 @@ private async Task ProcessWebSocketMessagesAsync(WebSocketServerClient client, C
while (webSocket.State == WebSocketState.Open)
{
cancellationToken.ThrowIfCancellationRequested();
- // Read the next message
- WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment(buffer), cancellationToken);
+ var messageBuffer = new List();
+ WebSocketReceiveResult result;
+
+ do
+ {
+ // read the incoming message in chunks
+ result = await webSocket.ReceiveAsync(new ArraySegment(buffer), cancellationToken);
+ messageBuffer.AddRange(buffer.Take(result.Count));
+ }
+ while (!result.EndOfMessage);
if (result.MessageType == WebSocketMessageType.Text)
{
// Handle the text message
- string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);
+ string receivedMessage = Encoding.UTF8.GetString([.. messageBuffer]);
_logger?.LogDebug("Message received: {message}", receivedMessage);
_ = Task.Run(() => MessageReceived?.Invoke(this, new ClientMessageReceivedArgs(receivedMessage, client.Id)), cancellationToken);
}
else if (result.MessageType == WebSocketMessageType.Binary)
{
// Handle the binary message
- _logger?.LogDebug("Binary message received, length: {length} bytes", result.Count);
- _ = Task.Run(() => BinaryMessageReceived?.Invoke(this, new ClientBinaryMessageReceivedArgs(buffer[..result.Count], client.Id)), cancellationToken);
+ _logger?.LogDebug("Binary message received, length: {length} bytes", messageBuffer.Count);
+ _ = Task.Run(() => BinaryMessageReceived?.Invoke(this, new ClientBinaryMessageReceivedArgs([.. messageBuffer], client.Id)), cancellationToken);
}
// We have to check if the is shutting down here,
// because then we already sent the close message and we don't want to send another one