/// <summary> /// 分发actor消息 /// </summary> public static async ETTask Handle( this ActorMessageDispatcherComponent self, Entity entity, Session session, object message) { if (!self.ActorMessageHandlers.TryGetValue(message.GetType(), out IMActorHandler handler)) { throw new Exception($"not found message handler: {message}"); } await handler.Handle(session, entity, message); }
public static void Load(this ActorMessageDispatcherComponent self) { self.ActorMessageHandlers.Clear(); HashSet <Type> types = Game.EventSystem.GetTypes(typeof(ActorMessageHandlerAttribute)); foreach (Type type in types) { object obj = Activator.CreateInstance(type); IMActorHandler imHandler = obj as IMActorHandler; if (imHandler == null) { throw new Exception($"message handler not inherit IMActorHandler abstract class: {obj.GetType().FullName}"); } Type messageType = imHandler.GetMessageType(); self.ActorMessageHandlers.Add(messageType, imHandler); } }
public static void Awake(this ActorMessageDispatcherComponent self) { self.Load(); }