public bool TryLogin(TcpClient client, out ClientHandle handle)
        {
            IPrimitiveConnection?primConn = null;
            IMessageConnection?  msgConn  = null;

            try
            {
                primConn = new TcpPrimitiveConnection(client);
                // TODO(@MattWindsor91): handshake etc.
                msgConn = new MessageConnection(primConn, _decoderFunc);
                handle  = new ClientHandle(msgConn);

                // Prevent disposals in finally block below.
                primConn = null;
                msgConn  = null;
                return(true);
            }
            finally
            {
                msgConn?.Dispose();
                primConn?.Dispose();
                client?.Close();
            }
        }