The code seems simple to me but the logic is indeed complex. Care to point to specific issues with this class ?
I'll gladly update it. I believe the complexity comes from the fact that it is firing only when needed instead of following a setInterval() approach.

Also, the point of this refactor is mainly to:
- remove the remoteManager vs localManager since there is no need to keep 2 lists of connected users/clients. Only one is needed.
- remove stuff like ```self.parent.localClients``` which is a circular reference [eg.](https://github.com/zendesk/radar/blob/master/core/lib/resources/presence/disconnect_queue.js#L32) 
- make status events (online/offline, etc.) fire in one clear place based on clear conditions.

I also just realised that I need to change the presence_manager code a bit to delete redis keys when a client expires. To do this, I need to change the timeout class to be more flexible (allow to tie data to a user).