/// <summary>
        ///  Construct a <see cref="IBatchEventProcessor{TEvent}"/> that will automatically track the progress by updating its sequence when the <see cref="IEventHandler{TEvent}.OnEvent(TEvent,long,bool)"/> method returns.
        /// </summary>
        /// <param name="exceptionHandler"></param>
        /// <param name="dataProvider">to which events are published.</param>
        /// <param name="sequenceBarrier">on which it is waiting.</param>
        /// <param name="eventHandler">is the delegate to which events are dispatched.</param>
        public BatchEventProcessor(
            IDataProvider <TEvent> dataProvider,
            ISequenceBarrier sequenceBarrier,
            IEventHandler <TEvent> eventHandler,
            IExceptionHandler <TEvent> exceptionHandler)
        {
            _exceptionHandler = exceptionHandler;
            _dataProvider     = dataProvider;
            _sequenceBarrier  = sequenceBarrier;
            _eventHandler     = eventHandler;
            _sequence         = new Sequence();

            if (eventHandler is ISequenceReportingEventHandler <TEvent> reporting)
            {
                reporting?.SetSequenceCallback(_sequence);
            }

            if (eventHandler is IBatchStartAware batchStartAware)
            {
                _batchStartAware = batchStartAware;
            }

            if (eventHandler is ITimeoutHandler timeoutHandler)
            {
                _timeoutHandler = timeoutHandler;
            }

            if (eventHandler is ILifecycleAware lifecycleAware)
            {
                _lifecycleAware = lifecycleAware;
            }
        }
示例#2
0
        /// <summary>
        /// Construct a <see cref="BatchEventProcessor{T}"/> that will automatically track the progress by updating its sequence when
        /// the <see cref="IEventHandler{T}.OnEvent"/> method returns.
        /// </summary>
        /// <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>
        public BatchEventProcessor(IDataProvider <T> dataProvider, ISequenceBarrier sequenceBarrier, IEventHandler <T> eventHandler)
        {
            _dataProvider    = dataProvider;
            _sequenceBarrier = sequenceBarrier;
            _eventHandler    = eventHandler;

            if (eventHandler is ISequenceReportingEventHandler <T> sequenceReportingEventHandler)
            {
                sequenceReportingEventHandler.SetSequenceCallback(_sequence);
            }

            _batchStartAware = eventHandler as IBatchStartAware;
            _timeoutHandler  = eventHandler as ITimeoutHandler;
        }
示例#3
0
 public BatchStartAware(object eventHandler)
 {
     _eventHandler = eventHandler as IBatchStartAware;
 }
 public DefaultBatchStartAware(IBatchStartAware target)
 {
     _target = target;
 }