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); } }
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); } } } } }