Example #1
0
        public void TestReliableChannelDoesNotDiscardsOldMessages()
        {
            // Create 3 packets, add them in the order 1, 3, 2.
            // 2 should be discarded
            var channel = new ReliableChannel();

            channel.QueueIncomingPacket(EndPoint, new Packet(PacketType.Connect, Channel.Reliable, 1, new byte[0]));
            channel.QueueIncomingPacket(EndPoint, new Packet(PacketType.Connect, Channel.Reliable, 3, new byte[10] {
                1, 2, 3, 4, 5, 6, 7, 8, 9, 0
            }));
            channel.QueueIncomingPacket(EndPoint, new Packet(PacketType.Connect, Channel.Reliable, 2, new byte[0]));

            UnreliableChannel.PendingPacket packet;
            Assert.IsTrue(channel.TryGetNextIncomingPacket(out packet));
            Assert.IsNotNull(packet);
            Assert.AreEqual(1, packet.Sequence);

            Assert.IsTrue(channel.TryGetNextIncomingPacket(out packet));
            Assert.IsNotNull(packet);
            Assert.AreEqual(3, packet.Sequence);
            Assert.AreEqual(new byte[10] {
                1, 2, 3, 4, 5, 6, 7, 8, 9, 0
            }, packet.Data);

            Assert.IsFalse(channel.TryGetNextIncomingPacket(out packet));
            Assert.IsNull(packet);
        }
Example #2
0
        public void TestReliableChannelResends()
        {
            var channel = new ReliableChannel();

            channel.QueueOutgoingPacket(EndPoint, new Packet(PacketType.Connect, Channel.Reliable, 1, new byte[0]));

            UnreliableChannel.PendingPacket[] packets = channel.GetPendingOutgoingPackets().ToArray();
            Assert.IsNotEmpty(packets);
            Assert.AreEqual(1, packets[0].Sequence);

            channel.QueueIncomingPacket(EndPoint, new Packet(PacketType.Ack, Channel.Reliable, (ushort)packets[0].Sequence, new byte[0]));
            packets = channel.GetPendingIncomingPackets().ToArray();
            Assert.IsEmpty(packets);

            channel.QueueOutgoingPacket(EndPoint, new Packet(PacketType.Connect, Channel.Reliable, 2, new byte[0]));
            packets = channel.GetPendingOutgoingPackets().ToArray();
            Assert.IsNotEmpty(packets);
            Assert.AreEqual(2, packets[0].Sequence);

            Thread.Sleep(600);

            packets = channel.GetPendingOutgoingPackets().ToArray();
            Assert.IsNotEmpty(packets);
            Assert.AreEqual(2, packets[0].Sequence);

            Thread.Sleep(600);

            packets = channel.GetPendingOutgoingPackets().ToArray();
            Assert.IsNotEmpty(packets);
            Assert.AreEqual(2, packets[0].Sequence);

            channel.QueueIncomingPacket(EndPoint, new Packet(PacketType.Ack, Channel.Reliable, (ushort)packets[0].Sequence, new byte[0]));
            packets = channel.GetPendingIncomingPackets().ToArray();
            Assert.IsEmpty(packets);

            packets = channel.GetPendingOutgoingPackets().ToArray();
            Assert.IsEmpty(packets);
        }