From 62f9e126912fa9a620a361fb5b88d33506e096fb Mon Sep 17 00:00:00 2001 From: vnugent Date: Sat, 14 Oct 2023 15:41:17 -0400 Subject: some refactoring and tests --- lib/Net.Messaging.FBM/src/Server/FBMListener.cs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'lib/Net.Messaging.FBM/src/Server') diff --git a/lib/Net.Messaging.FBM/src/Server/FBMListener.cs b/lib/Net.Messaging.FBM/src/Server/FBMListener.cs index fd8b025..46ee160 100644 --- a/lib/Net.Messaging.FBM/src/Server/FBMListener.cs +++ b/lib/Net.Messaging.FBM/src/Server/FBMListener.cs @@ -74,6 +74,7 @@ namespace VNLib.Net.Messaging.FBM.Server { Heap = heap; } +#pragma warning disable CA2007 // Consider calling ConfigureAwait on the awaited task /// /// Begins listening for requests on the current websocket until @@ -86,6 +87,9 @@ namespace VNLib.Net.Messaging.FBM.Server /// A that completes when the connection closes public async Task ListenAsync(WebSocketSession wss, RequestHandler handler, FBMListenerSessionParams args, object? userState) { + _ = wss ?? throw new ArgumentNullException(nameof(wss)); + _ = handler ?? throw new ArgumentNullException(nameof(handler)); + ListeningSession session = new(wss, handler, in args, userState); //Alloc a recieve buffer @@ -112,10 +116,10 @@ namespace VNLib.Net.Messaging.FBM.Server //break listen loop break; } - //create buffer for storing data - VnMemoryStream request = new(Heap); - //Copy initial data - request.Write(recvBuffer.Memory.Span[..result.Count]); + + //create buffer for storing data, pre alloc with initial data + VnMemoryStream request = new(Heap, recvBuffer.Memory[..result.Count]); + //Streaming read while (!result.EndOfMessage) { @@ -213,18 +217,17 @@ namespace VNLib.Net.Messaging.FBM.Server } //Get response data + await using IAsyncMessageReader messageEnumerator = await context.Response.GetResponseDataAsync(session.CancellationToken); + //Load inital segment if (await messageEnumerator.MoveNextAsync() && !session.CancellationToken.IsCancellationRequested) { ValueTask sendTask; //Syncrhonize access to send data because we may need to stream data to the client - if (!session.ResponseLock.Wait(0)) - { - await session.ResponseLock.WaitAsync(SEND_SEMAPHORE_TIMEOUT_MS); - } + await session.ResponseLock.WaitAsync(SEND_SEMAPHORE_TIMEOUT_MS); try { @@ -284,9 +287,11 @@ namespace VNLib.Net.Messaging.FBM.Server return Task.CompletedTask; } +#pragma warning restore CA2007 // Consider calling ConfigureAwait on the awaited task + private sealed class ListeningSession { - private readonly ReusableStore CtxStore; + private readonly ObjectRental CtxStore; private readonly CancellationTokenSource Cancellation; private readonly CancellationTokenRegistration Registration; private readonly FBMListenerSessionParams Params; -- cgit