Skip to content

Commit 7d1d0e0

Browse files
committed
[dotnet] [bidi] Fix web socket communication for .net framework
Related to #14537
1 parent 419484d commit 7d1d0e0

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs

+18-7
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ public class WebSocketTransport(Uri _uri) : ITransport, IDisposable
1616
private readonly ClientWebSocket _webSocket = new();
1717
private readonly ArraySegment<byte> _receiveBuffer = new(new byte[1024 * 8]);
1818

19+
private readonly SemaphoreSlim _socketSendSemaphoreSlim = new(1, 1);
20+
1921
public async Task ConnectAsync(CancellationToken cancellationToken)
2022
{
21-
_webSocket.Options.SetBuffer(_receiveBuffer.Count, _receiveBuffer.Count, _receiveBuffer);
2223
await _webSocket.ConnectAsync(_uri, cancellationToken).ConfigureAwait(false);
2324
}
2425

@@ -32,8 +33,9 @@ public async Task<T> ReceiveAsJsonAsync<T>(JsonSerializerOptions jsonSerializerO
3233
{
3334
result = await _webSocket.ReceiveAsync(_receiveBuffer, cancellationToken).ConfigureAwait(false);
3435

35-
await ms.WriteAsync(_receiveBuffer.Array!, _receiveBuffer.Offset, result.Count).ConfigureAwait(false);
36-
} while (!result.EndOfMessage);
36+
await ms.WriteAsync(_receiveBuffer.Array!, _receiveBuffer.Offset, result.Count, cancellationToken).ConfigureAwait(false);
37+
}
38+
while (!result.EndOfMessage);
3739

3840
ms.Seek(0, SeekOrigin.Begin);
3941

@@ -51,12 +53,21 @@ public async Task SendAsJsonAsync(Command command, JsonSerializerOptions jsonSer
5153
{
5254
var buffer = JsonSerializer.SerializeToUtf8Bytes(command, typeof(Command), jsonSerializerOptions);
5355

54-
if (_logger.IsEnabled(LogEventLevel.Trace))
56+
await _socketSendSemaphoreSlim.WaitAsync(cancellationToken);
57+
58+
try
5559
{
56-
_logger.Trace($"BiDi SND >> {buffer.Length} > {Encoding.UTF8.GetString(buffer)}");
57-
}
60+
if (_logger.IsEnabled(LogEventLevel.Trace))
61+
{
62+
_logger.Trace($"BiDi SND >> {buffer.Length} > {Encoding.UTF8.GetString(buffer)}");
63+
}
5864

59-
await _webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, cancellationToken).ConfigureAwait(false);
65+
await _webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, cancellationToken).ConfigureAwait(false);
66+
}
67+
finally
68+
{
69+
_socketSendSemaphoreSlim.Release();
70+
}
6071
}
6172

6273
public void Dispose()

0 commit comments

Comments
 (0)