join and leave room implementation