internal ValueExceptionHandlerSetting(IValueEventHandler <T> eventHandler, ConsumerRepository consumerRepository)
 {
     _eventHandler       = eventHandler;
     _consumerRepository = consumerRepository;
 }
예제 #2
0
 public ISequence GetSequenceFor <T>(IValueEventHandler <T> eventHandler)
     where T : struct
 {
     return(GetEventProcessorFor(eventHandler).Sequence);
 }
예제 #3
0
 /// <summary>
 /// Get the <see cref="ISequenceBarrier"/> used by a specific handler. Note that the <see cref="ISequenceBarrier"/>
 /// may be shared by multiple event handlers.
 /// </summary>
 /// <param name="handler">the handler to get the barrier for</param>
 /// <returns>the SequenceBarrier used by the given handler</returns>
 public ISequenceBarrier GetBarrierFor(IValueEventHandler <T> handler) => _consumerRepository.GetBarrierFor(handler);
예제 #4
0
 /// <summary>
 /// Gets the sequence value for the specified event handlers.
 /// </summary>
 /// <param name="handler">eventHandler to get the sequence for.</param>
 /// <returns>eventHandler's sequence</returns>
 public long GetSequenceValueFor(IValueEventHandler <T> handler) => _consumerRepository.GetSequenceFor(handler).Value;
예제 #5
0
 /// <summary>
 /// Override the default exception handler for a specific handler.
 /// <code>disruptorWizard.HandleExceptionsIn(eventHandler).With(exceptionHandler);</code>
 /// </summary>
 /// <param name="eventHandler">eventHandler the event handler to set a different exception handler for</param>
 /// <returns>an <see cref="ValueExceptionHandlerSetting{T}"/> dsl object - intended to be used by chaining the with method call</returns>
 public ValueExceptionHandlerSetting <T> HandleExceptionsFor(IValueEventHandler <T> eventHandler)
 {
     return(new ValueExceptionHandlerSetting <T>(eventHandler, _consumerRepository));
 }
예제 #6
0
 public EventProcessorFactory(ValueDisruptor <TestValueEvent> disruptor, IValueEventHandler <TestValueEvent> eventHandler, int sequenceLength)
 {
     _disruptor      = disruptor;
     _eventHandler   = eventHandler;
     _sequenceLength = sequenceLength;
 }
예제 #7
0
        /// <summary>
        /// Create a new <see cref="IBatchEventProcessor{T}"/> with dedicated generic arguments.
        /// </summary>
        /// <typeparam name="T">the type of event used.</typeparam>
        /// <param name="dataProvider">dataProvider to which events are published</param>
        /// <param name="sequenceBarrier">SequenceBarrier on which it is waiting.</param>
        /// <param name="eventHandler">eventHandler is the delegate to which events are dispatched.</param>
        /// <returns></returns>
        public static IValueBatchEventProcessor <T> Create <T>(IValueDataProvider <T> dataProvider, ISequenceBarrier sequenceBarrier, IValueEventHandler <T> eventHandler)
            where T : struct
        {
            var dataProviderProxy    = StructProxy.CreateProxyInstance(dataProvider);
            var sequenceBarrierProxy = StructProxy.CreateProxyInstance(sequenceBarrier);
            var eventHandlerProxy    = StructProxy.CreateProxyInstance(eventHandler);
            var batchStartAwareProxy = eventHandler is IBatchStartAware batchStartAware?StructProxy.CreateProxyInstance(batchStartAware) : new NoopBatchStartAware();

            var batchEventProcessorType = typeof(ValueBatchEventProcessor <, , , ,>).MakeGenericType(typeof(T), dataProviderProxy.GetType(), sequenceBarrierProxy.GetType(), eventHandlerProxy.GetType(), batchStartAwareProxy.GetType());

            return((IValueBatchEventProcessor <T>)Activator.CreateInstance(batchEventProcessorType, dataProviderProxy, sequenceBarrierProxy, eventHandlerProxy, batchStartAwareProxy));
        }
예제 #8
0
    internal static IValueEventProcessor <T> Create <T>(IValueDataProvider <T> dataProvider, SequenceBarrier sequenceBarrier, IValueEventHandler <T> eventHandler, Type processorType)
        where T : struct
    {
        var dataProviderProxy   = StructProxy.CreateProxyInstance(dataProvider);
        var sequencerOptions    = sequenceBarrier.GetSequencerOptions();
        var eventHandlerProxy   = StructProxy.CreateProxyInstance(eventHandler);
        var onBatchStartInvoker = CreateOnBatchStartEvaluator(eventHandler);

        var eventProcessorType = processorType.MakeGenericType(typeof(T), dataProviderProxy.GetType(), sequencerOptions.GetType(), eventHandlerProxy.GetType(), onBatchStartInvoker.GetType());

        return((IValueEventProcessor <T>)Activator.CreateInstance(eventProcessorType, dataProviderProxy, sequenceBarrier, eventHandlerProxy, onBatchStartInvoker) !);
    }
예제 #9
0
 /// <summary>
 /// Create a new <see cref="IEventProcessor{T}"/> with dedicated generic arguments.
 /// </summary>
 /// <typeparam name="T">the type of event used.</typeparam>
 /// <param name="dataProvider">dataProvider to which events are published</param>
 /// <param name="sequenceBarrier">SequenceBarrier on which it is waiting.</param>
 /// <param name="eventHandler">eventHandler is the delegate to which events are dispatched.</param>
 /// <returns></returns>
 public static IValueEventProcessor <T> Create <T>(IValueDataProvider <T> dataProvider, SequenceBarrier sequenceBarrier, IValueEventHandler <T> eventHandler)
     where T : struct
 {
     return(Create(dataProvider, sequenceBarrier, eventHandler, typeof(ValueEventProcessor <, , , ,>)));
 }