private void Dispatch(MessageDispatch dispatch, List <IMessageHandlerInvoker> invokers)
        {
            switch (_status)
            {
            case Status.Stopped:
                throw new InvalidOperationException("MessageDispatcher is stopped");

            case Status.Stopping:
                if (dispatch.IsLocal)
                {
                    break;
                }

                throw new InvalidOperationException("MessageDispatcher is stopping");
            }

            if (invokers.Count == 0)
            {
                dispatch.SetIgnored();
                return;
            }

            dispatch.SetHandlerCount(invokers.Count);

            foreach (var invoker in invokers)
            {
                if (invoker.ShouldHandle(dispatch.Message))
                {
                    Dispatch(dispatch, invoker);
                }
            }
        }
Beispiel #2
0
        private void Dispatch(MessageDispatch dispatch, List <IMessageHandlerInvoker> invokers)
        {
            if (!_isRunning)
            {
                throw new InvalidOperationException("MessageDispatcher is stopped");
            }

            if (invokers.Count == 0)
            {
                dispatch.SetIgnored();
                return;
            }

            dispatch.SetHandlerCount(invokers.Count);

            foreach (var invoker in invokers)
            {
                Dispatch(dispatch, invoker);
            }
        }
Beispiel #3
0
        public void Dispatch(MessageDispatch dispatch)
        {
            if (!_isRunning)
            {
                throw new InvalidOperationException("MessageDispatcher is stopped");
            }

            var invokers = _invokers.GetValueOrDefault(dispatch.Message.TypeId(), _emptyInvokers)
                           .Where(dispatch.ShouldInvoke)
                           .ToList();

            if (invokers.Count == 0)
            {
                dispatch.SetIgnored();
                return;
            }

            dispatch.SetHandlerCount(invokers.Count);

            foreach (var invoker in invokers)
            {
                Dispatch(dispatch, invoker);
            }
        }
Beispiel #4
0
        private void Dispatch(MessageDispatch dispatch, List<IMessageHandlerInvoker> invokers)
        {
            if (!_isRunning)
                throw new InvalidOperationException("MessageDispatcher is stopped");

            if (invokers.Count == 0)
            {
                dispatch.SetIgnored();
                return;
            }

            dispatch.SetHandlerCount(invokers.Count);

            foreach (var invoker in invokers)
            {
                Dispatch(dispatch, invoker);
            }
        }