Exemple #1
0
        /// <summary>
        /// Returns false if the packet should be sent to the loginserver
        /// </summary>
        /// <param name="client"></param>
        /// <param name="msgID"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static bool HandlePacket(LoginClient client, CMSG msgID, BinReader data)
        {
            if (msgID >= CMSG.MAX)
            {
                return(true);
            }

            ILoginClientPacketHandler handler = (ILoginClientPacketHandler)loginClientHandlers[msgID];
            bool wasHandled = false;

            if (handler != null)
            {
                wasHandled = handler.HandlePacket(client, msgID, data);
            }
            LoginClientPacketDelegate wcpd = (LoginClientPacketDelegate)loginClientDelegates[(int)msgID];

            if (wcpd != null)
            {
                foreach (LoginClientPacketDelegate d in wcpd.GetInvocationList())
                {
                    if (d(client, msgID, data))
                    {
                        wasHandled = true;
                    }
                }
            }
            return(wasHandled);
        }
Exemple #2
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);
     }
 }
Exemple #3
0
 public static void RegisterPacketHandler(CMSG msgID, LoginClientPacketDelegate lcpd)
 {
     if (loginClientDelegates[(int)msgID] != null)
     {
         LoginClientPacketDelegate dele = (LoginClientPacketDelegate)loginClientDelegates[(int)msgID];
         loginClientDelegates[(int)msgID] = dele + lcpd;
     }
     else
     {
         loginClientDelegates[(int)msgID] = lcpd;
     }
 }
        public static void RegisterPacketHandler(CMSG msgID, LoginClientPacketDelegate lcpd)
        {
            DebugLogger.Logger.Log("Registering login packet delegate for " + msgID);

            if (loginClientDelegates[(int)msgID] != null)
            {
                LoginClientPacketDelegate dele = (LoginClientPacketDelegate)loginClientDelegates[(int)msgID];
                loginClientDelegates[(int)msgID] = dele + lcpd;
            }
            else
            {
                loginClientDelegates[(int)msgID] = lcpd;
            }
        }
Exemple #5
0
 static void SearchForDelegates(Type type)
 {
     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);
                     RegisterPacketHandler((CMSG)attrib.MsgID, wcpd);
                 }
                 else
                 {
                     LoginServerPacketDelegate wspd = (LoginServerPacketDelegate)Delegate.CreateDelegate(typeof(LoginServerPacketDelegate), method);
                     RegisterPacketHandler((WORLDMSG)attrib.MsgID, wspd);
                 }
             }
         }
         else
         {
             object obj = GetHandlerObject(type);
             foreach (LoginPacketDelegate attrib in attribs)
             {
                 if (attrib.ClientMessage)
                 {
                     LoginClientPacketDelegate wcpd = (LoginClientPacketDelegate)Delegate.CreateDelegate(typeof(LoginClientPacketDelegate), obj, method.Name);
                     RegisterPacketHandler((CMSG)attrib.MsgID, wcpd);
                 }
                 else
                 {
                     LoginServerPacketDelegate wspd = (LoginServerPacketDelegate)Delegate.CreateDelegate(typeof(LoginServerPacketDelegate), obj, method.Name);
                     RegisterPacketHandler((WORLDMSG)attrib.MsgID, wspd);
                 }
             }
         }
     }
 }
        /// <summary>
        /// Returns false if the packet should be sent to the loginserver
        /// </summary>
        /// <param name="client"></param>
        /// <param name="msgID"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static bool HandlePacket(LoginClient client, CMSG msgID, BinReader data)
        {
            DebugLogger.Logger.Log("LoginClient handling packet " + msgID.ToString());

            if (msgID >= CMSG.MAX)
            {
                return(true);
            }

            ILoginClientPacketHandler handler = (ILoginClientPacketHandler)loginClientHandlers[msgID];
            bool wasHandled = false;

            try {
                long position = data.BaseStream.Position;

                if (handler != null)
                {
                    wasHandled = handler.HandlePacket(client, msgID, data);
                }

                data.BaseStream.Position = position;

                LoginClientPacketDelegate wcpd = (LoginClientPacketDelegate)loginClientDelegates[(int)msgID];
                if (wcpd != null)
                {
                    foreach (LoginClientPacketDelegate d in wcpd.GetInvocationList())
                    {
                        if (d != null)
                        {
                            if (d(client, msgID, data))
                            {
                                wasHandled = true;
                            }
                            data.BaseStream.Position = position;
                        }
                    }
                }
                return(wasHandled);
            } catch (Exception exp) {
                DebugLogger.Logger.Log("", exp);
            }
            return(wasHandled);
        }
Exemple #7
0
        public static void UnregisterPacketHandler(CMSG msgID, LoginClientPacketDelegate wcpd)
        {
            LoginClientPacketDelegate dele = (LoginClientPacketDelegate)loginClientDelegates[(int)msgID];

            loginClientDelegates[(int)msgID] = dele - wcpd;
        }