void ScoreLoopThread::SubmitScore(AppData_t *app, double result, unsigned int mode) { qDebug() << "Submitting score " << result; /* Create a ScoreController */ SC_Error_t rc = SC_Client_CreateScoreController(app->client, &app->scoreController, SubmitScoreCompletionCallback, app); if (rc != SC_OK) { HandleError(app, rc); return; } /* Create and configure the score */ rc = SC_Client_CreateScore(app->client, &app->score); if (rc != SC_OK) { SC_ScoreController_Release(app->scoreController); /* Cleanup Controller */ HandleError(app, rc); return; } SC_Score_SetLevel(app->score, result); SC_Score_SetResult(app->score, result * 100); SC_Score_SetMode(app->score, mode); /* Submit the score */ rc = SC_ScoreController_SubmitScore(app->scoreController, app->score); if (rc != SC_OK) { SC_ScoreController_Release(app->scoreController); /* Cleanup Controller */ SC_Score_Release(app->score); /* Cleanup Score */ HandleError(app, rc); return; } qDebug() << "Submitting Score..."; }
void CScores::DoSubmitScore() { unsigned int aMode = 1; unsigned int aLevel = 1; double aScore = (double)g_localhighscore; double aMinorResult = (double)s3eDeviceGetInt(S3E_DEVICE_OS); // Save OS type as Minor Result /* Create the score and set score data */ SC_Score_h score; SC_Error_t retCode = SC_Score_New(&score); if (retCode == SC_OK) { SC_Score_SetResult(score, aScore); SC_Score_SetMode(score, aMode); SC_Score_SetLevel(score, aLevel); SC_Score_SetMinorResult(score, aMinorResult); retCode = SC_ScoreController_SubmitScore(m_scoreController, score); // See OnRequestSuccessSubmit() } /* SC_ScoreController_SubmitScore takes the ownership, we can safely release it */ SC_Score_Release(score); if (retCode != SC_OK) { OnRequestFailed(retCode); } }
void ScoreLoopThread::SubmitChallenge(AppData_t *app, SC_Challenge_h challenge, double result, unsigned int mode) { SC_Error_t rc; SC_Score_h score; /* Create a ChallengeController */ rc = SC_Client_CreateChallengeController(app->client, &app->challengeController, SubmitChallengeCompletionCallback, app); if (rc != SC_OK) { HandleError(app, rc); return; } /* Set challenge to be accepted */ rc = SC_ChallengeController_SetChallenge(app->challengeController, challenge); if (rc != SC_OK) { SC_ChallengeController_Release(app->challengeController); /* Cleanup Controller */ HandleError(app, rc); return; } /* Create a Score object with given result and mode */ rc = SC_Client_CreateScore(app->client, &score); if (rc != SC_OK) { SC_ChallengeController_Release(app->challengeController); /* Cleanup Controller */ HandleError(app, rc); return; } rc = SC_Score_SetResult(score, result); if (rc != SC_OK) { SC_ChallengeController_Release(app->challengeController); /* Cleanup Controller */ SC_Score_Release(score); /* Cleanup Score */ HandleError(app, rc); return; } rc = SC_Score_SetMode(score, mode); if (rc != SC_OK) { SC_ChallengeController_Release(app->challengeController); /* Cleanup Controller */ SC_Score_Release(score); /* Cleanup Score */ HandleError(app, rc); return; } /* Submit Challenge for score */ rc = SC_ChallengeController_SubmitChallengeScore(app->challengeController, score); SC_Score_Release(score); /* Not needed anymore, so cleanup */ if (rc != SC_OK) { SC_ChallengeController_Release(app->challengeController); /* Cleanup Controller */ HandleError(app, rc); return; } qDebug() << "Submitting Challenge..."; }
void ScoreLoopThread::SubmitScoreCompletionCallback(void *userData, SC_Error_t completionStatus) { /* Get the application from userData argument */ AppData_t *app = (AppData_t *) userData; SC_Error_t rc ; /* Check completion status */ if (completionStatus != SC_OK) { SC_ScoreController_Release(app->scoreController); /* Cleanup Controller */ SC_Score_Release(app->score); /* Cleanup Score */ HandleError(app, completionStatus); return; } qDebug() << "Done submitting Score"; /* Cleanup Controller */ SC_ScoreController_Release(app->scoreController); SC_Score_h lastScore; rc = SC_Client_CreateScore(app->client, &lastScore); if (rc != SC_OK) { HandleError(app, rc); return; } SC_Score_SetLevel(lastScore, SC_Score_GetLevel(app->score)); SC_Score_SetResult(lastScore, SC_Score_GetResult(app->score)); SC_Score_SetMode(lastScore, SC_Score_GetMode(app->score)); ScoreData_t scoreData; scoreData.score = lastScore; emit(instance()->SubmitScoreCompleted(&scoreData)); /* Cleanup Score */ SC_Score_Release(app->score); }