def login(connection)
mechanism = user.mechanism || :scram
conversation = Conversation.new(user, mechanism)
reply = connection.dispatch([ conversation.start(connection) ])
connection.update_cluster_time(Operation::Result.new(reply))
reply = connection.dispatch([ conversation.continue(reply, connection) ])
connection.update_cluster_time(Operation::Result.new(reply))
until reply.documents[0][Conversation::DONE]
reply = connection.dispatch([ conversation.finalize(reply, connection) ])
connection.update_cluster_time(Operation::Result.new(reply))
end
reply
end