public void AddMessageHandler <T>(IHandler <T> handler) where T : Message
        {
            List <Func <Message, bool> > handlers;

            if (!_handlers.TryGetValue(typeof(T), out handlers))
            {
                handlers = new List <Func <Message, bool> >();
                _handlers.Add(typeof(T), handlers);
            }
            var guaranteedDelivery = new GuaranteedOnceDelivery <T>(handler);

            if (guaranteedDelivery.Enabled)
            {
                if (_messageLock == null)
                {
                    throw new Exception("IMessageLock is null. You need to specify an implementation for IMessageLock.");
                }

                handler = new ExactlyOnceHandler <T>(handler, _messageLock, guaranteedDelivery.TimeOut);
            }
            var executionTimeMonitoring = _messagingMonitor as IMeasureHandlerExecutionTime;

            if (executionTimeMonitoring != null)
            {
                handler = new StopwatchHandler <T>(handler, executionTimeMonitoring);
            }

            handlers.Add(DelegateAdjuster.CastArgument <Message, T>(x => handler.Handle(x)));
        }
Пример #2
0
        public void AddMessageHandler <T>(Func <IHandler <T> > futureHandler) where T : Message
        {
            List <Func <Message, bool> > handlers;

            if (!_handlers.TryGetValue(typeof(T), out handlers))
            {
                handlers = new List <Func <Message, bool> >();
                _handlers.Add(typeof(T), handlers);
            }
            var handlerInstance    = futureHandler();
            var guaranteedDelivery = new GuaranteedOnceDelivery <T>(handlerInstance);

            IHandler <T> handler = new FutureHandler <T>(futureHandler);

            if (guaranteedDelivery.Enabled)
            {
                if (_messageLock == null)
                {
                    throw new Exception("IMessageLock is null. You need to specify an implementation for IMessageLock.");
                }

                handler = new ExactlyOnceHandler <T>(handler, _messageLock, guaranteedDelivery.TimeOut, handlerInstance.GetType().FullName.ToLower());
            }
            var executionTimeMonitoring = _messagingMonitor as IMeasureHandlerExecutionTime;

            if (executionTimeMonitoring != null)
            {
                handler = new StopwatchHandler <T>(handler, executionTimeMonitoring);
            }

            Subscribers.Add(new Subscriber(typeof(T)));
            handlers.Add(message => handler.Handle((T)message));
        }
        public async Task WhenHandlerIsWrappedinStopWatch_MonitoringIsCalled()
        {
            var handler = MockHandler();
            var monitoring = Substitute.For<IMeasureHandlerExecutionTime>();

            var stopWatchHandler = new StopwatchHandler<OrderAccepted>(handler, monitoring);

            await stopWatchHandler.Handle(new OrderAccepted());

            monitoring.Received(1). HandlerExecutionTime(
                Arg.Any<string>(), Arg.Any<string>(), Arg.Any<TimeSpan>());
        }
        public async Task WhenHandlerIsWrappedinStopWatch_InnerHandlerIsCalled()
        {
            var handler = MockHandler();
            var monitoring = Substitute.For<IMeasureHandlerExecutionTime>();

            var stopWatchHandler = new StopwatchHandler<OrderAccepted>(handler, monitoring);

            var result = await stopWatchHandler.Handle(new OrderAccepted());
            Assert.That(result, Is.True);

            await handler.Received(1).Handle(Arg.Any<OrderAccepted>());
        }
Пример #5
0
        public async Task WhenHandlerIsWrappedinStopWatch_MonitoringIsCalled()
        {
            var handler    = MockHandler();
            var monitoring = Substitute.For <IMeasureHandlerExecutionTime>();

            var stopWatchHandler = new StopwatchHandler <OrderAccepted>(handler, monitoring);

            await stopWatchHandler.Handle(new OrderAccepted());

            monitoring.Received(1).HandlerExecutionTime(
                Arg.Any <Type>(), Arg.Any <Type>(), Arg.Any <TimeSpan>());
        }
Пример #6
0
        public async Task WhenHandlerIsWrappedinStopWatch_InnerHandlerIsCalled()
        {
            var handler    = MockHandler();
            var monitoring = Substitute.For <IMeasureHandlerExecutionTime>();

            var stopWatchHandler = new StopwatchHandler <OrderAccepted>(handler, monitoring);

            var result = await stopWatchHandler.Handle(new OrderAccepted());

            result.ShouldBeTrue();

            await handler.Received(1).Handle(Arg.Any <OrderAccepted>());
        }
        public async Task WhenHandlerIsWrappedinStopWatch_MonitoringIsCalledWithCorrectTypeNames()
        {
            var handler = MockHandler();
            var innnerHandlerName = handler.GetType().Name.ToLower();

            var monitoring = Substitute.For<IMeasureHandlerExecutionTime>();

            var stopWatchHandler = new StopwatchHandler<OrderAccepted>(handler, monitoring);

            await stopWatchHandler.Handle(new OrderAccepted());

            monitoring.Received(1).HandlerExecutionTime(
                innnerHandlerName, "orderaccepted", Arg.Any<TimeSpan>());
        }
Пример #8
0
        public async Task WhenHandlerIsWrappedinStopWatch_MonitoringIsCalledWithCorrectTypes()
        {
            var handler           = MockHandler();
            var innnerHandlerName = handler.GetType().Name.ToLowerInvariant();

            var monitoring = Substitute.For <IMeasureHandlerExecutionTime>();

            var stopWatchHandler = new StopwatchHandler <OrderAccepted>(handler, monitoring);

            await stopWatchHandler.Handle(new OrderAccepted());

            monitoring.Received(1).HandlerExecutionTime(
                handler.GetType(), typeof(OrderAccepted), Arg.Any <TimeSpan>());
        }
Пример #9
0
 public static Stopwatch OnUpdate(this Stopwatch watch, StopwatchHandler handler)
 {
     watch.Update += handler;
     return(watch);
 }
Пример #10
0
 public static Timeout OnResumed(this Timeout watch, StopwatchHandler handler)
 {
     watch.Resumed += handler;
     return(watch);
 }
Пример #11
0
 public static Stopwatch OnStopped(this Stopwatch watch, StopwatchHandler handler)
 {
     watch.Stopped += handler;
     return watch;
 }
Пример #12
0
 public static Timeout OnUpdate(this Timeout watch, StopwatchHandler handler)
 {
     watch.Update += handler;
     return(watch);
 }
Пример #13
0
 public static Timeout OnBegin(this Timeout watch, StopwatchHandler handler)
 {
     watch.Begin += handler;
     return(watch);
 }
Пример #14
0
 public static Stopwatch OnResumed(this Stopwatch watch, StopwatchHandler handler)
 {
     watch.Resumed += handler;
     return(watch);
 }
Пример #15
0
 public static Stopwatch OnUpdate(this Stopwatch watch, StopwatchHandler handler)
 {
     watch.Update += handler;
     return watch;
 }
Пример #16
0
 public static Stopwatch OnPaused(this Stopwatch watch, StopwatchHandler handler)
 {
     watch.Paused += handler;
     return(watch);
 }
Пример #17
0
 public static Stopwatch OnResumed(this Stopwatch watch, StopwatchHandler handler)
 {
     watch.Resumed += handler;
     return watch;
 }
Пример #18
0
 public static Timeout OnUpdate(this Timeout watch, StopwatchHandler handler)
 {
     watch.Update += handler;
     return watch;
 }
Пример #19
0
 public static Timeout OnResumed(this Timeout watch, StopwatchHandler handler)
 {
     watch.Resumed += handler;
     return watch;
 }
Пример #20
0
 public static Timeout OnBegin(this Timeout watch, StopwatchHandler handler)
 {
     watch.Begin += handler;
     return watch;
 }
Пример #21
0
 public static Stopwatch OnBegin(this Stopwatch watch, StopwatchHandler handler)
 {
     watch.Begin += handler;
     return(watch);
 }
Пример #22
0
 public static Stopwatch OnBegin(this Stopwatch watch, StopwatchHandler handler)
 {
     watch.Begin += handler;
     return watch;
 }