Ejemplo n.º 1
0
        internal EventHandlerGroup <T> CreateEventProcessors(ISequence[] barrierSequences, IEventHandler <T>[] eventHandlers)
        {
            CheckNotStarted();

            var processorSequences = new List <ISequence>(eventHandlers.Length);
            var barrier            = _ringBuffer.NewBarrier(barrierSequences);

            foreach (var eventHandler in eventHandlers)
            {
                var batchEventProcessor = new BatchEventProcessor <T>(_ringBuffer, barrier, eventHandler);
                if (_exceptionHandler != null)
                {
                    batchEventProcessor.SetExceptionHandler(_exceptionHandler);
                }

                _consumerRepository.Add(batchEventProcessor, eventHandler, barrier);
                processorSequences.Add(batchEventProcessor.Sequence);
            }

            if (processorSequences.Count > 0)
            {
                _consumerRepository.UnMarkEventProcessorsAsEndOfChain(barrierSequences);
            }

            return(new EventHandlerGroup <T>(this, _consumerRepository, processorSequences));
        }
        public EventHandlerGroup <T> CreateEventProcessors(Sequence[] barrierSequences,
                                                           IEventHandler <T>[] eventHandlers)
        {
            CheckNotStarted();

            var processorSequences = new Sequence[eventHandlers.Length];
            var barrier            = ringBuffer.NewBarrier(barrierSequences);

            for (int i = 0, eventHandlersLength = eventHandlers.Length; i < eventHandlersLength; i++)
            {
                IEventHandler <T> eventHandler = eventHandlers[i];

                BatchEventProcessor <T> batchEventProcessor = new BatchEventProcessor <T>(ringBuffer, barrier, eventHandler);

                if (exceptionHandler != null)
                {
                    batchEventProcessor.SetExceptionHandler(exceptionHandler);
                }

                consumerRepository.Add(batchEventProcessor, eventHandler, barrier);
                processorSequences[i] = batchEventProcessor.Sequence;
            }

            if (processorSequences.Length > 0)
            {
                consumerRepository.UnMarkEventProcessorsAsEndOfChain(barrierSequences);
            }

            return(new EventHandlerGroup <T>(this, consumerRepository, processorSequences));
        }
Ejemplo n.º 3
0
        private void UpdateGatingSequencesForNextInChain(ISequence[] barrierSequences, ISequence[] processorSequences)
        {
            if (processorSequences.Length > 0)
            {
                _ringBuffer.AddGatingSequences(processorSequences);
                foreach (var barrierSequence in barrierSequences)
                {
                    _ringBuffer.RemoveGatingSequence(barrierSequence);
                }

                _consumerRepository.UnMarkEventProcessorsAsEndOfChain(barrierSequences);
            }
        }