public static void RunSingleSegmentParser(int numberOfRequests, int concurrentConnections, byte[] requestPayload, Action <HttpRequestSingleSegment, WritableBuffer> writeResponse) { var factory = new PipelineFactory(); var listener = new FakeListener(factory, concurrentConnections); listener.OnConnection(async connection => { while (true) { // Wait for data var result = await connection.Input.ReadAsync(); ReadableBuffer input = result.Buffer; try { if (input.IsEmpty && result.IsCompleted) { // No more data break; } var requestBytes = input.First.Span; if (requestBytes.Length != 492) { continue; } // Parse the input http request HttpRequestSingleSegment parsedRequest = HttpRequestSingleSegment.Parse(requestBytes); // Writing directly to pooled buffers var output = connection.Output.Alloc(); writeResponse(parsedRequest, output); await output.FlushAsync(); } catch (Exception e) { var istr = new Utf8String(input.First.Span).ToString(); Debug.WriteLine(e.Message); } finally { // Consume the input connection.Input.Advance(input.End, input.End); } } }); var tasks = new Task[numberOfRequests]; for (int i = 0; i < numberOfRequests; i++) { tasks[i] = listener.ExecuteRequestAsync(requestPayload); } Task.WaitAll(tasks); listener.Dispose(); factory.Dispose(); }
/// <summary> /// Releases all resources owned by the listener /// </summary> protected virtual void Dispose(bool disposing) { if (disposing) { GC.SuppressFinalize(this); _socket?.Dispose(); _socket = null; if (_ownsFactory) { _factory?.Dispose(); } _factory = null; } }
public void Dispose() { if (_pipeline != null) { _pipeline.Dispose(); _pipeline = null; } if (_factoryContext != null) { _factoryContext.Dispose(); _factoryContext = null; } }
/// <summary> /// Releases all resources owned by the connection /// </summary> protected virtual void Dispose(bool disposing) { if (disposing) { _output.CompleteWriter(); _output.CompleteReader(); _input.CompleteWriter(); _input.CompleteReader(); GC.SuppressFinalize(this); _socket?.Dispose(); _socket = null; if (_ownsFactory) { _factory?.Dispose(); } _factory = null; } }
/// <summary> /// Releases all resources owned by the connection /// </summary> protected virtual void Dispose(bool disposing) { if (disposing) { _stopping = true; _output.CancelPendingRead(); Task.WaitAll(_sendTask, _receiveTask); _output.CompleteWriter(); _input.CompleteReader(); GC.SuppressFinalize(this); _socket?.Dispose(); _socket = null; if (_ownsFactory) { _factory?.Dispose(); } _factory = null; } }
public void Dispose() { Stop(); PipelineFactory.Dispose(); }