Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public void Write(ProtocolBufferWriter writer)
        {
            SubtypeCheck();

            writer.WriteUInt(AccountId);
            writer.WriteUInt(OneTimeKey);
            writer.WriteString(Version);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
 public void Write(ProtocolBufferWriter writer)
 {
     writer.WriteUInt(Unknown);
 }
Exemplo n.º 7
0
 public void Write(ProtocolBufferWriter writer)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 8
0
 public void Write(ProtocolBufferWriter writer)
 {
     writer.WriteByte(UnkByte);
     writer.WriteMovementData();
 }
 public void Write(ProtocolBufferWriter writer)
 {
     writer.WriteByte(ChannelId);
     writer.WriteULong(UnkMaybeEntityId);
 }
Exemplo n.º 10
0
 public void Write(ProtocolBufferWriter writer)
 {
     writer.WriteByte(UnkByte);
     writer.WriteMovementData(); // TODO is this required?
 }
Exemplo n.º 11
0
 public void Write(ProtocolBufferWriter writer)
 {
     writer.WriteUInt(ClientTime);
 }