示例#1
0
        public RawPacket Serialize(Packet packet)
        {
            PacketReflectionInfo info;

            if (!_info.TryGetValue(packet.OpCode, out info))
            {
                return(null);
            }
            byte[] data;
            using (TeraBinaryWriter writer = new TeraBinaryWriter())
            {
                writer.Position = 2;
                writer.Write(Tables.Game.NameToOpCode[packet.OpCode]);
                foreach (FieldInfo field in info.Fields)
                {
                    writer.Write(field.FieldType, field.GetValue(packet));
                }
                writer.Position = 0;
                writer.Write((ushort)writer.Length);
                data            = new byte[writer.Length];
                writer.Position = 0;
                ((MemoryStream)writer.Stream).Read(data, 0, writer.Length);
            }
            return(new RawPacket(data, packet.OpCode[0] == 'C' ? PacketDirection.ClientToServer : PacketDirection.ServerToClient));
        }