Пример #1
0
 void SearchForClientPacketDelegates(Type type)
 {
     try {
         MethodInfo[] methods = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
         foreach (MethodInfo method in methods)
         {
             LoginPacketDelegate[] attribs = (LoginPacketDelegate[])method.GetCustomAttributes(typeof(LoginPacketDelegate), true);
             if (attribs.Length == 0)
             {
                 continue;
             }
             if (method.IsStatic)
             {
                 foreach (LoginPacketDelegate attrib in attribs)
                 {
                     if (attrib.ClientMessage)
                     {
                         LoginClientPacketDelegate wcpd = (LoginClientPacketDelegate)Delegate.CreateDelegate(typeof(LoginClientPacketDelegate), method);
                         LoginPacketManager.RegisterPacketHandler((CMSG)attrib.MsgID, wcpd);
                         if (m_clientPacketDelegates.Contains(attrib.MsgID))
                         {
                             LoginClientPacketDelegate dele = (LoginClientPacketDelegate)m_clientPacketDelegates[attrib.MsgID];
                             m_clientPacketDelegates[attrib.MsgID] = dele + wcpd;
                         }
                         else
                         {
                             m_clientPacketDelegates[attrib.MsgID] = wcpd;
                         }
                     }
                 }
             }
             else
             {
                 object obj = GetHandlerObject(type);
                 foreach (LoginPacketDelegate attrib in attribs)
                 {
                     if (attrib.ClientMessage)
                     {
                         LoginClientPacketDelegate wcpd = (LoginClientPacketDelegate)Delegate.CreateDelegate(typeof(LoginClientPacketDelegate), obj, method.Name);
                         LoginPacketManager.RegisterPacketHandler((CMSG)attrib.MsgID, wcpd);
                         if (m_clientPacketDelegates.Contains(attrib.MsgID))
                         {
                             LoginClientPacketDelegate dele = (LoginClientPacketDelegate)m_clientPacketDelegates[attrib.MsgID];
                             m_clientPacketDelegates[attrib.MsgID] = dele + wcpd;
                         }
                         else
                         {
                             m_clientPacketDelegates[attrib.MsgID] = wcpd;
                         }
                     }
                 }
             }
         }
     } catch (Exception exp) {
         DebugLogger.Logger.Log("", exp);
     }
 }
Пример #2
0
 void RegisterClientPacketHandler(Type type)
 {
     LoginPacketHandler[] attribs = (LoginPacketHandler[])type.GetCustomAttributes(typeof(LoginPacketHandler), true);
     foreach (LoginPacketHandler attrib in attribs)
     {
         if (attrib.UseDelegates)
         {
             SearchForClientPacketDelegates(type);
         }
         else
         {
             if (attrib.ClientMessage)
             {
                 if (type.GetInterface(typeof(ILoginClientPacketHandler).ToString()) != null)
                 {
                     object obj = GetHandlerObject(type);
                     LoginPacketManager.RegisterPacketHandler((CMSG)attrib.MsgID, (ILoginClientPacketHandler)obj);
                     m_registeredClientPackets.Add((CMSG)attrib.MsgID);
                 }
             }
         }
     }
 }