public void Write(ProtocolBufferWriter writer) { switch (Subtype) { case LoginResponseMessageSubtype.Handoff: writer.WriteUInt(AccountId); writer.WriteUInt(OneTimeKey); writer.WriteNetAddress(Address); break; case LoginResponseMessageSubtype.HandoffFailed: writer.WriteUInt((uint)ErrorCode); break; case LoginResponseMessageSubtype.WaitForLogout: writer.WriteUInt(MillisecondsUntilLogin); break; case LoginResponseMessageSubtype.Success: writer.WriteUInt(AccountId); writer.WriteUInt(UnkUint); break; case LoginResponseMessageSubtype.Failed: writer.WriteUInt((uint)ErrorCode); break; } writer.WriteString(UnkStr); }
public void Write(ProtocolBufferWriter writer) { SubtypeCheck(); writer.WriteUInt(AccountId); writer.WriteUInt(OneTimeKey); writer.WriteString(Version); }
public void Write(ProtocolBufferWriter writer) { writer.WriteULong(EntityId); switch (Subtype) { case CallMethodMessageSubtype.MethodId: case CallMethodMessageSubtype.UnkPlusMethodId: writer.WriteUInt((uint)MethodId); break; case CallMethodMessageSubtype.MethodName: case CallMethodMessageSubtype.UnkPlusMethodName: writer.WriteString(MethodName); break; default: throw new Exception($"Invalid subtype ({Subtype}) for CallMethodMessage!"); } var buffer = BufferManager.RequestBuffer(); using (var bw = buffer.CreateWriter()) { bw.Write((byte)0x4F); // 'O' - Optimized Marshall Format Packet.Write(bw); bw.Write((byte)0x66); // 'f' - python payload finish mark writer.WriteArray(buffer.Buffer, buffer.BaseOffset, (int)bw.BaseStream.Position); } BufferManager.FreeBuffer(buffer); if (Subtype == CallMethodMessageSubtype.UnkPlusMethodId || Subtype == CallMethodMessageSubtype.UnkPlusMethodName) { writer.WriteUInt(UnknownValue); } }
public void Write(ProtocolBufferWriter writer) { switch (Subtype) { case CallServerMethodSubtype.UserMethodById: case CallServerMethodSubtype.SysUserMethodById: case CallServerMethodSubtype.ActorMethodById: case CallServerMethodSubtype.ChatMsgById: case CallServerMethodSubtype.WorldMsgById: writer.WriteUInt(MethodId); break; case CallServerMethodSubtype.UserMethodByName: case CallServerMethodSubtype.SysUSerMethodByName: case CallServerMethodSubtype.ActorMethodByName: case CallServerMethodSubtype.ChatMsgByName: case CallServerMethodSubtype.WorldMsgByName: writer.WriteString(MethodName); break; } writer.WriteArray(Payload); }
public void Write(BinaryWriter bw) { var sizePosition = bw.BaseStream.Position; bw.Write((ushort)0); // Size placeholder bw.Write(Channel); bw.Write((byte)0); // padding if (Channel != 0) { bw.Write(SequenceNumber); // sequence num? bw.Write(0xDEADBEEF); // const bw.Write(0); // padding } var packetBeginPosition = (int)bw.BaseStream.Position; var packetBuffer = BufferManager.RequestBuffer(); int uncompressedSize; using (var ms = new MemoryStream(packetBuffer.Buffer, packetBuffer.BaseOffset, packetBuffer.MaxLength, true)) { using (var packetWriter = new BinaryWriter(ms, Encoding.UTF8, true)) { using (var writer = new ProtocolBufferWriter(packetWriter, ProtocolBufferFlags.DontFragment)) { writer.WriteProtocolFlags(); writer.WriteDebugByte(41); if ((Message.SubtypeFlags & ClientMessageSubtypeFlag.HasSubtype) == ClientMessageSubtypeFlag.HasSubtype) { writer.WriteByte(Message.RawSubtype); } Message.Write(writer); writer.WriteDebugByte(42); var currentPos = (int)ms.Position; writer.WriteXORCheck(currentPos); uncompressedSize = (int)ms.Position; } } } var compress = (Message.SubtypeFlags & ClientMessageSubtypeFlag.Compress) == ClientMessageSubtypeFlag.Compress && uncompressedSize > 0; using (var writer = new ProtocolBufferWriter(bw, ProtocolBufferFlags.DontFragment)) { writer.WriteProtocolFlags(); writer.WritePacketType((ushort)Message.Type, compress); writer.WriteXORCheck((int)(bw.BaseStream.Position - packetBeginPosition)); } int packetSize = uncompressedSize; if (compress) // TODO: test { bw.Write((byte)0x01); bw.Write(uncompressedSize); var compressedBuffer = BufferManager.RequestBuffer(); int compressedSize; using (var compressStream = compressedBuffer.GetStream(true)) { using (var compressorStream = new DeflateStream(compressStream, CompressionMode.Compress, true)) compressorStream.Write(packetBuffer.Buffer, packetBuffer.BaseOffset, uncompressedSize); compressedSize = (int)compressStream.Position; } BufferManager.FreeBuffer(packetBuffer); packetBuffer = compressedBuffer; packetSize = compressedSize; } bw.Write(packetBuffer.Buffer, packetBuffer.BaseOffset, packetSize); BufferManager.FreeBuffer(packetBuffer); var currentPosition = bw.BaseStream.Position; bw.BaseStream.Position = sizePosition; bw.Write((ushort)(currentPosition - sizePosition)); bw.BaseStream.Position = currentPosition; }
public void Write(ProtocolBufferWriter writer) { writer.WriteUInt(Unknown); }
public void Write(ProtocolBufferWriter writer) { throw new NotImplementedException(); }
public void Write(ProtocolBufferWriter writer) { writer.WriteByte(UnkByte); writer.WriteMovementData(); }
public void Write(ProtocolBufferWriter writer) { writer.WriteByte(ChannelId); writer.WriteULong(UnkMaybeEntityId); }
public void Write(ProtocolBufferWriter writer) { writer.WriteByte(UnkByte); writer.WriteMovementData(); // TODO is this required? }
public void Write(ProtocolBufferWriter writer) { writer.WriteUInt(ClientTime); }