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 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 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."); } } }
private void InvokeHandlers(List <PacketHandler> packetHandlers, byte[] buffer, int length) { if (packetHandlers == null) { return; } int count = packetHandlers.Count; for (int i = 0; i < count; i++) { PacketHandler handler = packetHandlers[i]; TypedPacketHandler typedHandler = packetHandlers[i] as TypedPacketHandler; if (typedHandler != null) { PacketReader reader = PacketReader.CreateInstance(buffer, length, typedHandler.Length != -1); IRecvPacket recvPacket = typedHandler.CreatePacket(reader); if (typedHandler.TypeHandler != null) { typedHandler.TypeHandler(recvPacket); } else { Tracer.Warn("ClientNetwork: Unknown packet received!"); } } else { PacketReader reader = PacketReader.CreateInstance(buffer, length, packetHandlers[i].Length != -1); if (handler.Handler != null) { handler.Handler(reader); } } } }
private void InvokeHandler(PacketHandler packetHandler, byte[] buffer, int length) { if (packetHandler == null) { return; } TypedPacketHandler typedHandler = packetHandler as TypedPacketHandler; if (typedHandler != null) { PacketReader reader = PacketReader.CreateInstance(buffer, length, typedHandler.Length != -1); IRecvPacket recvPacket = typedHandler.CreatePacket(reader); if (typedHandler.TypeHandler != null) { typedHandler.TypeHandler(recvPacket); } else { Tracer.Warn("NetworkClient: Unhandled packet received! [typedHandler != null]"); } } else { PacketReader reader = PacketReader.CreateInstance(buffer, length, packetHandler.Length != -1); if (packetHandler.Handler != null) { packetHandler.Handler(reader); } else { Tracer.Warn("NetworkClient: Unhandled packet received! [typedHandler == null]"); } } }