diff options
author | vnugent <public@vaughnnugent.com> | 2023-01-28 13:40:54 -0500 |
---|---|---|
committer | vnugent <public@vaughnnugent.com> | 2023-01-28 13:40:54 -0500 |
commit | a4d1d5acff5760a9432117cae634ca98881ad0ec (patch) | |
tree | dcc96b9d1d00ff3038f578bba2f434b9bfd31e21 /lib/Net.Messaging.FBM/src/Server | |
parent | a5d88f2cf08ea3aad2c8802bdc416e7b40c0f204 (diff) |
Fix FBMMessageHeader default and session connection status
Diffstat (limited to 'lib/Net.Messaging.FBM/src/Server')
-rw-r--r-- | lib/Net.Messaging.FBM/src/Server/FBMRequestMessage.cs | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/Net.Messaging.FBM/src/Server/FBMRequestMessage.cs b/lib/Net.Messaging.FBM/src/Server/FBMRequestMessage.cs index d37ba84..db0655a 100644 --- a/lib/Net.Messaging.FBM/src/Server/FBMRequestMessage.cs +++ b/lib/Net.Messaging.FBM/src/Server/FBMRequestMessage.cs @@ -27,6 +27,7 @@ using System.Text; using System.Buffers; using System.Text.Json; using System.Collections.Generic; +using System.Runtime.CompilerServices; using VNLib.Utils.IO; using VNLib.Utils.Extensions; @@ -37,7 +38,7 @@ namespace VNLib.Net.Messaging.FBM.Server /// <summary> /// Represents a client request message to be serviced /// </summary> - public sealed class FBMRequestMessage : IReusable + public sealed class FBMRequestMessage : IFBMHeaderBuffer, IReusable { private readonly List<FBMMessageHeader> _headers; private readonly int HeaderBufferSize; @@ -52,7 +53,7 @@ namespace VNLib.Net.Messaging.FBM.Server _headers = new(); } - private byte[]? _headerBuffer; + private char[]? _headerBuffer; /// <summary> /// The ID of the current message @@ -109,13 +110,10 @@ namespace VNLib.Net.Messaging.FBM.Server return; } - ConnectionId = socketId; - - //Get mesage buffer wrapper around the header - FBMHeaderBuffer buffer = new(_headerBuffer); + ConnectionId = socketId; //Parse headers - ParseStatus = Helpers.ParseHeaders(vms, in buffer, _headers, dataEncoding); + ParseStatus = Helpers.ParseHeaders(vms, this, _headers, dataEncoding); } /// <summary> @@ -145,7 +143,7 @@ namespace VNLib.Net.Messaging.FBM.Server { ParseStatus = HeaderParseError.None; //Alloc header buffer - _headerBuffer = ArrayPool<byte>.Shared.Rent(HeaderBufferSize); + _headerBuffer = ArrayPool<char>.Shared.Rent(HeaderBufferSize); } @@ -157,12 +155,21 @@ namespace VNLib.Net.Messaging.FBM.Server //Clear headers before freeing buffer _headers.Clear(); //Free header-buffer - ArrayPool<byte>.Shared.Return(_headerBuffer!); + ArrayPool<char>.Shared.Return(_headerBuffer!); _headerBuffer = null; ConnectionId = null; MessageId = 0; IsControlFrame = false; return true; } + + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + Span<char> IFBMHeaderBuffer.GetSpan(int offset, int count) + => _headerBuffer != null ? _headerBuffer.AsSpan(offset, count) : throw new InvalidOperationException("The buffer is no longer available"); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + Span<char> IFBMHeaderBuffer.GetSpan() => _headerBuffer ?? throw new InvalidOperationException("The buffer is no longer available"); + } } |