/// <summary>
        /// Reads a packet from the given <see cref="INetworkMessage"/>.
        /// </summary>
        /// <param name="message">The message to read from.</param>
        /// <returns>The packet read from the message.</returns>
        public override IIncomingPacket ReadFromMessage(INetworkMessage message)
        {
            message.ThrowIfNull(nameof(message));

            // OS and Version were included plainly in this version
            var operatingSystem = message.GetUInt16();
            var version         = message.GetUInt16();

            // Skip dat, spr, and pic signatures (4 bytes each)?
            message.SkipBytes(12);

            var targetSpan     = message.Buffer[message.Cursor..message.Length];
Ejemplo n.º 2
0
        public void NetworkMessage_SkipBytesTest()
        {
            const int SkipCount                 = 10;
            const int NegativeSkipCount         = -1;
            const int OutOfRangeSkipCountSize   = NetworkMessage.BufferSize + 1;
            const int ExpectedCursorOnTestSetup = 0;
            const int ExpectedLengthOnTestSetup = DefaultTestBufferIncomingMessageLength;
            const int ExpectedCursorAfterSkip   = SkipCount;
            const int ExpectedLengthAfterSkip   = ExpectedLengthOnTestSetup;

            byte[] expectedBytesRead = DefaultTestBufferAsBytes.Skip(SkipCount).ToArray();

            // Do reset the cursor, since we're in "reading" mode.
            INetworkMessage testMessage1 = this.SetupInboundMessage(resetCursor: true);

            Assert.IsNotNull(testMessage1);
            Assert.AreEqual(ExpectedCursorOnTestSetup, testMessage1.Cursor);
            Assert.AreEqual(ExpectedLengthOnTestSetup, testMessage1.Length);

            ExceptionAssert.Throws <ArgumentException>(() => testMessage1.SkipBytes(NegativeSkipCount), "The count must not be negative.");
            ExceptionAssert.Throws <IndexOutOfRangeException>(() => testMessage1.SkipBytes(OutOfRangeSkipCountSize), "SkipBytes out of range.");

            testMessage1.SkipBytes(0);

            // These should not change on skip 0.
            Assert.AreEqual(ExpectedCursorOnTestSetup, testMessage1.Cursor);
            Assert.AreEqual(ExpectedLengthOnTestSetup, testMessage1.Length);

            testMessage1.SkipBytes(SkipCount);

            // Now they should have changed.
            Assert.AreEqual(ExpectedCursorAfterSkip, testMessage1.Cursor);
            Assert.AreEqual(ExpectedLengthAfterSkip, testMessage1.Length);

            var bytesInfoRead = testMessage1.ReadAsBytesInfo();

            Assert.IsNotNull(bytesInfoRead?.Bytes);
            CollectionAssert.AreEqual(expectedBytesRead, bytesInfoRead.Bytes);
        }