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); }
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); }