public static void HandlePacket(WorldConnection connection, WORLDMSG msgID, BinReader data) { try { DebugLogger.Logger.Log("LoginClient handling packet " + msgID.ToString()); bool handled_packet = false; ILoginServerPacketHandler handler = (ILoginServerPacketHandler)loginServerHandlers[msgID]; if (handler != null) { handled_packet = true; handler.HandlePacket(connection, msgID, data); } LoginServerPacketDelegate wspd = (LoginServerPacketDelegate)loginServerDelegates[(int)msgID]; if (wspd != null) { handled_packet = true; wspd(connection, msgID, data); } if (handled_packet == false) { DebugLogger.Logger.Log("WARNING: No valid handler found for " + msgID.ToString()); } } catch (Exception exp) { DebugLogger.Logger.Log("", exp); } }
public static void RegisterPacketHandler(WORLDMSG msgID, LoginServerPacketDelegate wspd) { if (loginServerDelegates[(int)msgID] != null) { LoginServerPacketDelegate dele = (LoginServerPacketDelegate)loginServerDelegates[(int)msgID]; loginServerDelegates[(int)msgID] = dele + wspd; } else { loginServerDelegates[(int)msgID] = wspd; } }
public static void RegisterPacketHandler(WORLDMSG msgID, LoginServerPacketDelegate wspd) { DebugLogger.Logger.Log("Registering login packet delegate for " + msgID); if (loginServerDelegates[(int)msgID] != null) { LoginServerPacketDelegate dele = (LoginServerPacketDelegate)loginServerDelegates[(int)msgID]; loginServerDelegates[(int)msgID] = dele + wspd; } else { loginServerDelegates[(int)msgID] = wspd; } }
static void SearchForDelegates(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); 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); } } } } } catch (Exception exp) { DebugLogger.Log("", exp); } }
public static void HandlePacket(WorldConnection connection, WORLDMSG msgID, BinReader data) { ILoginServerPacketHandler handler = (ILoginServerPacketHandler)loginServerHandlers[msgID]; if (handler != null) { handler.HandlePacket(connection, msgID, data); } LoginServerPacketDelegate wspd = (LoginServerPacketDelegate)loginServerDelegates[(int)msgID]; if (wspd != null) { wspd(connection, msgID, data); } }
public static void UnregisterPacketHandler(WORLDMSG msgID, LoginServerPacketDelegate wspd) { LoginServerPacketDelegate dele = (LoginServerPacketDelegate)loginServerDelegates[(int)msgID]; loginServerDelegates[(int)msgID] = dele - wspd; }