public void ShouldAllowChainingEventHandlersWithSuperType() { var latch = new CountdownEvent(2); var delayedEventHandler = CreateDelayedEventHandler(); IEventHandler <object> objectHandler = new EventHandlerStub <object>(latch); _disruptor.HandleEventsWith(delayedEventHandler).Then(objectHandler); EnsureTwoEventsProcessedAccordingToDependencies(latch, delayedEventHandler); }
public void ShouldHonourDependenciesForCustomProcessors() { var countDownLatch = new CountdownEvent(2); IEventHandler <TestEvent> eventHandler = new EventHandlerStub <TestEvent>(countDownLatch); var delayedEventHandler = CreateDelayedEventHandler(); _disruptor.HandleEventsWith(delayedEventHandler).Then(new EventProcessorFactory(_disruptor, eventHandler, 1)); EnsureTwoEventsProcessedAccordingToDependencies(countDownLatch, delayedEventHandler); }
public void ShouldWaitUntilAllFirstEventProcessorsProcessEventBeforeMakingItAvailableToDependentEventProcessors() { var eventHandler1 = CreateDelayedEventHandler(); var countDownLatch = new CountdownEvent(2); IEventHandler <TestEvent> eventHandler2 = new EventHandlerStub <TestEvent>(countDownLatch); _disruptor.HandleEventsWith(eventHandler1).Then(eventHandler2); EnsureTwoEventsProcessedAccordingToDependencies(countDownLatch, eventHandler1); }
public void ShouldAllowSpecifyingSpecificEventProcessorsToWaitFor() { var handler1 = CreateDelayedEventHandler(); var handler2 = CreateDelayedEventHandler(); var countDownLatch = new CountdownEvent(2); IEventHandler <TestEvent> handlerWithBarrier = new EventHandlerStub <TestEvent>(countDownLatch); _disruptor.HandleEventsWith(handler1, handler2); _disruptor.After(handler1, handler2).HandleEventsWith(handlerWithBarrier); EnsureTwoEventsProcessedAccordingToDependencies(countDownLatch, handler1, handler2); }
public void ShouldSupportCustomProcessorsAsDependencies() { var ringBuffer = _disruptor.RingBuffer; var delayedEventHandler = CreateDelayedEventHandler(); var countDownLatch = new CountdownEvent(2); IEventHandler <TestEvent> handlerWithBarrier = new EventHandlerStub <TestEvent>(countDownLatch); var processor = BatchEventProcessorFactory.Create(ringBuffer, ringBuffer.NewBarrier(), delayedEventHandler); _disruptor.HandleEventsWith(processor).Then(handlerWithBarrier); EnsureTwoEventsProcessedAccordingToDependencies(countDownLatch, delayedEventHandler); }
public void ShouldWaitOnAllProducersJoinedByAnd() { var handler1 = CreateDelayedEventHandler(); var handler2 = CreateDelayedEventHandler(); var countDownLatch = new CountdownEvent(2); IEventHandler <TestEvent> handlerWithBarrier = new EventHandlerStub <TestEvent>(countDownLatch); _disruptor.HandleEventsWith(handler1); var handler2Group = _disruptor.HandleEventsWith(handler2); _disruptor.After(handler1).And(handler2Group).HandleEventsWith(handlerWithBarrier); EnsureTwoEventsProcessedAccordingToDependencies(countDownLatch, handler1, handler2); }
public void RegisterDistinctHandlers() { var handler1 = new EventHandler("Handler1"); var handler2 = new EventHandler("Handler2"); var handler3 = new EventHandlerStub(); var esm = new EventServiceManager(); esm.RegisterHandler(handler1); esm.RegisterHandler(handler2); esm.RegisterHandler(handler3, "Handler3"); Assert.That(esm.GetHandler("Handler1"), Is.SameAs(handler1)); Assert.That(esm.GetHandler("Handler2"), Is.SameAs(handler2)); Assert.That(esm.GetHandler("Handler3"), Is.SameAs(handler3)); }
public void ShouldSupportCustomProcessorsAndHandlersAsDependencies() { var delayedEventHandler1 = CreateDelayedEventHandler(); var delayedEventHandler2 = CreateDelayedEventHandler(); _disruptor.HandleEventsWith(delayedEventHandler1); var ringBuffer = _disruptor.RingBuffer; var countDownLatch = new CountdownEvent(2); IEventHandler <TestEvent> handlerWithBarrier = new EventHandlerStub <TestEvent>(countDownLatch); var sequenceBarrier = _disruptor.After(delayedEventHandler1).AsSequenceBarrier(); var processor = BatchEventProcessorFactory.Create(ringBuffer, sequenceBarrier, delayedEventHandler2); _disruptor.After(delayedEventHandler1).And(processor).HandleEventsWith(handlerWithBarrier); EnsureTwoEventsProcessedAccordingToDependencies(countDownLatch, delayedEventHandler1, delayedEventHandler2); }