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)); }
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)); }
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; } }
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); }
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); }
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)); }
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(); }
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(); }