Example #1
0
        public static Response Exec(this ClacksClient c, string command, Action <Request> callback = null)
        {
            var request = Request.Create(command);

            if (callback != null)
            {
                callback(request);
            }
            return(c.Exec(request));
        }
        public void Creating_client_does_not_get_socket_from_pool() {

            // Arrange
            var pool = new ConnectionPool(_factory.Create);

            // Act
            var client = new ClacksClient(pool);

            // Assert
            Assert.AreEqual(0, _factory.Sockets.Count);
        }
        public void Disposing_client_returns_socket_to_pool() {

            // Arrange
            var pool = new ConnectionPool(_factory.Create);

            // Act
            var client = new ClacksClient(pool);
            client.Dispose();
            var s = pool.GetSocket();

            // Assert
            Assert.AreEqual(1, _factory.Sockets.Count);
        }
        public void Making_client_request_gets_socket_from_pool() {

            // Arrange
            var pool = new ConnectionPool(_factory.Create);
            var socket = new FakeSocket {
                ReceiveCallback = (buffer, size, offset) => {
                    var bytes = Encoding.ASCII.GetBytes("OK\r\n");
                    Array.Copy(bytes, buffer, bytes.Length);
                    return bytes.Length;
                }
            };
            _factory.Builder = () => socket;

            // Act
            var client = new ClacksClient(pool);
            client.Exec(Request.Create("HI"));

            // Assert
            Assert.AreEqual(1, _factory.Sockets.Count);
        }
Example #5
0
 public Client()
 {
     _client = new ClacksClient("127.0.0.1", 12345);
 }
        public void Reconnecting_client_retries_request_on_failure() {

            // Arrange
            var pool = new ConnectionPool(_factory.Create);
            var failSocket = new FakeSocket();
            failSocket.ReceiveCallback = (buffer, size, offset) => {
                failSocket.Connected = false;
                throw new SocketException(42);
            };
            var successSocket = new FakeSocket {
                ReceiveCallback = (buffer, size, offset) => {
                    var bytes = Encoding.ASCII.GetBytes("OK\r\n");
                    Array.Copy(bytes, buffer, bytes.Length);
                    return bytes.Length;
                }
            };
            _factory.Builder = () => _factory.Sockets.Any() ? successSocket : failSocket;

            // Act
            var client = new ClacksClient(pool);
            var response = client.Exec(Request.Create("HI"));

            // Assert
            Assert.AreEqual(2, _factory.Sockets.Count);
            Assert.AreEqual(1, failSocket.ReceiveCalled);
            Assert.AreEqual(1, successSocket.ReceiveCalled);
            Assert.AreEqual("OK", response.Status);
        }
        public void Client_recovers_if_connection_is_closed_by_remote_host() {

            // Arrange
            var pool = new ConnectionPool(_factory.Create);
            var failSocket = new FakeSocket();
            failSocket.ReceiveCallback = (buffer, size, offset) => {

                // This happens when the other side hangs up the phone while we are still reading data
                failSocket.Connected = true;
                throw new SocketException((int)SocketError.ConnectionReset);
            };
            var successSocket = new FakeSocket {
                ReceiveCallback = (buffer, size, offset) => {
                    var bytes = Encoding.ASCII.GetBytes("OK\r\n");
                    Array.Copy(bytes, buffer, bytes.Length);
                    return bytes.Length;
                }
            };
            _factory.Builder = () => _factory.Sockets.Any() ? successSocket : failSocket;

            // Act
            var client = new ClacksClient(pool);
            var response = client.Exec(Request.Create("HI"));

            // Assert
            Assert.AreEqual(2, _factory.Sockets.Count);
            Assert.AreEqual(1, failSocket.ReceiveCalled);
            Assert.AreEqual(1, successSocket.ReceiveCalled);
            Assert.AreEqual("OK", response.Status);
        }
        public void Non_reconnecting_client_only_issues_request_once_if_not_failing() {

            // Arrange
            var pool = new ConnectionPool(_factory.Create);
            var successSocket = new FakeSocket {
                ReceiveCallback = (buffer, size, offset) => {
                    var bytes = Encoding.ASCII.GetBytes("OK\r\n");
                    Array.Copy(bytes, buffer, bytes.Length);
                    return bytes.Length;
                }
            };
            _factory.Builder = () => successSocket;

            // Act
            var client = new ClacksClient(pool, attemptReconnect: false);
            var response = client.Exec(Request.Create("HI"));

            // Assert
            Assert.AreEqual(1, _factory.Sockets.Count);
            Assert.AreEqual(1, successSocket.ReceiveCalled);
            Assert.AreEqual("OK", response.Status);
        }
        public void Non_reconnecting_client_does_not_retry_failed_request() {

            // Arrange
            var pool = new ConnectionPool(_factory.Create);
            var failSocket = new FakeSocket();
            failSocket.ReceiveCallback = (buffer, size, offset) => {
                failSocket.Connected = false;
                throw new SocketException(42);
            };
            var successSocket = new FakeSocket {
                ReceiveCallback = (buffer, size, offset) => {
                    var bytes = Encoding.ASCII.GetBytes("OK\r\n");
                    Array.Copy(bytes, buffer, bytes.Length);
                    return bytes.Length;
                }
            };
            _factory.Builder = () => _factory.Sockets.Any() ? successSocket : failSocket;

            // Act
            var client = new ClacksClient(pool, attemptReconnect: false);
            try {
                client.Exec(Request.Create("HI"));
                Assert.Fail("call should not have succeeded");
            } catch { }

            // Assert
            Assert.AreEqual(1, _factory.Sockets.Count);
            Assert.AreEqual(1, failSocket.ReceiveCalled);
            Assert.AreEqual(0, successSocket.ReceiveCalled);
        }
Example #10
0
 public RemotePlayer(string name, IPEndPoint addr)
 {
     _client = new ClacksClient(addr);
     _name   = Encoding.ASCII.GetString(_client.Exec("JOIN", r => r.WithData(name).ExpectData("OK")).Data);
 }