Exemplo n.º 1
0
            private static void HandleAllMessageInPacket(List <byte[]> messages, AckSystem.ReliableReceived received)
            {
                var array        = received.Buffer.array;
                var packetLength = received.Length;
                var offset       = 0;

                while (offset < packetLength)
                {
                    var length  = ByteUtils.ReadUShort(array, ref offset);
                    var message = new ArraySegment <byte>(array, offset, length);

                    var outBuffer = new byte[length];
                    Buffer.BlockCopy(array, offset, outBuffer, 0, length);
                    offset += length;
                    messages.Add(outBuffer);
                }

                // release buffer after all its message have been handled
                received.Buffer.Release();
            }
Exemplo n.º 2
0
        public void MessageShouldBeInQueueAfterReceive()
        {
            ackSystem.ReceiveReliable(packet1, packet1.Length, true);

            Assert.IsFalse(ackSystem.NextReliablePacket(out AckSystem.ReliableReceived _));

            ackSystem.ReceiveReliable(packet2, packet2.Length, true);

            int bytesIn1 = config.MaxPacketSize - AckSystem.MIN_RELIABLE_FRAGMENT_HEADER_SIZE;
            int bytesIn2 = message.Length - bytesIn1;

            Assert.IsTrue(ackSystem.NextReliablePacket(out AckSystem.ReliableReceived first));

            Assert.IsTrue(first.isFragment);
            Assert.That(first.buffer.array[0], Is.EqualTo(1), "First fragment should have index 1");
            Assert.That(first.length, Is.EqualTo(bytesIn1 + 1));
            AssertAreSameFromOffsets(message, 0, first.buffer.array, 1, bytesIn1);

            AckSystem.ReliableReceived second = ackSystem.GetNextFragment();
            Assert.IsTrue(second.isFragment);
            Assert.That(second.buffer.array[0], Is.EqualTo(0), "Second fragment should have index 0");
            Assert.That(second.length, Is.EqualTo(bytesIn2 + 1));
            AssertAreSameFromOffsets(message, bytesIn1, second.buffer.array, 1, bytesIn2);
        }