public Connection(
     PipeReader input,
     IOutputHandler outputHandler,
     IReceiver receiver,
     IRequestProcessIdentifier requestProcessIdentifier,
     IRequestRouter <IHandlerDescriptor?> requestRouter,
     IResponseRouter responseRouter,
     ILoggerFactory loggerFactory,
     OnUnhandledExceptionHandler onUnhandledException,
     TimeSpan requestTimeout,
     bool supportContentModified,
     int concurrency,
     IScheduler scheduler,
     CreateResponseExceptionHandler?getException = null
     ) : this(
         input,
         outputHandler,
         receiver,
         requestRouter,
         responseRouter,
         new DefaultRequestInvoker(
             requestRouter,
             outputHandler,
             requestProcessIdentifier,
             new RequestInvokerOptions(
                 requestTimeout,
                 supportContentModified,
                 concurrency),
             loggerFactory,
             scheduler),
         loggerFactory,
         onUnhandledException,
         getException)
 {
 }
Пример #2
0
        public object CreateCompositeWorkItem(Action<Exception> onUnhandledException)
        {
            var handler = new OnUnhandledExceptionHandler(onUnhandledException);
            var @delegate = Delegate.CreateDelegate(compositeWorkItemExceptionEvent.EventHandlerType, handler,
                                                    typeof(OnUnhandledExceptionHandler).GetMethod("OnUnhandledException"));

            var compositeWorkItem = Activator.CreateInstance(compositeWorkItemType);
            compositeWorkItemExceptionEvent.AddEventHandler(compositeWorkItem, @delegate);
            return compositeWorkItem;
        }
Пример #3
0
        public object CreateCompositeWorkItem(Action <Exception> onUnhandledException)
        {
            var handler   = new OnUnhandledExceptionHandler(onUnhandledException);
            var @delegate = Delegate.CreateDelegate(compositeWorkItemExceptionEvent.EventHandlerType, handler,
                                                    typeof(OnUnhandledExceptionHandler).GetMethod("OnUnhandledException"));

            var compositeWorkItem = Activator.CreateInstance(compositeWorkItemType);

            compositeWorkItemExceptionEvent.AddEventHandler(compositeWorkItem, @delegate);
            return(compositeWorkItem);
        }
 public Connection(
     PipeReader input,
     IOutputHandler outputHandler,
     IReceiver receiver,
     IRequestRouter <IHandlerDescriptor?> requestRouter,
     IResponseRouter responseRouter,
     RequestInvoker requestInvoker,
     ILoggerFactory loggerFactory,
     OnUnhandledExceptionHandler onUnhandledException,
     CreateResponseExceptionHandler?getException = null
     ) =>
Пример #5
0
 public Connection(
     PipeReader input,
     IOutputHandler outputHandler,
     IReceiver receiver,
     IRequestProcessIdentifier requestProcessIdentifier,
     IRequestRouter <IHandlerDescriptor> requestRouter,
     IResponseRouter responseRouter,
     ILoggerFactory loggerFactory,
     OnUnhandledExceptionHandler onUnhandledException,
     TimeSpan requestTimeout,
     bool supportContentModified,
     int concurrency,
     CreateResponseExceptionHandler getException = null
     ) =>
        public InputHandler(
            PipeReader pipeReader,
            IOutputHandler outputHandler,
            IReceiver receiver,
            IRequestRouter <IHandlerDescriptor?> requestRouter,
            IResponseRouter responseRouter,
            RequestInvoker requestInvoker,
            ILoggerFactory loggerFactory,
            OnUnhandledExceptionHandler unhandledInputProcessException,
            CreateResponseExceptionHandler?getException
            )
        {
            _pipeReader     = pipeReader;
            _outputHandler  = outputHandler;
            _receiver       = receiver;
            _requestRouter  = requestRouter;
            _responseRouter = responseRouter;
            _requestInvoker = requestInvoker;
            _unhandledInputProcessException = unhandledInputProcessException;
            _getException             = getException;
            _logger                   = loggerFactory.CreateLogger <InputHandler>();
            _headersBuffer            = new Memory <byte>(new byte[HeadersFinishedLength]);
            _contentLengthBuffer      = new Memory <byte>(new byte[ContentLengthLength]);
            _contentLengthValueBuffer = new byte[20];         // Max string length of the long value
            _contentLengthValueMemory =
                new Memory <byte>(_contentLengthValueBuffer); // Max string length of the long value
            _stopProcessing = new CancellationTokenSource();

            _disposable = new CompositeDisposable
            {
                Disposable.Create(() => _stopProcessing.Cancel()),
                _stopProcessing,
                _requestInvoker,
            };

            _inputActive = new AsyncSubject <Unit>();
            _inputQueue  = new Subject <IObservable <Unit> >();
        }