Exemple #1
0
        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);
            }
        }
Exemple #2
0
 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);
 }