public void Consume(RequestResponseContext requestResponseContext, IConsumerByteBuffer buffer) { try { RequestParser parser; var wasIncompleteContent = false; if (!requestResponseContext.HasConsumerData) { parser = RequestParser.ParserFor(buffer); requestResponseContext.ConsumerData(parser); } else { parser = requestResponseContext.ConsumerData <RequestParser>(); wasIncompleteContent = parser.IsMissingContent; parser.ParseNext(buffer); } Context?context = null; while (parser.HasFullRequest()) { var unfilteredRequest = parser.FullRequest(); unfilteredRequest = EnrichRequest(requestResponseContext, unfilteredRequest); DetermineKeepAlive(requestResponseContext, unfilteredRequest); var request = _serverActor._filters.Process(unfilteredRequest); var completes = new ResponseCompletes(_serverActor, requestResponseContext, request.Headers.HeaderOf(RequestHeader.XCorrelationID)); context = new Context(requestResponseContext, request, _serverActor._world.CompletesFor(completes)); _dispatcher.DispatchFor(context); if (wasIncompleteContent) { _serverActor._requestsMissingContent.Remove(requestResponseContext.Id); } } if (parser.IsMissingContent && !_serverActor._requestsMissingContent.ContainsKey(requestResponseContext.Id)) { if (context == null) { var completes = new ResponseCompletes(_serverActor, requestResponseContext); context = new Context(_serverActor._world.CompletesFor(completes)); } _serverActor._requestsMissingContent.Add(requestResponseContext.Id, new RequestResponseHttpContext(requestResponseContext, context)); } } catch (Exception e) { _serverActor.Logger.Error("Request parsing failed.", e); new ResponseCompletes(_serverActor, requestResponseContext, null).With(Response.Of(ResponseStatus.BadRequest, e.Message)); } finally { buffer.Release(); } }
public void CloseWith(RequestResponseContext requestResponseContext, object?data) { if (data != null) { var request = _serverActor._filters.Process((Request)data); var completes = new ResponseCompletes(_serverActor, requestResponseContext, request.Headers.HeaderOf(RequestHeader.XCorrelationID)); var context = new Context(requestResponseContext, request, _serverActor._world.CompletesFor(completes)); _dispatcher.DispatchFor(context); } }