//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //============================================================================= #include "stdafx.h" #include "gcsdk/enumutils.h" #include "gcsdk/gcbase.h" #include "gcsdk/http.h" #include "gcsdk/job.h" #include "steam/isteamuserstats.h" #include "gcleaderboardapi.h" // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" using namespace GCSDK; // @note Tom Bui: copied from steam ENUMSTRINGS_START( ELeaderboardSortMethod ) { k_ELeaderboardSortMethodNone, "" }, { k_ELeaderboardSortMethodAscending, "Ascending" }, { k_ELeaderboardSortMethodDescending, "Descending" }, ENUMSTRINGS_REVERSE( ELeaderboardSortMethod, k_ELeaderboardSortMethodNone ) ENUMSTRINGS_START( ELeaderboardDisplayType ) { k_ELeaderboardDisplayTypeNone, "" }, { k_ELeaderboardDisplayTypeNumeric, "Numeric" }, { k_ELeaderboardDisplayTypeTimeSeconds, "Seconds" }, { k_ELeaderboardDisplayTypeTimeMilliSeconds, "MilliSeconds" }, ENUMSTRINGS_REVERSE( ELeaderboardDisplayType, k_ELeaderboardDisplayTypeNone ) ENUMSTRINGS_START( ELeaderboardUploadScoreMethod ) { k_ELeaderboardUploadScoreMethodNone, "" }, { k_ELeaderboardUploadScoreMethodKeepBest, "KeepBest" }, { k_ELeaderboardUploadScoreMethodForceUpdate, "ForceUpdate" }, ENUMSTRINGS_REVERSE( ELeaderboardUploadScoreMethod, k_ELeaderboardUploadScoreMethodNone ) namespace GCSDK { uint32 Leaderboard_YieldingFind( const char *pName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType, bool bCreateIfNotFound ) { CSteamAPIRequest apiRequest( k_EHTTPMethodPOST, "ISteamLeaderboards", "FindOrCreateLeaderboard", 1 ); apiRequest.SetPOSTParamUInt32( "appid", GGCBase()->GetAppID() ); apiRequest.SetPOSTParamString( "name", pName ); apiRequest.SetPOSTParamString( "sortmethod", PchNameFromELeaderboardSortMethod( eLeaderboardSortMethod ) ); apiRequest.SetPOSTParamString( "displaytype", PchNameFromELeaderboardDisplayType( eLeaderboardDisplayType ) ); apiRequest.SetPOSTParamBool( "createifnotfound", bCreateIfNotFound ); KeyValuesAD kvAPIResponse( "response" ); const EResult eCallResult = GGCBase()->YieldingSendHTTPRequestKV( &apiRequest, kvAPIResponse ); const EResult eAPIResult = eCallResult == k_EResultOK ? static_cast( kvAPIResponse->GetInt( "result", k_EResultFail ) ) : k_EResultFail; if ( eAPIResult == k_EResultOK ) { KeyValues *pKVEntry = kvAPIResponse->FindKey( pName ); if ( pKVEntry ) { return pKVEntry->GetInt( "leaderBoardID", kInvalidLeaderboardID ); } } return kInvalidLeaderboardID; } bool Leaderboard_YieldingSetScore( uint32 unLeaderboardID, const CSteamID &steamID, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int score ) { Assert( unLeaderboardID != kInvalidLeaderboardID ); if ( unLeaderboardID == kInvalidLeaderboardID ) return false; CSteamAPIRequest apiRequest( k_EHTTPMethodPOST, "ISteamLeaderboards", "SetLeaderboardScore", 1 ); apiRequest.SetPOSTParamUInt32( "appid", GGCBase()->GetAppID() ); apiRequest.SetPOSTParamUInt32( "leaderboardid", unLeaderboardID ); apiRequest.SetPOSTParamUInt64( "steamid", steamID.ConvertToUint64() ); apiRequest.SetPOSTParamInt32( "score", score ); apiRequest.SetPOSTParamString( "scoremethod", PchNameFromELeaderboardUploadScoreMethod( eLeaderboardUploadScoreMethod ) ); KeyValuesAD kvAPIResponse( "response" ); const EResult eCallResult = GGCBase()->YieldingSendHTTPRequestKV( &apiRequest, kvAPIResponse ); const EResult eAPIResult = eCallResult == k_EResultOK ? static_cast( kvAPIResponse->GetInt( "result", k_EResultFail ) ) : k_EResultFail; if ( eAPIResult == k_EResultOK ) return true; EmitError( SPEW_GC, __FUNCTION__ ": error code %u/%u setting leaderboard %u to %i (%s) for user '%s'.\n", eCallResult, eAPIResult, unLeaderboardID, score, PchNameFromELeaderboardUploadScoreMethod( eLeaderboardUploadScoreMethod ), steamID.Render() ); return false; } }; // namespace GCSDK