Beispiel #1
0
        public void DispatchMessage <TMessage>(TMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }
            var messageType = typeof(TMessage);
            MessageTypeAttribute messageTypeDescription = MessageTypeAttribute.GetMessageTypeDescription(messageType);

            if (_handlers.ContainsKey(messageType))
            {
                var messageHandlers = _handlers[messageType].ToArray();
                foreach (var messageHandler in messageHandlers)
                {
                    var tMessageHandler = (DelegateHandler <TMessage>)messageHandler;
                    if (!tMessageHandler.IsEnabled)
                    {
                        continue;
                    }
                    var evtArgs = new MessageDispatchEventArgs(message, messageHandler.GetType(), messageHandler);
                    switch (tMessageHandler.HandlerId.LogType)
                    {
                    case LogEnum.DevConsole:
                        if (DevMode.IsDevMode)
                        {
                            Write.DevDebug($"({messageType.Name})->({tMessageHandler.HandlerId.Location.Name}){tMessageHandler.HandlerId.Description}");
                        }
                        break;

                    case LogEnum.UserConsole:
                        Write.UserInfo($"({messageType.Name})->({tMessageHandler.HandlerId.Location.Name}){tMessageHandler.HandlerId.Description}");
                        break;

                    case LogEnum.Log:
                        Logger.InfoDebugLine($"({messageType.Name})->({tMessageHandler.HandlerId.Location.Name}){tMessageHandler.HandlerId.Description}");
                        break;

                    case LogEnum.None:
                    default:
                        break;
                    }
                    tMessageHandler.Handle(message);
                }
            }
            else if (!messageTypeDescription.IsCanNoHandler)
            {
                Write.DevWarn(messageType.FullName + "类型的消息没有对应的处理器");
            }
        }
Beispiel #2
0
        public void DispatchMessage <TMessage>(TMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }
            var messageType = typeof(TMessage);
            MessageTypeAttribute messageTypeDescription = MessageTypeAttribute.GetMessageTypeDescription(messageType);

            if (_handlers.ContainsKey(messageType))
            {
                var messageHandlers = _handlers[messageType].ToArray();
                foreach (var messageHandler in messageHandlers)
                {
                    var tMessageHandler = (DelegateHandler <TMessage>)messageHandler;
                    var evtArgs         = new MessageDispatchEventArgs(message, messageHandler.GetType(), messageHandler);
                    if (tMessageHandler.HandlerId.LogType == LogEnum.Log)
                    {
                        Global.Logger.InfoDebugLine($"{messageTypeDescription.Description}({messageType.Name}) -> ({tMessageHandler.HandlerId.Location.Name}){tMessageHandler.HandlerId.Description}");
                    }
                    if (tMessageHandler.HandlerId.LogType == LogEnum.Console)
                    {
                        Global.DebugLine($"{messageTypeDescription.Description}({messageType.Name}) -> ({tMessageHandler.HandlerId.Location.Name}){tMessageHandler.HandlerId.Description}");
                    }
                    this.Dispatching?.Invoke(this, evtArgs);
                    try {
                        tMessageHandler.Handle(message);
                        this.Dispatched?.Invoke(this, evtArgs);
                    }
                    catch (Exception e) {
                        this.DispatchFailed?.Invoke(this, evtArgs);
                        Global.Logger.ErrorDebugLine(tMessageHandler.GetType().FullName + ":" + messageType.FullName + ":" + e.Message, e);
                        throw;
                    }
                }
            }
            else if (!messageTypeDescription.IsCanNoHandler)
            {
                Global.Logger.WarnDebugLine(messageType.FullName + "类型的消息没有对应的处理器");
            }
        }