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)); }
public FutureHandler GetFutureHandler( Action<IoSession, Exception> caughtAction = null, Action<IoSession, object> rcvAction = null) { handler = new FutureHandler(are, caughtAction, rcvAction); return handler; }
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)); }
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)); }