public async Task TestHandlingDuplicatePackets() {
            using (var server = new TestNode()) {
                server.ListenAsync();

                using (var client = new TestNode()) {
                    await client.ConnectAsync();

                    var payload = GenerateRandomBytes(200);

                    var startingSequenceNumber = client.RemoteConnection.SequenceNumber;

                    for (int i = 0; i < 10; i++) {
                        var packet = client.BuildReliableDataPacket(payload, 0, payload.Length, (ushort)(startingSequenceNumber + i));

                        var sendSequenceNumber = (ushort)client.RemoteConnection.IncrementSequenceNumber();

                        // Send duplicates
                        client.SendToSequenced(client.RemoteConnection, sendSequenceNumber, packet, true);
                        client.SendToSequenced(client.RemoteConnection, sendSequenceNumber, packet, true);
                        client.SendToSequenced(client.RemoteConnection, sendSequenceNumber, packet, true);
                    }

                    for (int i = 0; i < 10; i++) {
                        using (var result = await server.ReadMessage()) {
                            Assert.True(result.Payload.SequenceEqual(payload));
                        }
                    }
                }
            }
        }
        private async Task SendPayloads(TestNode server, TestNode client, byte[][] payloads) {
            for (int i = 0; i < payloads.Length; i++) {
                client.SendDataAsync(payloads[i]);
                using (var result = await server.ReadMessage()) {

                    Assert.True(result.Payload.SequenceEqual(payloads[i]));
                }
            }
        }
 private async Task VerifySentPayloads(TestNode server, byte[][] payloads) {
     for (int i = 0; i < payloads.Length; i++) {
         using (var result = await server.ReadMessage()) {
             Assert.True(result.Payload.SequenceEqual(payloads[i]));
         }
     }
 }
        public async Task ManySimpleMessageTestWithoutWaiting(byte[][] payloads, int latency, int dropPercentage) {
            using (var server = new TestNode()) {
                using (var client = new TestNode(new TestSettings(latency, dropPercentage))) {
                    server.ListenAsync();
                    await client.ConnectAsync();

                    for (int n = 0; n < 50; n++) {
                        for (int i = 0; i < payloads.Length; i++) {
                            client.SendDataAsync(payloads[i]);
                        }
                    }

                    for (int n = 0; n < 50; n++) {
                        for (int i = 0; i < payloads.Length; i++) {
                            using (var result = await server.ReadMessage()) {
                                Assert.True(result.Payload.SequenceEqual(payloads[i]));
                            }
                        }
                    }

                    await client.DisconnectAsync();
                }
            }
        }