public static void LogResponse(RequestResponseContext filterContext)
 {
     using (DatabaseContext context = new DatabaseContext())
     {
         sqlDatabase.ExecuteNonQuery(Procedure.spLog_Update_Response, filterContext.ControllerAction.Id, filterContext.JsonResponse);
     }
 }
    public void Consume(RequestResponseContext context, IConsumerByteBuffer buffer)
    {
        var bytes = buffer.ToArray();

        buffer.Release();
        Consume(context, new ReadOnlySequence <byte>(bytes));
    }
Example #3
0
 internal ResponseCompletes(ServerActor serverActor, Request request, RequestResponseContext requestResponseContext, Header?correlationId) : base(serverActor.Stage.Scheduler)
 {
     _serverActor            = serverActor;
     _request                = request;
     _requestResponseContext = requestResponseContext;
     _correlationId          = correlationId;
 }
Example #4
0
            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();
                }
            }
Example #5
0
 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);
     }
 }
Example #6
0
    public void RespondWith(RequestResponseContext context, object response, bool closeFollowing)
    {
        var textResponse = response.ToString();

        if (!string.IsNullOrEmpty(textResponse))
        {
            var buffer =
                new BasicConsumerByteBuffer(0, textResponse.Length + 1024)
                .Put(Converters.TextToBytes(textResponse)).Flip();

            RespondWith(context, buffer, closeFollowing);
        }
    }
        public void RespondWith(RequestResponseContext context, IConsumerByteBuffer buffer)
        {
            var parser = _receivedStatus ?
                         ResponseParser.ParserForBodyOnly(buffer.ToArray()) :
                         ResponseParser.ParserFor(buffer.ToArray());

            if (!_receivedStatus)
            {
                Response.Set(parser.FullResponse());
            }
            else
            {
                _respondWithSafely.WriteUsing("events", parser.FullResponse());
            }

            _receivedStatus = true;
        }
Example #8
0
 public void Abandon(RequestResponseContext context)
 {
     if (!_actor.IsStopped)
     {
         Action <IResponseSenderChannel> cons8585439 = __ => __.Abandon(context);
         if (_mailbox.IsPreallocated)
         {
             _mailbox.Send(_actor, cons8585439, null, AbandonRepresentation1);
         }
         else
         {
             _mailbox.Send(
                 new LocalMessage <IResponseSenderChannel>(_actor, cons8585439,
                                                           AbandonRepresentation1));
         }
     }
     else
     {
         _actor.DeadLetters?.FailedDelivery(new DeadLetter(_actor, AbandonRepresentation1));
     }
 }
Example #9
0
            private Request EnrichRequest(RequestResponseContext requestResponseContext, Request request)
            {
                try
                {
                    var remoteAddress = requestResponseContext.RemoteAddress();
                    if (!string.IsNullOrEmpty(remoteAddress))
                    {
                        request.Headers.Add(RequestHeader.Of(RequestHeader.XForwardedFor, remoteAddress !));
                    }
                    else
                    {
                        _serverActor.Logger.Error("Unable to enrich request headers");
                    }
                }
                catch (Exception exception)
                {
                    _serverActor.Logger.Error("Unable to enrich request headers", exception);
                }

                return(request);
            }
        public void Consume <T>(RequestResponseContext <T> context, ReadOnlySequence <byte> buffer)
        {
            var requestPart = buffer.ToArray().BytesToText(0, (int)buffer.Length);

            _requestBuilder.Append(_remaining).Append(requestPart);
            _remaining = string.Empty;
            if (_requestBuilder.Length >= CurrentExpectedRequestLength)
            {
                // assume currentExpectedRequestLength is length of all
                // requests when multiple are received at one time
                var combinedRequests = _requestBuilder.ToString();
                var combinedLength   = combinedRequests.Length;
                _requestBuilder.Clear(); // reuse

                var startIndex   = 0;
                var currentIndex = 0;
                var last         = false;
                while (!last)
                {
                    if (startIndex > combinedRequests.Length)
                    {
                        _remaining = combinedRequests.Substring(currentIndex);
                        return;
                    }

                    var request = combinedRequests.Substring(startIndex, CurrentExpectedRequestLength);
                    currentIndex += CurrentExpectedRequestLength;
                    startIndex    = startIndex + CurrentExpectedRequestLength;

                    Requests.Add(request);

                    var responseBuffer = new BasicConsumerByteBuffer(1, CurrentExpectedRequestLength);
                    context.RespondWith(responseBuffer.Clear().Put(Converters.TextToBytes(request)).Flip()); // echo back

                    last = currentIndex == combinedLength;

                    UntilConsume.WriteUsing("serverConsume", 1);
                }
            }
        }
Example #11
0
 public void RespondWith(RequestResponseContext context,
                         Message.IConsumerByteBuffer buffer, bool closeFollowing)
 {
     if (!_actor.IsStopped)
     {
         Action <IResponseSenderChannel> cons829071244 = __ =>
                                                         __.RespondWith(context, buffer, closeFollowing);
         if (_mailbox.IsPreallocated)
         {
             _mailbox.Send(_actor, cons829071244, null, RespondWithRepresentation3);
         }
         else
         {
             _mailbox.Send(new LocalMessage <IResponseSenderChannel>(_actor,
                                                                     cons829071244, RespondWithRepresentation3));
         }
     }
     else
     {
         _actor.DeadLetters?.FailedDelivery(new DeadLetter(_actor, RespondWithRepresentation3));
     }
 }
Example #12
0
 public void RespondWith(RequestResponseContext context, object response,
                         bool closeFollowing)
 {
     if (!_actor.IsStopped)
     {
         Action <IResponseSenderChannel> cons1528567494 = __ =>
                                                          __.RespondWith(context, response, closeFollowing);
         if (_mailbox.IsPreallocated)
         {
             _mailbox.Send(_actor, cons1528567494, null, RespondWithRepresentation4);
         }
         else
         {
             _mailbox.Send(new LocalMessage <IResponseSenderChannel>(_actor,
                                                                     cons1528567494, RespondWithRepresentation4));
         }
     }
     else
     {
         _actor.DeadLetters?.FailedDelivery(new DeadLetter(_actor, RespondWithRepresentation4));
     }
 }
    public void RespondWith(RequestResponseContext context, object response, bool closeFollowing)
    {
        var textResponse = response.ToString();

        var buffer =
            new BasicConsumerByteBuffer(0, textResponse !.Length + 1024)
            .Put(Converters.TextToBytes(textResponse)).Flip();

        var parser = _receivedStatus ?
                     ResponseParser.ParserForBodyOnly(buffer) :
                     ResponseParser.ParserFor(buffer);

        if (!_receivedStatus)
        {
            Response.Set(parser.FullResponse());
        }
        else
        {
            _respondWithSafely.WriteUsing("events", parser.FullResponse());
        }

        _receivedStatus = true;
    }
Example #14
0
 public void Abandon(RequestResponseContext context) => ((Context)context).Close();
Example #15
0
 public SseClient(RequestResponseContext <object> context)
 {
     _context        = context;
     _builder        = new StringBuilder();
     _maxMessageSize = Configuration.Instance.Sizing.MaxMessageSize;
 }
Example #16
0
 public void LogResponse(RequestResponseContext filterContext)
 {
     RequestResponseDbAccess.LogResponse(filterContext);
 }
Example #17
0
            private bool DetermineKeepAlive(RequestResponseContext requestResponseContext, Request unfilteredRequest)
            {
                var keepAlive = unfilteredRequest.HeaderValueOr(RequestHeader.Connection, Header.ValueKeepAlive).Equals(Header.ValueKeepAlive);

                return(keepAlive);
            }
Example #18
0
 public Logger()
 {
     FilterContext = new RequestResponseContext();
     FilterContext.ControllerAction = new ControllerAction();
 }
 public void CloseWith <T>(RequestResponseContext <T> requestResponseContext, object data) => UntilClosed.WriteUsing("closed", 1);
Example #20
0
 public void RespondWith(RequestResponseContext context, IConsumerByteBuffer buffer) =>
 RespondWith(context, buffer, false);
Example #21
0
 public void RespondWith(RequestResponseContext context, IConsumerByteBuffer buffer, bool closeFollowing)
 {
     ((Context)context).QueueWritable(buffer);
     ((Context)context).RequireExplicitClose(!closeFollowing);
 }
Example #22
0
 public EmployeeService(RequestResponseContext context)
 {
     _context = context;
 }
 public void CloseWith(RequestResponseContext requestResponseContext, object data)
 {
 }
Example #24
0
 internal ResponseCompletes(ServerActor serverActor, RequestResponseContext requestResponseContext) : this(serverActor, requestResponseContext, null)
 {
 }
        public void Abandon(RequestResponseContext context)
        {
            var count = AbandonCount.IncrementAndGet();

            _abandonSafely.WriteUsing("count", count);
        }
 public RequestResponseService(RequestResponseContext context)
 {
     _context = context;
 }
Example #27
0
 public Context(RequestResponseContext <object> requestResponseContext, Request request, ICompletesEventually completes)
 {
     ClientContext = requestResponseContext;
     Request       = request;
     _completes    = completes;
 }
Example #28
0
 public RequestResponseHttpContext(RequestResponseContext requestResponseContext, Context httpContext)
 {
     RequestResponseContext = requestResponseContext;
     HttpContext            = httpContext;
 }