aboutsummaryrefslogtreecommitdiff
path: root/lib/Net.Messaging.FBM/src/Server
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-01-28 13:40:54 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2023-01-28 13:40:54 -0500
commita4d1d5acff5760a9432117cae634ca98881ad0ec (patch)
treedcc96b9d1d00ff3038f578bba2f434b9bfd31e21 /lib/Net.Messaging.FBM/src/Server
parenta5d88f2cf08ea3aad2c8802bdc416e7b40c0f204 (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.cs25
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");
+
}
}