void server::join(const session_ptr& _user, user_id_type& uid) { if (closing) return; std::lock_guard<std::mutex> lock(session_mutex); user_id_type newID = nextID; nextID++; sessions.emplace(newID, _user); uid = newID; misc_iosrv.post([this, newID, _user]() { try { on_join(newID, _user->get_key()); } catch (std::exception &ex) { on_exception(ex); } catch (...) {} }); }