public async Task ProcessServerPackages() { var port = this.GetPortNumber(PacketServerPort); var serializer = new BinarySerializer(BinarySerializationMethod.UnsafeSerialization); using (var packetServer = new PacketServer(IPAddress.Any, port)) { packetServer.Start(); using (var client = new TcpClient("localhost", port)) using (var stream = client.GetStream()) { var packetSequence = PacketFixture.GetPacketSequence(PacketSequenceLength); foreach (var packet in packetSequence) { await packetServer.SendPacket(packet).WithTimeOut(Timeout); var answer = await serializer.Deserialize <Packet>(stream).WithTimeOut(Timeout); Assert.AreEqual <PacketEx>(packet, answer); } } } }
public async Task ProcessDuplexExchange() { var port = this.GetPortNumber(PacketServerPort); var serializer = new BinarySerializer(BinarySerializationMethod.UnsafeSerialization); var queue = new WaitableQueue <Packet>(); using (var packetServer = new PacketServer(IPAddress.Any, port)) { packetServer.OnNewPacketReceived += (sender, value) => queue.Enqueue(value); packetServer.Start(); using (var client = new TcpClient("localhost", port)) using (var stream = client.GetStream()) { var serverSequence = PacketFixture.GetPacketSequence(PacketSequenceLength); var clientSequence = PacketFixture.GetPacketSequence(PacketSequenceLength); foreach (var(serverPacket, clientPacket) in serverSequence.JoinByIndex(clientSequence)) { await Task.WhenAll(packetServer.SendPacket(serverPacket), serializer.Serialize(clientPacket, stream)); var results = await Task.WhenAll(queue.Dequeue(Timeout), serializer.Deserialize <Packet>(stream).WithTimeOut(Timeout)); Assert.AreEqual <PacketEx>(clientPacket, results[0]); Assert.AreEqual <PacketEx>(serverPacket, results[1]); } } } }
public async Task ProcessDuplexExchangeConcurrent() { var port = this.GetPortNumber(PacketServerPort); var serializer = new BinarySerializer(BinarySerializationMethod.UnsafeSerialization); var queue = new WaitableQueue <Packet>(); using (var packetServer = new PacketServer(IPAddress.Any, port)) { packetServer.OnNewPacketReceived += (sender, value) => queue.Enqueue(value); packetServer.Start(); using (var client = new TcpClient("localhost", port)) using (var stream = client.GetStream()) { var serverSequence = PacketFixture.GetPacketSequence(PacketSequenceLength); Task serverTask = null; foreach (var packet in serverSequence) { var task = packetServer.SendPacket(packet); serverTask = serverTask?.ContinueWith(t => task).Unwrap() ?? task; } var clientSequence = PacketFixture.GetPacketSequence(PacketSequenceLength); var clientTask = Task.CompletedTask; foreach (var packet in clientSequence) { // ReSharper disable once AccessToDisposedClosure clientTask = clientTask.ContinueWith(t => serializer.Serialize(packet, stream)).Unwrap(); } await Task.WhenAll(serverTask, clientTask).WithTimeOut(Timeout); foreach (var(serverPacket, clientPacket) in serverSequence.JoinByIndex(clientSequence)) { var results = await Task.WhenAll(queue.Dequeue(Timeout), serializer.Deserialize <Packet>(stream).WithTimeOut(Timeout)); Assert.AreEqual <PacketEx>(clientPacket, results[0]); Assert.AreEqual <PacketEx>(serverPacket, results[1]); } } } }