public void Load(Assembly assembly) { var types = AssemblyManager.Instance.GetAllTypesByAttribute(assembly, typeof(MessageHandlerAttribute)); var iopCodeType = GetParent <RootBehaviour <WebServerModule> >().Owner.OpCodeTypeBv; foreach (Type type in types) { object[] attrs = type.GetCustomAttributes(typeof(MessageHandlerAttribute), false); if (attrs.Length == 0) { continue; } MessageHandlerAttribute messageHandlerAttribute = attrs[0] as MessageHandlerAttribute; if (messageHandlerAttribute == null) { continue; } IMWHandler iMHandler = Activator.CreateInstance(type) as IMWHandler; if (iMHandler == null) { Log.Error($"message handle {type.Name} 需要继承 IMHandler"); continue; } Type messageType = iMHandler.GetMessageType(); ushort opcode = iopCodeType.GetOpcode(messageType); if (opcode == 0) { Log.Error($"消息opcode为0: {messageType.Name}"); continue; } RegisterHandler(opcode, iMHandler); } }
public void RegisterHandler(ushort opcode, IMWHandler handler) { if (!m_Dict_Handlers.ContainsKey(opcode)) { m_Dict_Handlers.Add(opcode, new List <IMWHandler>()); } m_Dict_Handlers[opcode].Add(handler); }