using BeetleX; using BeetleX.Buffers; using BeetleX.Dispatchs; using System; using System.Collections.Concurrent; using System.Text; using System.Text.Json; namespace PlatformBenchmarks { public class HttpToken { private byte[] mLengthBuffer = new byte[10]; public RawDb Db { get; set; } public HttpToken() { } public SingleThreadDispatcher ThreadDispatcher { get; set; } public ConcurrentQueue Requests { get; set; } = new ConcurrentQueue(); public Utf8JsonWriter Utf8JsonWriter { get; set; } public ISession Session { get; set; } public RequestData CurrentRequest { get; set; } private HtmlBufferWriter mHtmlBufferWriter = null; public HtmlBufferWriter GetHtmlBufferWriter() { if (mHtmlBufferWriter == null) mHtmlBufferWriter = new HtmlBufferWriter(2048); return mHtmlBufferWriter; } public byte[] GetLengthBuffer(string length) { Encoding.ASCII.GetBytes(length, 0, length.Length, mLengthBuffer, 0); for (int i = length.Length; i < mLengthBuffer.Length; i++) { mLengthBuffer[i] = 32; } mLengthBuffer[6] = (byte)'\r'; mLengthBuffer[7] = (byte)'\n'; return mLengthBuffer; } public int ContentPostion { get; set; } public MemoryBlockCollection ContentLength { get; set; } public void FullLength(string length) { var item = GetLengthBuffer(length); ContentLength.Full(item); } private int mProcessStatus = 0; public void CompletedProcess() { System.Threading.Interlocked.Exchange(ref mProcessStatus, 0); } public bool EnterProcess() { return System.Threading.Interlocked.CompareExchange(ref mProcessStatus, 1, 0) == 0; } } }