Exemplo n.º 1
0
        public void CanRead_NonEmptyBufferAndNoReadingDone_ReturnsTrue()
        {
            byte[] buffer = { 0 };

            var target = new PacketReader(buffer);

            var actual = target.CanRead();

            Assert.IsTrue(actual);
        }
Exemplo n.º 2
0
        public void CanRead_NonEmptyBufferAndReadingPerformed_ReturnsFalse()
        {
            byte[] buffer = { 0 };

            var target = new PacketReader(buffer);

            target.ReadByte();

            var actual = target.CanRead();

            Assert.IsFalse(actual);
        }
Exemplo n.º 3
0
        public void CopyBytes_array_int_NonEmptyBuffer_CanReadReturnsFalse()
        {
            // Arrange
            byte[] buffer = { 1, 2, 3, 4, 5 };

            var target = new PacketReader(buffer);

            // Act
            var destination = new byte[buffer.Length];

            target.CopyBytes(destination, 0);

            // Assert
            var actual = target.CanRead();

            Assert.IsFalse(actual);
        }
Exemplo n.º 4
0
        private async Task <ICollection <Zone> > HandleZoneListRequest()
        {
            var zones   = new List <Zone>();
            var builder = new PacketBuilder();

            builder.AddInt16(0x0005);
            builder.AddBytes(new byte[26]);

            var buffer = builder.GetBytes();

            await this.networkClient.SendAsync(buffer, buffer.Length);

            int chunkBufferLength;
            int chunk;
            int offset = 0;

            byte[]       chunkBuffer = null;
            PacketReader reader;

            do
            {
                buffer = await this.networkClient.ReceiveAsync();

                reader = new PacketReader(buffer);

                reader.ReadInt16();
                reader.ReadInt16();
                chunk = reader.ReadByte();
                reader.ReadBytes(7);
                chunkBufferLength = reader.ReadLittleEndianInt16();
                reader.ReadInt16();

                if (chunkBuffer == null)
                {
                    chunkBuffer = new byte[chunkBufferLength];
                }

                offset += reader.CopyBytes(chunkBuffer, offset);

                builder = new PacketBuilder();
                builder.AddInt16(0x000b);
                builder.AddInt16(0);
                builder.AddByte((byte)chunk);
                builder.AddPadding(3);

                buffer = builder.GetBytes();

                await this.networkClient.SendAsync(buffer, buffer.Length);

                chunk++;
            } while (offset < (chunkBufferLength));

            reader = new PacketReader(chunkBuffer);

            // Discard the 0x01 at the beginning
            reader.ReadByte();

            while (reader.CanRead())
            {
                var zone = new Zone();

                zone.ServerAddress = reader.ReadIPAddress();
                zone.ServerPort    = reader.ReadUInt16();
                reader.ReadBytes(6);
                zone.Name = reader.ReadString(32);
                reader.ReadInt16();
                zone.IsAdvanced = reader.ReadBoolean();
                reader.ReadBytes(29);
                zone.Description = reader.ReadString();

                zones.Add(zone);
            }

            return(zones);
        }