public static void HandlePackets(BinaryReader reader, int sender) { byte ID = reader.ReadByte(); try { if (ID >= Packets.Count) { return; } MPPacket packet = Packets[ID]; packet.Receive(reader, sender); } catch (Exception e) { Mod.Logger.Warn($"Exception handling packet #{ID}: {e}"); } }
private static void RegisterPackets() { Type mpPacketType = typeof(MPPacket); IEnumerable <Type> mpPacketTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => !t.IsAbstract && t.IsSubclassOf(mpPacketType)); foreach (var type in mpPacketTypes) { MPPacket packet = (MPPacket)Activator.CreateInstance(type); int count = Packets.Count; Packets.Add(packet); if (count > byte.MaxValue) { throw new Exception($"Packet limit of {byte.MaxValue} reached!"); } byte id = (byte)count; ID[type] = id; } }