private void DispatchSingleMessage(IMessage message, QueueMessageDisptaching queueMessageDispatching) { var messageHandlerDataList = _handlerProvider.GetHandlers(message.GetType()); if (!messageHandlerDataList.Any()) { queueMessageDispatching.OnMessageHandled(message); return; } foreach (var messageHandlerData in messageHandlerDataList) { var singleMessageDispatching = new SingleMessageDisptaching(message, queueMessageDispatching, messageHandlerData.AllHandlers, _typeNameProvider); if (messageHandlerData.ListHandlers != null && messageHandlerData.ListHandlers.IsNotEmpty()) { foreach (var handler in messageHandlerData.ListHandlers) { DispatchSingleMessageToHandlerAsync(singleMessageDispatching, handler, null, 0); } } if (messageHandlerData.QueuedHandlers != null && messageHandlerData.QueuedHandlers.IsNotEmpty()) { var queueHandler = new QueuedHandler <IMessageHandlerProxy1>(messageHandlerData.QueuedHandlers, (queuedHandler, nextHandler) => DispatchSingleMessageToHandlerAsync(singleMessageDispatching, nextHandler, queuedHandler, 0)); DispatchSingleMessageToHandlerAsync(singleMessageDispatching, queueHandler.DequeueHandler(), queueHandler, 0); } } }
private void DispatchMultiMessage <T>(IEnumerable <IMessage> messages, IEnumerable <MessageHandlerData <T> > messageHandlerDataList, RootDisptaching rootDispatching, Action <MultiMessageDisptaching, T, QueuedHandler <T>, int> dispatchAction) where T : class, IObjectProxy { foreach (var messageHandlerData in messageHandlerDataList) { var multiMessageDispatching = new MultiMessageDisptaching(messages, messageHandlerData.AllHandlers, rootDispatching, _typeNameProvider); if (messageHandlerData.ListHandlers != null && messageHandlerData.ListHandlers.IsNotEmpty()) { foreach (var handler in messageHandlerData.ListHandlers) { dispatchAction(multiMessageDispatching, handler, null, 0); } } if (messageHandlerData.QueuedHandlers != null && messageHandlerData.QueuedHandlers.IsNotEmpty()) { var queuedHandler = new QueuedHandler <T>(messageHandlerData.QueuedHandlers, (currentQueuedHandler, nextHandler) => dispatchAction(multiMessageDispatching, nextHandler, currentQueuedHandler, 0)); dispatchAction(multiMessageDispatching, queuedHandler.DequeueHandler(), queuedHandler, 0); } } }