示例#1
0
        public async Task <Response> SendAsync(Request request, ServerConfig server)
        {
            Socket   socket   = null;
            Response response = null;
            await Policy.ExecuteAsync(async() =>
            {
                try
                {
                    Trace.WriteLine("Connecting to the server socket");
                    socket = new Socket(SocketType.Stream, ProtocolType.IP);
                    await socket.ConnectAsync(server.EndPoint).ConfigureAwait(false);

                    Trace.WriteLine("Sending request");
                    await SendAsync(request, socket).ConfigureAwait(false);

                    Trace.WriteLine("Waiting for response");
                    response = await ReceiveAndDeserializeAsync(socket).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    throw new KronosCommunicationException($"Connection to the {server.EndPoint} has been refused", ex);
                }
                finally
                {
                    if (!_stream.IsClean)
                    {
                        _stream.Clean();
                    }

                    socket?.Dispose();
                }
            }).ConfigureAwait(false);

            return(response);
        }
示例#2
0
        public void IsClean_IsTrue_WhenDataIsWrittenAndStreamIsClean()
        {
            // Arrange
            var stream = new BufferedStream();

            byte[] data = new byte[1024];
            stream.Write(data, 0, data.Length);
            stream.Clean();

            // Act
            bool isClean = stream.IsClean;

            // Assert
            Assert.True(isClean);
        }
示例#3
0
        public void Clean_ResetsPositions()
        {
            // Arrange
            var stream   = new BufferedStream();
            int length   = (int)stream.Length;
            int position = (int)stream.Position;

            byte[] data = new byte[1024];
            stream.Write(data, 0, data.Length);

            // Act
            stream.Clean();

            // Assert
            Assert.Equal(stream.Position, position);
            Assert.Equal(stream.Length, length);
        }