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}");
            }
        }
示例#2
0
        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");
        }