public void Register <T>(int id, string name, int length, TypedPacketReceiveHandler onReceive) where T : IRecvPacket { Type type = typeof(T); ConstructorInfo[] ctors = type.GetConstructors(); bool valid = false; for (int i = 0; i < ctors.Length && !valid; i++) { ParameterInfo[] parameters = ctors[i].GetParameters(); valid = (parameters.Length == 1 && parameters[0].ParameterType == typeof(PacketReader)); } if (!valid) { throw new NetworkException(string.Format("Unable to register packet type {0} without a public constructor with a {1} parameter", type, typeof(PacketReader))); } if (id > byte.MaxValue) { throw new NetworkException(string.Format("Unable to register packet id {0:X2} because it is greater than byte.MaxValue", id)); } TypedPacketHandler handler = new TypedPacketHandler(id, name, type, length, onReceive); m_TypedHandlers[id].Add(handler); }
public void Unregister(int id, TypedPacketReceiveHandler onRecieve) { for (int i = 0; i < m_TypedHandlers[id].Count; i++) { TypedPacketHandler handler = m_TypedHandlers[id][i] as TypedPacketHandler; if (handler != null && handler.TypeHandler != null) { if (handler.TypeHandler.Method.Equals(onRecieve.Method)) { m_TypedHandlers[id].RemoveAt(i); break; } } else { Tracer.Critical("Unable to unregister this onReceive method."); } } }
public void Register <T>(int id, string name, int length, TypedPacketReceiveHandler onReceive) where T : IRecvPacket { m_RegisteredHandlers.Add(new Tuple <int, TypedPacketReceiveHandler>(id, onReceive)); World.Engine.Client.Register <T>(id, name, length, onReceive); }
public TypedPacketHandler(int id, string name, Type type, int length, TypedPacketReceiveHandler handler) : base(id, name, length, null) { this.type = type; this.handler = handler; }
public void RegisterExtended <T>(int extendedId, int subId, string name, int length, TypedPacketReceiveHandler onReceive) where T : IRecvPacket { Type type = typeof(T); ConstructorInfo[] ctors = type.GetConstructors(); bool valid = false; for (int i = 0; i < ctors.Length && !valid; i++) { ParameterInfo[] parameters = ctors[i].GetParameters(); valid = (parameters.Length == 1 && parameters[0].ParameterType == typeof(PacketReader)); } if (!valid) { throw new NetworkException(string.Format("Unable to register packet type {0} without a public constructor with a {1} parameter", type, typeof(PacketReader))); } if (extendedId > byte.MaxValue) { throw new NetworkException(string.Format("Unable to register packet extendedId {0:X2} because it is greater than byte.MaxValue", extendedId)); } if (subId > byte.MaxValue) { throw new NetworkException(string.Format("Unable to register packet subId {0:X2} because it is greater than byte.MaxValue", subId)); } if (m_ExtendedTypedHandlers[extendedId] == null) { m_ExtendedTypedHandlers[extendedId] = new List <PacketHandler> [0x100]; for (int i = 0; i < m_ExtendedTypedHandlers[extendedId].Length; i++) { m_ExtendedTypedHandlers[extendedId][i] = new List <PacketHandler>(); } } Tracer.Debug("Registering Extended Command: id: 0x{0:X2} subCommand: 0x{1:X2} Name: {2} Length: {3}", extendedId, subId, name, length); TypedPacketHandler handler = new TypedPacketHandler(subId, name, type, length, onReceive); m_ExtendedTypedHandlers[extendedId][subId].Add(handler); }
public TypedPacketHandler(int id, string name, Type type, int length, TypedPacketReceiveHandler handler) : base(id, name, length, null) { m_Type = type; m_Handler = handler; }