/** Triggers an asynchronous request to get the achievements for this user * from the server. The state of this profile is changed to be fetching, * and will be reset to ready when the server request returns. */ void OnlineProfile::fetchAchievements() { assert(PlayerManager::isCurrentLoggedIn()); if (m_has_fetched_achievements || m_is_current_user) return; m_state = State(m_state | S_FETCHING_ACHIEVEMENTS); // ------------------------------------------------------------------------ /** A simple class that receives the achievements, and calls the right * Profile instance to store them. */ class AchievementsRequest : public XMLRequest { public: AchievementsRequest() : XMLRequest(true, true) {} virtual void callback() { uint32_t user_id = 0; getXMLData()->get("visitingid", &user_id); OnlineProfile *profile = ProfileManager::get()->getProfileByID(user_id); if (profile) profile->storeAchievements(getXMLData()); } // AchievementsRequest::callback }; // class AchievementsRequest // ------------------------------------------------------------------------ AchievementsRequest * request = new AchievementsRequest(); PlayerManager::setUserDetails(request, "get-achievements"); request->addParameter("visitingid", m_id); RequestManager::get()->addRequest(request); } // fetchAchievements
void Profile::requestAchievements() { assert(CurrentUser::get()->isRegisteredUser() && !m_is_current_user); AchievementsRequest * request = new AchievementsRequest(); request->setServerURL("client-user.php"); request->addParameter("action","get-achievements"); request->addParameter("token", CurrentUser::get()->getToken()); request->addParameter("userid", CurrentUser::get()->getID()); request->addParameter("visitingid", m_id); RequestManager::get()->addRequest(request); }