示例#1
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);
            }

            handlers.Add(message => handler.Handle((T)message));
        }
示例#2
0
 public FutureHandler GetFutureHandler(
     Action<IoSession, Exception> caughtAction = null, 
     Action<IoSession, object> rcvAction = null)
 {
     handler = new FutureHandler(are, caughtAction, rcvAction);
     return handler;
 }
示例#3
0
 public FutureHandler GetFutureHandler(
     Action <IoSession, Exception> caughtAction = null,
     Action <IoSession, object> rcvAction       = null)
 {
     handler = new FutureHandler(are, caughtAction, rcvAction);
     return(handler);
 }
        public Func <Message, bool> WrapMessageHandler <T>(Func <IHandler <T> > futureHandler) where T : Message
        {
            IHandler <T> handler = new FutureHandler <T>(futureHandler);

            handler = MaybeWrapWithGuaranteedDelivery(futureHandler, handler);
            handler = MaybeWrapStopwatch(handler);

            return(message => handler.Handle((T)message));
        }
示例#5
0
        public Func <Message, Task <bool> > WrapMessageHandler <T>(Func <IHandlerAsync <T> > futureHandler) where T : Message
        {
            IHandlerAsync <T> handler = new FutureHandler <T>(futureHandler);

            handler = MaybeWrapWithGuaranteedDelivery(futureHandler, handler);
            handler = MaybeWrapStopwatch(handler);

            return(async message => await handler.Handle((T)message).ConfigureAwait(false));
        }