public async Task ClientLoopAsync(TcpSocketClient <R, S> client, CancellationToken cancellationToken) { IClient socket = null; try { socket = client.GetSocket(); logger.Information($"Started handling messages for {socket.Endpoint}"); (bool result, R message) = await client.ReceiveAsync(cancellationToken); while (!cancellationToken.IsCancellationRequested && result) { await OnMessageAsync(client, message, cancellationToken); (result, message) = await client.ReceiveAsync(cancellationToken); } } catch (IOException) { logger.Warning("Connection stream closed"); } catch (Exception e) { logger.Error($"Error reading message: {e}"); await OnExceptionAsync(client, e, cancellationToken); } finally { logger.Information($"Finished handling messages for {socket.Endpoint}"); } }
public async void ReceiveAsync_Test() { // Arrange var stream = new MemoryStream(100); tcpClientMock.Setup(s => s.Connected).Returns(true); tcpClientMock.Setup(s => s.GetStream).Returns(stream); var socketClient = new TcpSocketClient <Message, Message>(tcpClient, logger); string host = ""; int port = 0; var token = CancellationToken.None; await socketClient.ConnectAsync(host, port, token); var sentMessage = new Message(MessageID.Unknown, 1, new EmptyAnswerPayload()); await socketClient.SendAsync(sentMessage, token); stream.Seek(0, SeekOrigin.Begin); // Act (bool wasReceived, Message message) = await socketClient.ReceiveAsync(token); // Assert Assert.True(wasReceived, "Should receive message"); Assert.True(message.AreAllPropertiesTheSame(sentMessage), "Received message should be the same as sent"); }