pass clients into scope alone with session for callbacks, and provide key during removeListener callback
refactor and rewrite the connection process, using the clientManager.create function, updated tests