Beispiel #1
0
        public void HandleRelayServerPacket(ref StackDataReader p)
        {
            long   ip   = p.ReadUInt32LE(); // use LittleEndian here
            ushort port = p.ReadUInt16BE();
            uint   seed = p.ReadUInt32BE();

            NetClient.LoginSocket.Disconnect();
            EncryptionHelper.Initialize(false, seed, (ENCRYPTION_TYPE)Settings.GlobalSettings.Encryption);

            NetClient.Socket.Connect(new IPAddress(ip), port)
            .ContinueWith
            (
                t =>
            {
                if (!t.IsFaulted)
                {
                    NetClient.Socket.EnableCompression();

                    unsafe
                    {
                        Span <byte> b = stackalloc byte[4] {
                            (byte)(seed >> 24), (byte)(seed >> 16), (byte)(seed >> 8), (byte)seed
                        };
                        StackDataWriter writer = new StackDataWriter(b);
                        NetClient.Socket.Send(writer.AllocatedBuffer, writer.BytesWritten, true, true);
                        writer.Dispose();
                    }

                    NetClient.Socket.Send_SecondLogin(Account, Password, seed);
                }
            },
                TaskContinuationOptions.ExecuteSynchronously
            );
        }
        public void Write_BigEndian_String_No_Fixed_Size()
        {
            StackDataWriter writer = new StackDataWriter(32);

            string str = new string('a', 128);

            if (BitConverter.IsLittleEndian)
            {
                writer.WriteUnicodeLE(str);
            }
            else
            {
                writer.WriteUnicodeBE(str);
            }

            Span <char> span = stackalloc char[str.Length + 1]; // '\0'

            str.AsSpan().CopyTo(span);

            Assert.True(MemoryMarshal.AsBytes(span).SequenceEqual(writer.Buffer.Slice(0, writer.BytesWritten)));

            writer.Dispose();
        }
        public void Write_BigEndian_String_Less_Fixed_Size_Than_RealString()
        {
            StackDataWriter writer = new StackDataWriter(32);

            string str  = new string('a', 255);
            int    size = 239;

            if (BitConverter.IsLittleEndian)
            {
                writer.WriteUnicodeLE(str, size);
            }
            else
            {
                writer.WriteUnicodeBE(str, size);
            }

            Span <char> span = stackalloc char[size];

            str.AsSpan(0, size).CopyTo(span);

            Assert.True(MemoryMarshal.AsBytes(span).SequenceEqual(writer.Buffer.Slice(0, writer.BytesWritten)));

            writer.Dispose();
        }