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 + "类型的消息没有对应的处理器"); } }
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 + "类型的消息没有对应的处理器"); } }