void ScoreLoopThread::RequestUserCompletionCallback(void *userData, SC_Error_t completionStatus) { /* Get the application from userData argument */ AppData_t *app = (AppData_t *) userData; /* Check completion status */ if (completionStatus != SC_OK) { SC_UserController_Release(app->userController); /* Cleanup Controller */ HandleError(app, completionStatus); return; } qDebug() << "Done requesting User"; /* Get the session from the client. */ SC_Session_h session = SC_Client_GetSession(app->client); /* Get the session user from the session. */ SC_User_h user = SC_Session_GetUser(session); /* Write out some user data */ SC_String_h login = SC_User_GetLogin(user); qDebug() << " User's login:"******"<unknown>"); SC_String_h email = SC_User_GetEmail(user); qDebug() << " User's email: " << (email ? SC_String_GetData(email) : "<unknown>"); /* We don't need the UserController anymore, so release it */ SC_UserController_Release(app->userController); /* send this to the app so we can save it for future requests */ emit(instance()->ScoreLoopUserReady(app)); /* normal signal for emitting the username */ emit(instance()->RequestUserCompleted(login ? SC_String_GetData(login) : "<unknown>")); }
void OnlineService::connect() { //printf("onlineservice connect\n"); fflush(stdout); assert(has_user_controller == false); assert(state == DISCONNECTED); SC_Error_t createUserControllerResult = SC_Client_CreateUserController(scoreloop_client, &scoreloop_user_controller, RequestUserControllerCompleted, 0); if (createUserControllerResult != SC_OK) { //printf("SC_Client_CreateUserController failed with code %i\n", createUserControllerResult); fflush(stdout); return; // handle error } has_user_controller = true; SC_Error_t loadUserResult = SC_UserController_LoadUser(scoreloop_user_controller); if (loadUserResult == SC_OK) { state = LOAD_USER; } else { //printf("SC_UserController_LoadUser failed with code %i\n", loadUserResult); fflush(stdout); SC_UserController_Release(scoreloop_user_controller); state = DISCONNECTED; return; // handle error } printf("online connect done\n"); fflush(stdout); }
void OnlineService::disconnect() { if (has_user_controller) SC_UserController_Release(scoreloop_user_controller); has_user_controller = false; state = DISCONNECTED; }
void OnlineService::userContextLoaded(SC_Error_t status) { //printf("online userContextLoaded\n"); fflush(stdout); assert(state == LOAD_USER_CONTEXT); if (status != SC_OK) { if (has_user_controller) { SC_UserController_Release(scoreloop_user_controller); has_user_controller = false; } state = DISCONNECTED; printf("SC_UserController_LoadUserContext failed with code %i\n", status); fflush(stdout); return; // handle error } SC_Session_h session = SC_Client_GetSession(scoreloop_client); scoreloop_user = SC_Session_GetUser(session); has_user = true; SC_Context_h user_context = SC_User_GetContext(scoreloop_user); for (int i = 0; i < 5; i++) { const size_t keysize = 255; char key[keysize]; snprintf(key, keysize, "save000%i.spe", i + 1); downloadSaveGame(key); } // fetch & decode autosave & resume file state = CONNECTED; }
CScores::~CScores() { UnLoad(); if (m_scoresController) SC_ScoresController_Release(m_scoresController); if (m_scoreController) SC_ScoreController_Release(m_scoreController); if (m_rankingController) SC_RankingController_Release(m_rankingController); if (m_userController) SC_UserController_Release(m_userController); }
OnlineService::~OnlineService() { SC_Client_Release(scoreloop_client); SCUI_Client_Release(scoreloop_ui_client); if (has_user_controller) SC_UserController_Release(scoreloop_user_controller); has_user_controller = false; if (has_user) SC_User_Release(scoreloop_user); has_user = false; }
void OnlineService::userLoaded(SC_Error_t status) { //printf("online userLoaded\n"); fflush(stdout); assert(state == LOAD_USER); if (status != SC_OK) { if (has_user_controller) { SC_UserController_Release(scoreloop_user_controller); has_user_controller = false; } state = DISCONNECTED; //printf("SC_UserController_LoadUser failed with code %i\n", status); fflush(stdout); return; // handle error } assert(has_user_controller); SC_Error_t loadUserContextResult = SC_UserController_LoadUserContext(scoreloop_user_controller); if (loadUserContextResult == SC_OK) { state = LOAD_USER_CONTEXT; } else { // handle if (has_user_controller) { SC_UserController_Release(scoreloop_user_controller); has_user_controller = false; } state = DISCONNECTED; //printf("SC_UserController_LoadUserContext failed with code %i\n", loadUserContextResult); fflush(stdout); return; } }
void ScoreLoopThread::RequestUser(AppData_t *app) { /* Create a UserController */ SC_Error_t rc = SC_Client_CreateUserController(app->client, &app->userController, RequestUserCompletionCallback, app); if (rc != SC_OK) { HandleError(app, rc); return; } /* Make the asynchronous request */ rc = SC_UserController_LoadUser(app->userController); if (rc != SC_OK) { SC_UserController_Release(app->userController); HandleError(app, rc); return; } qDebug() << "Requesting User..."; }