Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Jung.SimpleWebSocket/Jung.SimpleWebSocket.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version>2.0.1</Version>
<Version>2.0.2</Version>
</PropertyGroup>

<!-- Package properties -->
Expand Down
18 changes: 13 additions & 5 deletions Jung.SimpleWebSocket/SimpleWebSocketServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<byte>(buffer), cancellationToken);
var messageBuffer = new List<byte>();
WebSocketReceiveResult result;

do
{
// read the incoming message in chunks
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(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
Expand Down