Ejemplo n.º 1
0
        public override DataStream Deserialize(DataStream ds)
        {
            LoginBytes = ds.ReadBytes();
            Hash       = ds.ReadBytes();
            if (ds.CanReadBytes())
            {
                Unk1 = ds.ReadByte();
            }
            if (ds.CanReadBytes())
            {
                Unk2 = ds.ReadBytes();
            }

            return(base.Deserialize(ds));
        }
Ejemplo n.º 2
0
        public override DataStream Deserialize(DataStream ds)
        {
            ds.SaveEndianness();

            ds.IsLittleEndian = true;
            while (ds.CanReadBytes(1))
            {
                var packetId     = ds.ReadCompactUInt32();
                var packetLength = (int)ds.ReadCompactUInt32();

                PacketIdentifier containerId;
                byte[]           buffer;

                if (packetId == 0x22)
                {
                    var length = ds.ReadCompactUInt32();

                    containerId = new PacketIdentifier(ds.ReadUInt16(), PacketType.ServerContainer);
                    buffer      = ds.ReadBytes((int)(length - 2));
                }
                else
                {
                    containerId = new PacketIdentifier(packetId, PacketType.ServerPacket);
                    buffer      = ds.ReadBytes(packetLength);
                }

                var packet = new BasePacket(buffer);

                Packets.Add(new PacketEventArgs(containerId, packet));
            }

            ds.RestoreEndianness();

            return(base.Deserialize(ds));
        }
Ejemplo n.º 3
0
 public void Encode(DataStream inputStream, DataStream outputStream)
 {
     if (inputStream.CanReadBytes())
     {
         var offset = inputStream.Position;
         var length = inputStream.Count - offset;
         Encode(inputStream.Buffer, offset, length, outputStream);
         inputStream.Position = length;
     }
 }
Ejemplo n.º 4
0
        public override DataStream Deserialize(DataStream ds)
        {
            Key           = ds.ReadBytes();
            ServerVersion = ds.ReadBytes(4);
            AuthType      = ds.ReadByte();

            if (ds.CanReadBytes(1))
            {
                CRC = ds.ReadAsciiString();
                if (CRC == null)
                {
                    CRC = string.Empty;
                }
            }
            if (ds.CanReadBytes(1))
            {
                Unk = ds.ReadByte();
            }
            return(ds);
        }
Ejemplo n.º 5
0
        private bool ReadContent()
        {
            if (!networkStream.CanReadBytes((int)PacketLength))
            {
                return(false);
            }
            PacketStream.Resize((int)PacketLength);
            var result = networkStream.TryRead(PacketStream.Buffer, 0, (int)PacketLength);

            if (result)
            {
                State = PacketReaderState.Complete;
            }
            return(result);
        }
Ejemplo n.º 6
0
        public override DataStream Deserialize(DataStream ds)
        {
            RoleId = ds.ReadUInt32();

            Level = ds.ReadInt16();

            Unk1 = ds.ReadByte();
            Unk2 = ds.ReadByte();

            Hp = ds.Read <HpMp>();
            Mp = ds.Read <HpMp>();

            if (ds.CanReadBytes())
            {
                NextTarget = ds.ReadUInt32();
            }

            return(base.Deserialize(ds));
        }
Ejemplo n.º 7
0
        public virtual void ProcessStream(SocketStateObject state, DataStream ds)
        {
            var goodPos = 0;

            while (true)
            {
                var id     = 0U;
                var length = 0U;
                if (!ds.TryReadCompactUInt32(out id) || !ds.TryReadCompactUInt32(out length) || !ds.CanReadBytes((int)length))
                {
                    if (length > PacketSizeLimit)
                    {
                        Logger.Process("packetId = {0}, packetLength = {1}, packetSizeLimit = {2}", id, length, PacketSizeLimit);
                        Stop();
                    }
                    break;
                }
                var packetId     = new PacketIdentifier(id, state.IsC2S ? PacketType.ClientPacket : PacketType.ServerPacket);
                var packetStream = new DataStream(ds.ReadBytes((int)length));
                packetStream.IsLittleEndian = false;
                goodPos = ds.Position;

                ProcessPacketStream(state, packetId, packetStream);
            }
            ds.Position = goodPos;
            ds.Flush();
        }
Ejemplo n.º 8
0
        public virtual void ProcessStream(SocketStateObject state, DataStream ds)
        {
            var goodPos = 0;

            while (true)
            {
                var id     = 0U;
                var length = 0U;
                if (!ds.TryReadCompactUInt32(out id) || !ds.TryReadCompactUInt32(out length) || !ds.CanReadBytes((int)length))
                {
                    break;
                }
                var packetStream = new DataStream(ds.ReadBytes((int)length));
                packetStream.IsLittleEndian = false;
                goodPos = ds.Position;

                ProcessPacketStream(state, id, packetStream);
            }
            ds.Position = goodPos;
            ds.Flush();
        }