From 46239b543bf4d8cc08c3a756c0a82d3e3ad86865 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Wed, 3 Jul 2024 15:05:41 -0400 Subject: [PATCH 01/11] removed cxId param from cancelFindRequest --- include/braincloud/BrainCloudLobby.h | 2 +- src/BrainCloudLobby.cpp | 3 +-- tests/src/TestBCLobby.cpp | 11 +++-------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/include/braincloud/BrainCloudLobby.h b/include/braincloud/BrainCloudLobby.h index 3cfce66e..74ce9171 100644 --- a/include/braincloud/BrainCloudLobby.h +++ b/include/braincloud/BrainCloudLobby.h @@ -274,7 +274,7 @@ namespace BrainCloud /// /// Cancel this members Find, Join and Searching of Lobbies /// - void cancelFindRequest(const std::string& in_lobbyType, const std::string& in_cxId, IServerCallback* in_callback); + void cancelFindRequest(const std::string& in_lobbyType, IServerCallback* in_callback); /* Runs ping callbacks if pingRegions was called. * Note: This is already called by BrainCloudClient::runCallbacks diff --git a/src/BrainCloudLobby.cpp b/src/BrainCloudLobby.cpp index 2b6715bb..e375b355 100644 --- a/src/BrainCloudLobby.cpp +++ b/src/BrainCloudLobby.cpp @@ -532,11 +532,10 @@ namespace BrainCloud /// /// Cancel this members Find, Join and Searching of Lobbies /// - void BrainCloudLobby::cancelFindRequest(const std::string& in_lobbyType, const std::string& in_cxId, IServerCallback* in_callback) + void BrainCloudLobby::cancelFindRequest(const std::string& in_lobbyType, IServerCallback* in_callback) { Json::Value message; message[OperationParam::LobbyType.getValue()] = in_lobbyType; - message[OperationParam::CxId.getValue()] = in_cxId; ServerCall* sc = new ServerCall(ServiceName::Lobby, ServiceOperation::CancelFindRequest, message, in_callback); m_client->sendRequest(sc); diff --git a/tests/src/TestBCLobby.cpp b/tests/src/TestBCLobby.cpp index bf48e92e..fecdca74 100644 --- a/tests/src/TestBCLobby.cpp +++ b/tests/src/TestBCLobby.cpp @@ -301,14 +301,9 @@ TEST_F(TestBCLobby, CancelFindRequest) { TestResult tr; - //m_bc->getLobbyService()->cancelFindRequest("MATCH_UNRANKED", m_bc->getRttConnectionId(), &tr); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////// - //need to come back to this test. When I send a bad cxId, it actually sends the parameter cxId to the server. But when I send a proper - //cxId, it only sends the lobbyType and no cxId parameter, so it always says that the cxId parameter is missing. - ////////////////////////////////////////////////////////////////////////////////////////////////////////////// - m_bc->getLobbyService()->cancelFindRequest("MATCH_UNRANKED", "badcxId", &tr); - //40653 is cxId must belong to caller - tr.runExpectFail(m_bc, HTTP_BAD_REQUEST, 40653); + m_bc->getLobbyService()->cancelFindRequest("MATCH_UNRANKED", &tr); + + tr.run(m_bc); } // We include all tests regarding pings in there From 69caa3d59893da8e8c3e6f41282074e273070b92 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Wed, 31 Jul 2024 09:05:13 -0400 Subject: [PATCH 02/11] added ifExists versions of leaderboard functions --- .../braincloud/BrainCloudSocialLeaderboard.h | 168 +++++++++++++++++- include/braincloud/ServiceOperation.h | 6 + src/BrainCloudSocialLeaderboard.cpp | 94 ++++++++++ src/ServiceOperation.cpp | 6 + tests/src/TestBCSocialLeaderboard.cpp | 140 +++++++++++++++ 5 files changed, 412 insertions(+), 2 deletions(-) diff --git a/include/braincloud/BrainCloudSocialLeaderboard.h b/include/braincloud/BrainCloudSocialLeaderboard.h index 53e05f94..dee745f2 100644 --- a/include/braincloud/BrainCloudSocialLeaderboard.h +++ b/include/braincloud/BrainCloudSocialLeaderboard.h @@ -69,6 +69,32 @@ namespace BrainCloud */ void getSocialLeaderboard(const char * in_leaderboardId, bool in_replaceName, IServerCallback * in_callback = NULL); + /** + * Method returns the social leaderboard. A player's social leaderboard is + * comprised of players who are recognized as being your friend. + * + * This method returns the same data as getSocialLeaderboard, but it will not return an error if the leaderboard is not found. + * + * The method will retrieve all friends from all friend platforms, so + * - all external friends (Facebook, Steam, PlaystationNetwork) + * - all internal friends (brainCloud) + * - plus "self". + * + * Leaderboards entries contain the player's score and optionally, some user-defined + * data associated with the score. The currently logged in player will also + * be returned in the social leaderboard. + * + * Note: If no friends have played the game, the bestScore, createdAt, updatedAt + * will contain NULL. + * + * @param in_leaderboardId The id of the leaderboard to retrieve + * @param in_replaceName If true, the currently logged in player's name will be replaced + * by the string "You". + * @param in_callback The method to be invoked when the server response is received + * + */ + void getSocialLeaderboardIfExists(const char *in_leaderboardId, bool in_replaceName, IServerCallback *in_callback = NULL); + /** * Method returns the social leaderboard by its version. A player's social leaderboard is * comprised of players who are recognized as being your friend. @@ -94,6 +120,33 @@ namespace BrainCloud */ void getSocialLeaderboardByVersion(const char * in_leaderboardId, bool in_replaceName, int in_versionId, IServerCallback * in_callback = NULL); + /** + * Method returns the social leaderboard by its version. A player's social leaderboard is + * comprised of players who are recognized as being your friend. + * + * This method returns the same data as getSocialLeaderboardByVersion, but it will not return an error if the leaderboard is not found. + * + * The method will retrieve all friends from all friend platforms, so + * - all external friends (Facebook, Steam, PlaystationNetwork) + * - all internal friends (brainCloud) + * - plus "self". + * + * Leaderboards entries contain the player's score and optionally, some user-defined + * data associated with the score. The currently logged in player will also + * be returned in the social leaderboard. + * + * Note: If no friends have played the game, the bestScore, createdAt, updatedAt + * will contain NULL. + * + * @param in_leaderboardId The id of the leaderboard to retrieve + * @param in_replaceName If true, the currently logged in player's name will be replaced + * by the string "You". + * @param in_versionId the version of the leaderboard + * @param in_callback The method to be invoked when the server response is received + * + */ + void getSocialLeaderboardByVersionIfExists(const char *in_leaderboardId, bool in_replaceName, int in_versionId, IServerCallback *in_callback = NULL); + /** * Reads multiple social leaderboards. * @@ -131,6 +184,30 @@ namespace BrainCloud int in_endIndex, IServerCallback * in_callback = NULL); + /** + * Method returns a page of global leaderboard results. + * Returns the same data as getGlobalLeaderboardPage, but does not return an error if the leaderboard does not exist. + * + * Leaderboards entries contain the player's score and optionally, some user-defined + * data associated with the score. + * + * Note: This method allows the client to retrieve pages from within the global leaderboard list + * + * Service Name - SocialLeaderboard + * Service Operation - GET_GLOBAL_LEADERBOARD_PAGE_IF_EXISTS + * + * @param in_leaderboardId The id of the leaderboard to retrieve. + * @param in_sort Sort key Sort order of page. + * @param in_startIndex The index at which to start the page. + * @param in_endIndex The index at which to end the page. + * @param in_callback The method to be invoked when the server response is received + */ + void getGlobalLeaderboardPageIfExists( + const char *in_leaderboardId, + SortOrder in_sortOrder, + int in_startIndex, + int in_endIndex, + IServerCallback *in_callback = NULL); /** * Method returns a page of global leaderboard results. @@ -138,7 +215,7 @@ namespace BrainCloud * See GetGlobalLeaderboardVersions method to retrieve the version id. * * Service Name - SocialLeaderboard - * Service Operation - GetGlobalLeaderboardPage + * Service Operation - GET_GLOBAL_LEADERBOARD_PAGE_BY_VERSION * * @param in_leaderboardId The id of the leaderboard to retrieve. * @param in_sort Sort key Sort order of page. @@ -155,7 +232,31 @@ namespace BrainCloud int in_versionId, IServerCallback * in_callback = NULL); - + /** + * Method returns a page of global leaderboard results. + * By using a non-current version id, the user can retrieve a historical leaderboard. + * See GetGlobalLeaderboardVersions method to retrieve the version id. + * + * This method returns the same data as getGlobalLeaderboardPageByVersion, but it will not return an error if the leaderboard does not exist + * + * Service Name - SocialLeaderboard + * Service Operation - GET_GLOBAL_LEADERBOARD_PAGE_BY_VERSION_IF_EXISTS + * + * @param in_leaderboardId The id of the leaderboard to retrieve. + * @param in_sort Sort key Sort order of page. + * @param in_startIndex The index at which to start the page. + * @param in_endIndex The index at which to end the page. + * @param in_versionId The historical version to retrieve. + * @param in_callback The method to be invoked when the server response is received + */ + void getGlobalLeaderboardPageByVersionIfExists( + const char *in_leaderboardId, + SortOrder in_sortOrder, + int in_startIndex, + int in_endIndex, + int in_versionId, + IServerCallback *in_callback = NULL); + /** * Method returns a view of global leaderboard results that centers on the current player. * @@ -173,6 +274,24 @@ namespace BrainCloud */ void getGlobalLeaderboardView(const char * in_leaderboardId, SortOrder in_sortOrder, int in_beforeCount, int in_afterCount, IServerCallback * in_callback = NULL); + /** + * Method returns a view of global leaderboard results that centers on the current player. + * Returns the same data as getGlobalLeaderboardView, but will not return an error if the leaderboard does not exist. + * + * Leaderboards entries contain the player's score and optionally, some user-defined + * data associated with the score. + * + * Service Name - SocialLeaderboard + * Service Operation - GET_GLOBAL_LEADERBOARD_VIEW_IF_EXISTS + * + * @param in_leaderboardId The id of the leaderboard to retrieve. + * @param in_sort Sort key Sort order of page. + * @param in_beforeCount The count of number of players before the current player to include. + * @param in_afterCount The count of number of players after the current player to include. + * @param in_callback The method to be invoked when the server response is received + */ + void getGlobalLeaderboardViewIfExists(const char * in_leaderboardId, SortOrder in_sortOrder, int in_beforeCount, int in_afterCount, IServerCallback * in_callback = NULL); + /** * Method returns a view of global leaderboard results that centers on the current player. * By using a non-current version id, the user can retrieve a historical leaderboard. @@ -190,6 +309,25 @@ namespace BrainCloud */ void getGlobalLeaderboardViewByVersion(const char * in_leaderboardId, SortOrder in_sortOrder, int in_beforeCount, int in_afterCount, int in_versionId, IServerCallback * in_callback = NULL); + /** + * Method returns a view of global leaderboard results that centers on the current player. + * By using a non-current version id, the user can retrieve a historical leaderboard. + * See GetGlobalLeaderboardVersions method to retrieve the version id. + * + * This method returns the same data as getGlobalLeaderboardViewByVersion, but it will not return an error if the leaderboard does not exist. + * + * Service Name - SocialLeaderboard + * Service Operation - GET_GLOBAL_LEADERBOARD_VIEW_IF_EXISTS + * + * @param in_leaderboardId The id of the leaderboard to retrieve. + * @param in_sort Sort key Sort order of page. + * @param in_beforeCount The count of number of players before the current player to include. + * @param in_afterCount The count of number of players after the current player to include. + * @param in_versionId The historical version to retrieve. + * @param in_callback The method to be invoked when the server response is received + */ + void getGlobalLeaderboardViewByVersionIfExists(const char * in_leaderboardId, SortOrder in_sortOrder, int in_beforeCount, int in_afterCount, int in_versionId, IServerCallback * in_callback = NULL); + /** Gets the global leaderboard versions. * * Service Name - SocialLeaderboard @@ -395,6 +533,19 @@ namespace BrainCloud */ void getPlayersSocialLeaderboard(const char * in_leaderboardId, std::vector in_profileIds, IServerCallback * in_callback = NULL); + /** + * Retrieve the social leaderboard for a list of players. + * This method returns the same data as getPlayersSocialLeaderboard, but it will not return an error if the leaderboard is not found. + * + * Service Name - leaderboard + * Service Operation - GET_PLAYERS_SOCIAL_LEADERBOARD_IF_EXISTS + * + * @param in_leaderboardId The leaderboard to retrieve + * @param in_profileIds The IDs of the players + * @param in_callback The method to be invoked when the server response is received + */ + void getPlayersSocialLeaderboardIfExists(const char * in_leaderboardId, std::vector in_profileIds, IServerCallback * in_callback = NULL); + /** * Retrieve the social leaderboard for a list of players by its version. * @@ -407,6 +558,19 @@ namespace BrainCloud */ void getPlayersSocialLeaderboardByVersion(const char * in_leaderboardId, std::vector in_profileIds, int in_versionId, IServerCallback * in_callback = NULL); + /** + * Retrieve the social leaderboard for a list of players by its version. + * This method returns the same data as getPlayersSocialLeaderboardByVersion, but it will not return an error if the leaderboard is not found. + * + * Service Name - leaderboard + * Service Operation - GET_PLAYERS_SOCIAL_LEADERBOARD + * + * @param in_leaderboardId The leaderboard to retrieve + * @param in_profileIds The IDs of the players + * @param in_callback The method to be invoked when the server response is received + */ + void getPlayersSocialLeaderboardByVersionIfExists(const char * in_leaderboardId, std::vector in_profileIds, int in_versionId, IServerCallback * in_callback = NULL); + /** * Retrieve a list of all leaderboards * diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 536c7632..62045d40 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -109,11 +109,15 @@ namespace BrainCloud { static const ServiceOperation GetUsersOnlineStatus; static const ServiceOperation FindPlayerByUniversalId; static const ServiceOperation GetSocialLeaderboard; + static const ServiceOperation GetSocialLeaderboardIfExists; static const ServiceOperation GetSocialLeaderboardByVersion; + static const ServiceOperation GetSocialLeaderboardByVersionIfExists; static const ServiceOperation GetMultiSocialLeaderboard; static const ServiceOperation GetGlobalLeaderboard; static const ServiceOperation GetGlobalLeaderboardPage; + static const ServiceOperation GetGlobalLeaderboardPageIfExists; static const ServiceOperation GetGlobalLeaderboardView; + static const ServiceOperation GetGlobalLeaderboardViewIfExists; static const ServiceOperation GetGlobalLeaderboardVersions; static const ServiceOperation GetCompletedTournament; static const ServiceOperation RewardTournament; @@ -127,7 +131,9 @@ namespace BrainCloud { static const ServiceOperation GetGroupLeaderboardView; static const ServiceOperation GetSummaryDataForProfileId; static const ServiceOperation GetPlayersSocialLeaderboard; + static const ServiceOperation GetPlayersSocialLeaderboardIfExists; static const ServiceOperation GetPlayersSocialLeaderboardByVersion; + static const ServiceOperation GetPlayersSocialLeaderboardByVersionIfExists; static const ServiceOperation ListAllLeaderboards; static const ServiceOperation GetGlobalLeaderboardEntryCount; static const ServiceOperation RemovePlayerScore; diff --git a/src/BrainCloudSocialLeaderboard.cpp b/src/BrainCloudSocialLeaderboard.cpp index a6c45577..638b2654 100644 --- a/src/BrainCloudSocialLeaderboard.cpp +++ b/src/BrainCloudSocialLeaderboard.cpp @@ -27,6 +27,16 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::getSocialLeaderboardIfExists(const char * in_leaderboardId, bool in_replaceName, IServerCallback * in_callback) + { + Json::Value message; + message[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + message[OperationParam::SocialLeaderboardServiceReplaceName.getValue()] = in_replaceName; + + ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::GetSocialLeaderboardIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::getSocialLeaderboardByVersion(const char * in_leaderboardId, bool in_replaceName, int in_versionId, IServerCallback * in_callback) { Json::Value message; @@ -38,6 +48,17 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::getSocialLeaderboardByVersionIfExists(const char * in_leaderboardId, bool in_replaceName, int in_versionId, IServerCallback * in_callback) + { + Json::Value message; + message[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + message[OperationParam::SocialLeaderboardServiceReplaceName.getValue()] = in_replaceName; + message[OperationParam::SocialLeaderboardServiceVersionId.getValue()] = in_versionId; + + ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::GetSocialLeaderboardByVersionIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::getMultiSocialLeaderboard(const std::vector & in_leaderboardIds, int in_leaderboardResultCount, bool in_replaceName, IServerCallback * in_callback) { Json::Value message; @@ -67,6 +88,21 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::getGlobalLeaderboardPageIfExists(const char * in_leaderboardId, SortOrder in_sortOrder, int in_startIndex, + int in_endIndex, IServerCallback * in_callback) + { + std::string sortOrder = sortOrderToString(in_sortOrder); + + Json::Value message; + message[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + message[OperationParam::SocialLeaderboardServiceSortOrder.getValue()] = sortOrder; + message[OperationParam::SocialLeaderboardServiceStartIndex.getValue()] = in_startIndex; + message[OperationParam::SocialLeaderboardServiceEndIndex.getValue()] = in_endIndex; + + ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::GetGlobalLeaderboardPageIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::getGlobalLeaderboardPageByVersion(const char * in_leaderboardId, SortOrder in_sortOrder, int in_startIndex, int in_endIndex, int in_versionId, IServerCallback * in_callback) { std::string sortOrder = sortOrderToString(in_sortOrder); @@ -82,12 +118,33 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::getGlobalLeaderboardPageByVersionIfExists(const char * in_leaderboardId, SortOrder in_sortOrder, int in_startIndex, int in_endIndex, int in_versionId, IServerCallback * in_callback) + { + std::string sortOrder = sortOrderToString(in_sortOrder); + + Json::Value message; + message[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + message[OperationParam::SocialLeaderboardServiceSortOrder.getValue()] = sortOrder; + message[OperationParam::SocialLeaderboardServiceStartIndex.getValue()] = in_startIndex; + message[OperationParam::SocialLeaderboardServiceEndIndex.getValue()] = in_endIndex; + message[OperationParam::SocialLeaderboardServiceVersionId.getValue()] = in_versionId; + + ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::GetGlobalLeaderboardPageIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::getGlobalLeaderboardView(const char * in_leaderboardId, SortOrder in_sortOrder, int in_beforeCount, int in_afterCount, IServerCallback * in_callback) { getGlobalLeaderboardViewByVersion(in_leaderboardId, in_sortOrder, in_beforeCount, in_afterCount, -1, in_callback); } + void BrainCloudSocialLeaderboard::getGlobalLeaderboardViewIfExists(const char * in_leaderboardId, SortOrder in_sortOrder, int in_beforeCount, + int in_afterCount, IServerCallback * in_callback) + { + getGlobalLeaderboardViewByVersionIfExists(in_leaderboardId, in_sortOrder, in_beforeCount, in_afterCount, -1, in_callback); + } + void BrainCloudSocialLeaderboard::getGlobalLeaderboardViewByVersion(const char * in_leaderboardId, SortOrder in_sortOrder, int in_beforeCount, int in_afterCount, int in_versionId, IServerCallback * in_callback) { @@ -104,6 +161,22 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::getGlobalLeaderboardViewByVersionIfExists(const char * in_leaderboardId, SortOrder in_sortOrder, int in_beforeCount, + int in_afterCount, int in_versionId, IServerCallback * in_callback) + { + std::string sortOrder = sortOrderToString(in_sortOrder); + + Json::Value message; + message[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + message[OperationParam::SocialLeaderboardServiceSortOrder.getValue()] = sortOrder; + message[OperationParam::SocialLeaderboardServiceBeforeCount.getValue()] = in_beforeCount; + message[OperationParam::SocialLeaderboardServiceAfterCount.getValue()] = in_afterCount; + if (in_versionId != -1) message[OperationParam::SocialLeaderboardServiceVersionId.getValue()] = in_versionId; + + ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::GetGlobalLeaderboardViewIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::getGlobalLeaderboardVersions(const char * in_leaderboardId, IServerCallback * in_callback) { Json::Value message; @@ -286,6 +359,16 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::getPlayersSocialLeaderboardIfExists(const char * in_leaderboardId, std::vector in_profileIds, IServerCallback * in_callback) + { + Json::Value message; + message[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + message[OperationParam::ProfileIds.getValue()] = JsonUtil::stringVectorToJson(in_profileIds); + + ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::GetPlayersSocialLeaderboardIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::getPlayersSocialLeaderboardByVersion(const char * in_leaderboardId, std::vector in_profileIds, int in_versionId, IServerCallback * in_callback) { Json::Value message; @@ -297,6 +380,17 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::getPlayersSocialLeaderboardByVersionIfExists(const char * in_leaderboardId, std::vector in_profileIds, int in_versionId, IServerCallback * in_callback) + { + Json::Value message; + message[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + message[OperationParam::ProfileIds.getValue()] = JsonUtil::stringVectorToJson(in_profileIds); + message[OperationParam::SocialLeaderboardServiceVersionId.getValue()] = in_versionId; + + ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::GetPlayersSocialLeaderboardByVersionIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::listAllLeaderboards(IServerCallback * in_callback) { ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::ListAllLeaderboards, Json::nullValue, in_callback); diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index d1122614..cae1af48 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -102,11 +102,15 @@ namespace BrainCloud const ServiceOperation ServiceOperation::GetUsersOnlineStatus = ServiceOperation("GET_USERS_ONLINE_STATUS"); const ServiceOperation ServiceOperation::FindPlayerByUniversalId = ServiceOperation("FIND_PLAYER_BY_UNIVERSAL_ID"); const ServiceOperation ServiceOperation::GetSocialLeaderboard = ServiceOperation("GET_SOCIAL_LEADERBOARD"); + const ServiceOperation ServiceOperation::GetSocialLeaderboardIfExists = ServiceOperation("GET_SOCIAL_LEADERBOARD_IF_EXISTS"); const ServiceOperation ServiceOperation::GetSocialLeaderboardByVersion = ServiceOperation("GET_SOCIAL_LEADERBOARD_BY_VERSION"); + const ServiceOperation ServiceOperation::GetSocialLeaderboardByVersionIfExists = ServiceOperation("GET_SOCIAL_LEADERBOARD_BY_VERSION_IF_EXISTS"); const ServiceOperation ServiceOperation::GetMultiSocialLeaderboard = ServiceOperation("GET_MULTI_SOCIAL_LEADERBOARD"); const ServiceOperation ServiceOperation::GetGlobalLeaderboard = ServiceOperation("GET_GLOBAL_LEADERBOARD"); const ServiceOperation ServiceOperation::GetGlobalLeaderboardPage = ServiceOperation("GET_GLOBAL_LEADERBOARD_PAGE"); + const ServiceOperation ServiceOperation::GetGlobalLeaderboardPageIfExists = ServiceOperation("GET_GLOBAL_LEADERBOARD_PAGE_IF_EXISTS"); const ServiceOperation ServiceOperation::GetGlobalLeaderboardView = ServiceOperation("GET_GLOBAL_LEADERBOARD_VIEW"); + const ServiceOperation ServiceOperation::GetGlobalLeaderboardViewIfExists = ServiceOperation("GET_GLOBAL_LEADERBOARD_VIEW_IF_EXISTS"); const ServiceOperation ServiceOperation::GetGlobalLeaderboardVersions = ServiceOperation("GET_GLOBAL_LEADERBOARD_VERSIONS"); const ServiceOperation ServiceOperation::GetCompletedTournament = ServiceOperation("GET_COMPLETED_TOURNAMENT"); const ServiceOperation ServiceOperation::RewardTournament = ServiceOperation("REWARD_TOURNAMENT"); @@ -120,7 +124,9 @@ namespace BrainCloud const ServiceOperation ServiceOperation::GetGroupLeaderboardView = ServiceOperation("GET_GROUP_LEADERBOARD_VIEW"); const ServiceOperation ServiceOperation::GetSummaryDataForProfileId = ServiceOperation("GET_SUMMARY_DATA_FOR_PROFILE_ID"); const ServiceOperation ServiceOperation::GetPlayersSocialLeaderboard = ServiceOperation("GET_PLAYERS_SOCIAL_LEADERBOARD"); + const ServiceOperation ServiceOperation::GetPlayersSocialLeaderboardIfExists = ServiceOperation("GET_PLAYERS_SOCIAL_LEADERBOARD_IF_EXISTS"); const ServiceOperation ServiceOperation::GetPlayersSocialLeaderboardByVersion = ServiceOperation("GET_PLAYERS_SOCIAL_LEADERBOARD_BY_VERSION"); + const ServiceOperation ServiceOperation::GetPlayersSocialLeaderboardByVersionIfExists = ServiceOperation("GET_PLAYERS_SOCIAL_LEADERBOARD_BY_VERSION_IF_EXISTS"); const ServiceOperation ServiceOperation::ListAllLeaderboards = ServiceOperation("LIST_ALL_LEADERBOARDS"); const ServiceOperation ServiceOperation::GetGlobalLeaderboardEntryCount = ServiceOperation("GET_GLOBAL_LEADERBOARD_ENTRY_COUNT"); const ServiceOperation ServiceOperation::RemovePlayerScore = ServiceOperation("REMOVE_PLAYER_SCORE"); diff --git a/tests/src/TestBCSocialLeaderboard.cpp b/tests/src/TestBCSocialLeaderboard.cpp index ed49fba8..4320344f 100644 --- a/tests/src/TestBCSocialLeaderboard.cpp +++ b/tests/src/TestBCSocialLeaderboard.cpp @@ -23,6 +23,22 @@ TEST_F(TestBCSocialLeaderboard, GetSocialLeaderboard) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, GetSocialLeaderboardIfExistsTrue) +{ + TestResult tr; + + m_bc->getLeaderboardService()->getSocialLeaderboardIfExists(LB_ID, true, &tr); + tr.run(m_bc); +} + +TEST_F(TestBCSocialLeaderboard, GetSocialLeaderboardIfExistsFalse) +{ + TestResult tr; + + m_bc->getLeaderboardService()->getSocialLeaderboardIfExists("nonExistentLeaderboard", true, &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, GetSocialLeaderboardByVersion) { TestResult tr; @@ -31,6 +47,22 @@ TEST_F(TestBCSocialLeaderboard, GetSocialLeaderboardByVersion) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, GetSocialLeaderboardByVersionIfExistsTrue) +{ + TestResult tr; + + m_bc->getLeaderboardService()->getSocialLeaderboardByVersionIfExists(LB_ID, true, 0, &tr); + tr.run(m_bc); +} + +TEST_F(TestBCSocialLeaderboard, GetSocialLeaderboardByVersionIfExistsFalse) +{ + TestResult tr; + + m_bc->getLeaderboardService()->getSocialLeaderboardByVersionIfExists("nonExistentLeaderboard", true, 0, &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, GetMultiSocialLeaderboard) { // post a few scores first so we have some data @@ -72,6 +104,20 @@ TEST_F(TestBCSocialLeaderboard, GetGlobalLeaderboardPageLow) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, GetGlobalLeaderboardPageIfExistsTrue) +{ + TestResult tr; + m_bc->getLeaderboardService()->getGlobalLeaderboardPageIfExists(LB_ID, HIGH_TO_LOW, 0, 10, &tr); + tr.run(m_bc); +} + +TEST_F(TestBCSocialLeaderboard, GetGlobalLeaderboardPageIfExistsFalse) +{ + TestResult tr; + m_bc->getLeaderboardService()->getGlobalLeaderboardPageIfExists("nonExistentLeaderboard", HIGH_TO_LOW, 0, 10, &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, GetGlobalLeaderboardViewHigh) { TestResult tr; @@ -86,6 +132,20 @@ TEST_F(TestBCSocialLeaderboard, GetGlobalLeaderboardViewLow) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, GetGlobalLeaderboardViewIfExistsTrue) +{ + TestResult tr; + m_bc->getLeaderboardService()->getGlobalLeaderboardViewIfExists(LB_ID, HIGH_TO_LOW, 4, 5, &tr); + tr.run(m_bc); +} + +TEST_F(TestBCSocialLeaderboard, GetGlobalLeaderboardViewIfExistsFalse) +{ + TestResult tr; + m_bc->getLeaderboardService()->getGlobalLeaderboardViewIfExists("nonExistentLeaderboard", HIGH_TO_LOW, 4, 5, &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, GetGlobalPageByVersion) { TestResult tr; @@ -94,6 +154,22 @@ TEST_F(TestBCSocialLeaderboard, GetGlobalPageByVersion) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, GetGlobalPageByVersionIfExistsTrue) +{ + TestResult tr; + + m_bc->getLeaderboardService()->getGlobalLeaderboardPageByVersionIfExists(LB_ID, HIGH_TO_LOW, 0, 10, 0, &tr); + tr.run(m_bc); +} + +TEST_F(TestBCSocialLeaderboard, GetGlobalPageByVersionIfExistsFalse) +{ + TestResult tr; + + m_bc->getLeaderboardService()->getGlobalLeaderboardPageByVersionIfExists("nonExistentLeaderboard", HIGH_TO_LOW, 0, 10, 0, &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, GetGlobalViewByVersion) { TestResult tr; @@ -102,6 +178,22 @@ TEST_F(TestBCSocialLeaderboard, GetGlobalViewByVersion) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, GetGlobalViewByVersionIfExistsTrue) +{ + TestResult tr; + + m_bc->getLeaderboardService()->getGlobalLeaderboardViewByVersionIfExists(LB_ID, HIGH_TO_LOW, 0, 10, 0, &tr); + tr.run(m_bc); +} + +TEST_F(TestBCSocialLeaderboard, GetGlobalViewByVersionIfExistsFalse) +{ + TestResult tr; + + m_bc->getLeaderboardService()->getGlobalLeaderboardViewByVersionIfExists("nonExistentLeaderboard", HIGH_TO_LOW, 0, 10, 0, &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, PostScoreToDynamicUTC) { PostScoreToDynamic(); @@ -163,6 +255,30 @@ TEST_F(TestBCSocialLeaderboard, GetPlayersSocialLeaderboard) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, GetPlayersSocialLeaderboardIfExistsTrue) +{ + TestResult tr; + + std::vector profileIds; + profileIds.push_back(GetUser(UserA)->m_profileId); + profileIds.push_back(GetUser(UserB)->m_profileId); + + m_bc->getLeaderboardService()->getPlayersSocialLeaderboardIfExists(SOCIAL_LB_ID, profileIds, &tr); + tr.run(m_bc); +} + +TEST_F(TestBCSocialLeaderboard, GetPlayersSocialLeaderboardIfExistsFalse) +{ + TestResult tr; + + std::vector profileIds; + profileIds.push_back(GetUser(UserA)->m_profileId); + profileIds.push_back(GetUser(UserB)->m_profileId); + + m_bc->getLeaderboardService()->getPlayersSocialLeaderboardIfExists("nonExistentLeaderboard", profileIds, &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, GetPlayersSocialLeaderboardByVersion) { TestResult tr; @@ -175,6 +291,30 @@ TEST_F(TestBCSocialLeaderboard, GetPlayersSocialLeaderboardByVersion) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, GetPlayersSocialLeaderboardByVersionIfExistsTrue) +{ + TestResult tr; + + std::vector profileIds; + profileIds.push_back(GetUser(UserA)->m_profileId); + profileIds.push_back(GetUser(UserB)->m_profileId); + + m_bc->getLeaderboardService()->getPlayersSocialLeaderboardByVersionIfExists(SOCIAL_LB_ID, profileIds, 0, &tr); + tr.run(m_bc); +} + +TEST_F(TestBCSocialLeaderboard, GetPlayersSocialLeaderboardByVersionIfExistsFalse) +{ + TestResult tr; + + std::vector profileIds; + profileIds.push_back(GetUser(UserA)->m_profileId); + profileIds.push_back(GetUser(UserB)->m_profileId); + + m_bc->getLeaderboardService()->getPlayersSocialLeaderboardByVersionIfExists("nonExistentLeaderboard", profileIds, 0, &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, ListAllLeaderboards) { TestResult tr; From 135ae51b0d43a146cdf46d7bbf239d8b609c5539 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Fri, 2 Aug 2024 13:13:45 -0400 Subject: [PATCH 03/11] added postScoreToDynamicLeaderboardUsingConfig --- .../braincloud/BrainCloudSocialLeaderboard.h | 40 +++++++++++++++++++ include/braincloud/OperationParam.h | 2 + include/braincloud/ServiceOperation.h | 1 + src/BrainCloudSocialLeaderboard.cpp | 17 ++++++++ src/OperationParam.cpp | 2 + src/ServiceOperation.cpp | 1 + tests/src/TestBCSocialLeaderboard.cpp | 9 +++++ 7 files changed, 72 insertions(+) diff --git a/include/braincloud/BrainCloudSocialLeaderboard.h b/include/braincloud/BrainCloudSocialLeaderboard.h index dee745f2..62f9b992 100644 --- a/include/braincloud/BrainCloudSocialLeaderboard.h +++ b/include/braincloud/BrainCloudSocialLeaderboard.h @@ -386,6 +386,46 @@ namespace BrainCloud int in_retainedCount, IServerCallback * in_callback = NULL); + /** + * Post the player's score to the given social leaderboard, + * dynamically creating the leaderboard if it does not exist yet. + * To create new leaderboard, configJson must specify leaderboardType, rotationType, resetAt, and retainedCount, at a minimum, with support to optionally specify an expiry in minutes. + * + * Service Name - SocialLeaderboard + * Service Operation - POST_SCORE_DYNAMIC_USING_CONFIG + * + * @param in_leaderboardId The leaderboard to post to. + * @param in_score A score to post. + * @param in_scoreData Optional user-defined data to post with the score. + * @param in_configJson Configuration for the leaderboard if it does not exist yet, specified as JSON object. + * Configuration fields supported are: + * 'leaderboardType': Required. Type of leaderboard. Valid values are: + * 'LAST_VALUE', + * 'HIGH_VALUE', + * 'LOW_VALUE', + * 'CUMULATIVE', + * 'ARCADE_HIGH', + * 'ARCADE_LOW'; + * 'rotationType': Required. Type of rotation. Valid values are: + * 'NEVER', + * 'DAILY', + * 'DAYS', + * 'WEEKLY', + * 'MONTHLY', + * 'YEARLY'; + * 'numDaysToRotate': Required if 'DAYS' rotation type, with valid values between 2 and 14; otherwise, null; + * 'resetAt': UTC timestamp, in milliseconds, at which to rotate the period. Always null if 'NEVER' rotation type; + * 'retainedCount': Required. Number of rotations (versions) of the leaderboard to retain; + * 'expireInMins': Optional. Duration, in minutes, before the leaderboard is to automatically expire. + * @param in_callback The method to be invoked when the server response is received. + */ + void postScoreToDynamicLeaderboardUsingConfig( + const char * in_leaderboardId, + int64_t in_score, + const std::string& in_scoreData, + const std::string& in_configJson, + IServerCallback * in_callback = NULL); + /** * Post the players score to the given social leaderboard. * Pass leaderboard config data to dynamically create if necessary. diff --git a/include/braincloud/OperationParam.h b/include/braincloud/OperationParam.h index 824e8c77..d3e8c2f1 100644 --- a/include/braincloud/OperationParam.h +++ b/include/braincloud/OperationParam.h @@ -213,6 +213,8 @@ namespace BrainCloud { static const OperationParam SocialLeaderboardServiceLeaderboardIds; static const OperationParam SocialLeaderboardServiceReplaceName; static const OperationParam SocialLeaderboardServiceScore; + static const OperationParam SocialLeaderboardServiceScoreData; + static const OperationParam SocialLeaderboardServiceConfigJson; static const OperationParam SocialLeaderboardServiceData; static const OperationParam SocialLeaderboardServiceEventName; static const OperationParam SocialLeaderboardServiceEventMultiplier; diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 62045d40..2b6ab040 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -123,6 +123,7 @@ namespace BrainCloud { static const ServiceOperation RewardTournament; static const ServiceOperation PostScore; static const ServiceOperation PostScoreDynamic; + static const ServiceOperation PostScoreDynamicUsingConfig; static const ServiceOperation GetGroupSocialLeaderboard; static const ServiceOperation GetGroupSocialLeaderboardByVersion; static const ServiceOperation PostScoreToGroupLeaderboard; diff --git a/src/BrainCloudSocialLeaderboard.cpp b/src/BrainCloudSocialLeaderboard.cpp index 638b2654..62e36c4b 100644 --- a/src/BrainCloudSocialLeaderboard.cpp +++ b/src/BrainCloudSocialLeaderboard.cpp @@ -227,6 +227,23 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::postScoreToDynamicLeaderboardUsingConfig( + const char * in_leaderboardId, + int64_t in_score, + const std::string& in_scoreData, + const std::string& in_configJson, + IServerCallback * in_callback) + { + Json::Value message; + message[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + message[OperationParam::SocialLeaderboardServiceScore.getValue()] = (Json::Int64) in_score; + message[OperationParam::SocialLeaderboardServiceScoreData.getValue()] = JsonUtil::jsonStringToValue(in_scoreData); + message[OperationParam::SocialLeaderboardServiceConfigJson.getValue()] = JsonUtil::jsonStringToValue(in_configJson); + + ServerCall * sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::PostScoreDynamicUsingConfig, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::postScoreToDynamicLeaderboardUTC( const char * in_leaderboardId, int64_t in_score, diff --git a/src/OperationParam.cpp b/src/OperationParam.cpp index 982a0060..148124de 100644 --- a/src/OperationParam.cpp +++ b/src/OperationParam.cpp @@ -204,6 +204,8 @@ namespace BrainCloud const OperationParam OperationParam::SocialLeaderboardServiceLeaderboardIds = OperationParam("leaderboardIds"); const OperationParam OperationParam::SocialLeaderboardServiceReplaceName = OperationParam("replaceName"); const OperationParam OperationParam::SocialLeaderboardServiceScore = OperationParam("score"); + const OperationParam OperationParam::SocialLeaderboardServiceScoreData = OperationParam("scoreData"); + const OperationParam OperationParam::SocialLeaderboardServiceConfigJson = OperationParam("configJson"); const OperationParam OperationParam::SocialLeaderboardServiceData = OperationParam("data"); const OperationParam OperationParam::SocialLeaderboardServiceEventName = OperationParam("eventName"); const OperationParam OperationParam::SocialLeaderboardServiceEventMultiplier = OperationParam("eventMultiplier"); diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index cae1af48..c7d82a97 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -116,6 +116,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::RewardTournament = ServiceOperation("REWARD_TOURNAMENT"); const ServiceOperation ServiceOperation::PostScore = ServiceOperation("POST_SCORE"); const ServiceOperation ServiceOperation::PostScoreDynamic = ServiceOperation("POST_SCORE_DYNAMIC"); + const ServiceOperation ServiceOperation::PostScoreDynamicUsingConfig = ServiceOperation("POST_SCORE_DYNAMIC_USING_CONFIG"); const ServiceOperation ServiceOperation::GetGroupSocialLeaderboard = ServiceOperation("GET_GROUP_SOCIAL_LEADERBOARD"); const ServiceOperation ServiceOperation::GetGroupSocialLeaderboardByVersion = ServiceOperation("GET_GROUP_SOCIAL_LEADERBOARD_BY_VERSION"); const ServiceOperation ServiceOperation::PostScoreToGroupLeaderboard = ServiceOperation("POST_GROUP_SCORE"); diff --git a/tests/src/TestBCSocialLeaderboard.cpp b/tests/src/TestBCSocialLeaderboard.cpp index 4320344f..58c5232c 100644 --- a/tests/src/TestBCSocialLeaderboard.cpp +++ b/tests/src/TestBCSocialLeaderboard.cpp @@ -385,6 +385,15 @@ TEST_F(TestBCSocialLeaderboard, GetPlayerScoresFromLeaderboards) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, PostScoreToDynamicLeaderboardUsingConfig) +{ + TestResult tr; + + m_bc->getLeaderboardService()->postScoreToDynamicLeaderboardUsingConfig(DYNAMIC_LB_ID, 10, "{\"nickname\": \"CPP-Tester\"}", "{\"leaderboardType\": \"HIGH_VALUE\", \"rotationType\": \"DAYS\", \"numDaysToRotate\": 4, \"resetAt\": \"[[#ts+60000]]\", \"retainedCount\": 2, \"expireInMins\": None}", &tr); + tr.run(m_bc); + +} + void TestBCSocialLeaderboard::PostScoreToDynamic() { srand(static_cast(time(NULL))); From a3c2dd00c7ff228e27e0cce207c042ec206efbd2 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Tue, 6 Aug 2024 13:47:46 -0400 Subject: [PATCH 04/11] corrected test parameter --- tests/src/TestBCSocialLeaderboard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/TestBCSocialLeaderboard.cpp b/tests/src/TestBCSocialLeaderboard.cpp index 58c5232c..d5646bd4 100644 --- a/tests/src/TestBCSocialLeaderboard.cpp +++ b/tests/src/TestBCSocialLeaderboard.cpp @@ -389,7 +389,7 @@ TEST_F(TestBCSocialLeaderboard, PostScoreToDynamicLeaderboardUsingConfig) { TestResult tr; - m_bc->getLeaderboardService()->postScoreToDynamicLeaderboardUsingConfig(DYNAMIC_LB_ID, 10, "{\"nickname\": \"CPP-Tester\"}", "{\"leaderboardType\": \"HIGH_VALUE\", \"rotationType\": \"DAYS\", \"numDaysToRotate\": 4, \"resetAt\": \"[[#ts+60000]]\", \"retainedCount\": 2, \"expireInMins\": None}", &tr); + m_bc->getLeaderboardService()->postScoreToDynamicLeaderboardUsingConfig(DYNAMIC_LB_ID, 10, "{\"nickname\": \"CPP-Tester\"}", "{\"leaderboardType\": \"HIGH_VALUE\", \"rotationType\": \"DAYS\", \"numDaysToRotate\": 4, \"resetAt\": \"1722965911665\", \"retainedCount\": 2, \"expireInMins\": None}", &tr); tr.run(m_bc); } From fe386f0886490d40dd2d76daeea88d2ba910b19a Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Wed, 7 Aug 2024 09:58:35 -0400 Subject: [PATCH 05/11] corrected test parameter --- tests/src/TestBCSocialLeaderboard.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/src/TestBCSocialLeaderboard.cpp b/tests/src/TestBCSocialLeaderboard.cpp index d5646bd4..2aaca96f 100644 --- a/tests/src/TestBCSocialLeaderboard.cpp +++ b/tests/src/TestBCSocialLeaderboard.cpp @@ -389,7 +389,19 @@ TEST_F(TestBCSocialLeaderboard, PostScoreToDynamicLeaderboardUsingConfig) { TestResult tr; - m_bc->getLeaderboardService()->postScoreToDynamicLeaderboardUsingConfig(DYNAMIC_LB_ID, 10, "{\"nickname\": \"CPP-Tester\"}", "{\"leaderboardType\": \"HIGH_VALUE\", \"rotationType\": \"DAYS\", \"numDaysToRotate\": 4, \"resetAt\": \"1722965911665\", \"retainedCount\": 2, \"expireInMins\": None}", &tr); + int64_t milliseconds_since_epoch = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); + milliseconds_since_epoch += 1000000; //adding about 15 minutes + + Json::FastWriter fw; + Json::Value configJson; + configJson["leaderboardType"] = "HIGH_VALUE"; + configJson["rotationType"] = "DAYS"; + configJson["numDaysToRotate"] = 4; + configJson["resetAt"] = milliseconds_since_epoch; + configJson["retainedCount"] = 2; + configJson["expireInMins"] = "None"; + + m_bc->getLeaderboardService()->postScoreToDynamicLeaderboardUsingConfig(DYNAMIC_LB_ID, 10, "{\"nickname\": \"CPP-Tester\"}", fw.write(configJson), &tr); tr.run(m_bc); } From aa79d9a65d80fc0fa283d4cbd88bfb62c86bfc7c Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Wed, 7 Aug 2024 10:10:27 -0400 Subject: [PATCH 06/11] modified test param --- tests/src/TestBCSocialLeaderboard.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/src/TestBCSocialLeaderboard.cpp b/tests/src/TestBCSocialLeaderboard.cpp index 2aaca96f..db02fb04 100644 --- a/tests/src/TestBCSocialLeaderboard.cpp +++ b/tests/src/TestBCSocialLeaderboard.cpp @@ -399,7 +399,6 @@ TEST_F(TestBCSocialLeaderboard, PostScoreToDynamicLeaderboardUsingConfig) configJson["numDaysToRotate"] = 4; configJson["resetAt"] = milliseconds_since_epoch; configJson["retainedCount"] = 2; - configJson["expireInMins"] = "None"; m_bc->getLeaderboardService()->postScoreToDynamicLeaderboardUsingConfig(DYNAMIC_LB_ID, 10, "{\"nickname\": \"CPP-Tester\"}", fw.write(configJson), &tr); tr.run(m_bc); From 8dd59f5e68fb46f55d387573bc0948ebdc74788b Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Wed, 7 Aug 2024 12:54:35 -0400 Subject: [PATCH 07/11] corrected formatting --- tests/src/TestBCSocialLeaderboard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/TestBCSocialLeaderboard.cpp b/tests/src/TestBCSocialLeaderboard.cpp index db02fb04..5bb696bd 100644 --- a/tests/src/TestBCSocialLeaderboard.cpp +++ b/tests/src/TestBCSocialLeaderboard.cpp @@ -393,7 +393,7 @@ TEST_F(TestBCSocialLeaderboard, PostScoreToDynamicLeaderboardUsingConfig) milliseconds_since_epoch += 1000000; //adding about 15 minutes Json::FastWriter fw; - Json::Value configJson; + Json::Value configJson; configJson["leaderboardType"] = "HIGH_VALUE"; configJson["rotationType"] = "DAYS"; configJson["numDaysToRotate"] = 4; From 79dd7c25d9ab5d15d0f46aebe45449743fead9b4 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Thu, 8 Aug 2024 11:15:56 -0400 Subject: [PATCH 08/11] added checks for country code exceptions --- src/android/AndroidDevice.cpp | 10 ++++++++++ src/apple/AppleDevice.cpp | 9 +++++++++ src/marmalade/IwDevice.cpp | 9 +++++++++ src/win/WindowsDevice.cpp | 10 ++++++++++ 4 files changed, 38 insertions(+) diff --git a/src/android/AndroidDevice.cpp b/src/android/AndroidDevice.cpp index 1639bee4..9cf6ef89 100644 --- a/src/android/AndroidDevice.cpp +++ b/src/android/AndroidDevice.cpp @@ -37,6 +37,16 @@ namespace BrainCloud auto value = (jstring) (appEnv->CallObjectMethod(joLocale, jmCountry)); const char *valueP = appEnv->GetStringUTFChars(value, nullptr); *out_countryCode = std::string(valueP); + if (*out_countryCode == "419") + { + *out_countryCode = "_LA_"; + } + + if (*out_countryCode == "Hans" || *out_countryCode == "Hant") + { + *out_countryCode = "CN"; + } + appEnv->ReleaseStringUTFChars(value, valueP); jmethodID jmLanguage = appEnv->GetMethodID(jcLocale, "getLanguage", diff --git a/src/apple/AppleDevice.cpp b/src/apple/AppleDevice.cpp index 3f51e931..a8d4393c 100644 --- a/src/apple/AppleDevice.cpp +++ b/src/apple/AppleDevice.cpp @@ -44,6 +44,15 @@ namespace BrainCloud { CFStringGetCString(countryCode, charBuf, 16, kCFStringEncodingUTF8); *out_countryCode = std::string(charBuf); + if (*out_countryCode == "419") + { + *out_countryCode = "_LA_"; + } + + if (*out_countryCode == "Hans" || *out_countryCode == "Hant") + { + *out_countryCode = "CN"; + } } CFTimeZoneRef tz = CFTimeZoneCopySystem(); diff --git a/src/marmalade/IwDevice.cpp b/src/marmalade/IwDevice.cpp index db11bc19..f34fafac 100644 --- a/src/marmalade/IwDevice.cpp +++ b/src/marmalade/IwDevice.cpp @@ -53,6 +53,15 @@ namespace BrainCloud { *out_languageCode = locale.substr(0, sep); *out_countryCode = locale.substr(sep + 1, locale.length()); + if (*out_countryCode == "419") + { + *out_countryCode = "_LA_"; + } + + if (*out_countryCode == "Hans" || *out_countryCode == "Hant") + { + *out_countryCode = "CN"; + } } // the other way to get language on marmalade diff --git a/src/win/WindowsDevice.cpp b/src/win/WindowsDevice.cpp index 872aa52a..c353833d 100644 --- a/src/win/WindowsDevice.cpp +++ b/src/win/WindowsDevice.cpp @@ -34,7 +34,17 @@ namespace BrainCloud GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, wbuf, 16); wcstombs_s(&bytes, cbuf, 16, wbuf, 15); + *out_countryCode = cbuf; + if (*out_countryCode == "419") + { + *out_countryCode = "_LA_"; + } + + if (*out_countryCode == "Hans" || *out_countryCode == "Hant") + { + *out_countryCode = "CN"; + } } } } From 90fa1e7cd7cd55ba33bac89c980d125aeefa0061 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Mon, 12 Aug 2024 14:31:38 -0400 Subject: [PATCH 09/11] added updateIncomingEventDataIfExists --- include/braincloud/BrainCloudEvent.h | 13 ++++++++++++ include/braincloud/ServiceOperation.h | 1 + src/BrainCloudEvent.cpp | 10 +++++++++ src/ServiceOperation.cpp | 1 + tests/src/TestBCEvent.cpp | 29 +++++++++++++++++++++++++++ 5 files changed, 54 insertions(+) diff --git a/include/braincloud/BrainCloudEvent.h b/include/braincloud/BrainCloudEvent.h index e495e1fd..15665ae0 100644 --- a/include/braincloud/BrainCloudEvent.h +++ b/include/braincloud/BrainCloudEvent.h @@ -53,6 +53,19 @@ namespace BrainCloud */ void updateIncomingEventData(const char * in_evId, const std::string& in_jsonEventData, IServerCallback * in_callback = NULL); + /** + * Updates an event in the user's incoming event mailbox. + * Returns the same data as updateIncomingEventData, but returns null instead of an error if none exists. + * + * Service Name - event + * Service Operation - UPDATE_EVENT_DATA + * + * @param in_evId The event id + * @param in_jsonEventData The user-defined data for this event encoded in JSON. + * @param in_callback The method to be invoked when the server response is received + */ + void updateIncomingEventDataIfExists(const char * in_evId, const std::string& in_jsonEventData, IServerCallback * in_callback = NULL); + /** * Delete an event out of the user's incoming mailbox. * diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 2b6ab040..a5c9a5df 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -165,6 +165,7 @@ namespace BrainCloud { static const ServiceOperation Send; static const ServiceOperation UpdateEventData; + static const ServiceOperation UpdateEventDataIfExists; static const ServiceOperation DeleteSent; static const ServiceOperation DeleteIncoming; static const ServiceOperation DeleteIncomingEvents; diff --git a/src/BrainCloudEvent.cpp b/src/BrainCloudEvent.cpp index 5a1b2639..d25c064b 100644 --- a/src/BrainCloudEvent.cpp +++ b/src/BrainCloudEvent.cpp @@ -37,6 +37,16 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudEvent::updateIncomingEventDataIfExists(const char * in_evId, const std::string& in_jsonEventData, IServerCallback * in_callback) + { + Json::Value message; + message[OperationParam::EvId.getValue()] = in_evId; + message[OperationParam::EventServiceUpdateEventDataData.getValue()] = JsonUtil::jsonStringToValue(in_jsonEventData); + + ServerCall * sc = new ServerCall(ServiceName::Event, ServiceOperation::UpdateEventDataIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudEvent::deleteIncomingEvent(const char * in_evId, IServerCallback * in_callback) { Json::Value message; diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index c7d82a97..6ef09b32 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -158,6 +158,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::Send = ServiceOperation("SEND"); const ServiceOperation ServiceOperation::UpdateEventData = ServiceOperation("UPDATE_EVENT_DATA"); + const ServiceOperation ServiceOperation::UpdateEventDataIfExists = ServiceOperation("UPDATE_EVENT_DATA_IF_EXISTS"); const ServiceOperation ServiceOperation::DeleteSent = ServiceOperation("DELETE_SENT"); const ServiceOperation ServiceOperation::DeleteIncoming = ServiceOperation("DELETE_INCOMING"); const ServiceOperation ServiceOperation::DeleteIncomingEvents = ServiceOperation("DELETE_INCOMING_EVENTS"); diff --git a/tests/src/TestBCEvent.cpp b/tests/src/TestBCEvent.cpp index d97cba17..9cc3b07b 100644 --- a/tests/src/TestBCEvent.cpp +++ b/tests/src/TestBCEvent.cpp @@ -134,6 +134,35 @@ TEST_F(TestBCEvent, UpdateIncoming) DeleteIncomingMessage(); } +TEST_F(TestBCEvent, UpdateIncomingIfExistsTrue){ + SendDefaultMessage(); + + TestResult tr; + Json::FastWriter fw; + Json::Value eventData; + eventData[m_eventDataKey] = "testEventValue1"; + + m_bc->getEventService()->updateIncomingEventDataIfExists(m_eventId.c_str(), fw.write(eventData).c_str(), &tr); + tr.run(m_bc); + + DeleteIncomingMessage(); +} + +TEST_F(TestBCEvent, UpdateIncomingIfExistsFalse){ + //SendDefaultMessage(); + + std::string m_nonExistentEventId = "66ba5285d9002730d8f707a0"; + TestResult tr; + Json::FastWriter fw; + Json::Value eventData; + eventData[m_eventDataKey] = "testEventValue2"; + + m_bc->getEventService()->updateIncomingEventDataIfExists(m_nonExistentEventId.c_str(), fw.write(eventData).c_str(), &tr); + tr.run(m_bc); + + DeleteIncomingMessage(); +} + TEST_F(TestBCEvent, GetEvents) { SendDefaultMessage(); From 22355c27f9b4ae55be68ef585f2edcad6c52ade9 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Mon, 12 Aug 2024 15:08:19 -0400 Subject: [PATCH 10/11] removed unnecessary code --- tests/src/TestBCEvent.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/src/TestBCEvent.cpp b/tests/src/TestBCEvent.cpp index 9cc3b07b..2d4d3aeb 100644 --- a/tests/src/TestBCEvent.cpp +++ b/tests/src/TestBCEvent.cpp @@ -149,8 +149,6 @@ TEST_F(TestBCEvent, UpdateIncomingIfExistsTrue){ } TEST_F(TestBCEvent, UpdateIncomingIfExistsFalse){ - //SendDefaultMessage(); - std::string m_nonExistentEventId = "66ba5285d9002730d8f707a0"; TestResult tr; Json::FastWriter fw; From 2156c4605fe3ac1f7768c89411104a795520a67b Mon Sep 17 00:00:00 2001 From: Nick H Date: Tue, 20 Aug 2024 14:52:10 -0400 Subject: [PATCH 11/11] Updated version to 5.4.0 --- BrainCloudCpp.podspec | 2 +- src/BrainCloudClient.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BrainCloudCpp.podspec b/BrainCloudCpp.podspec index cda591cd..f483e2fd 100644 --- a/BrainCloudCpp.podspec +++ b/BrainCloudCpp.podspec @@ -11,7 +11,7 @@ Pod::Spec.new do |s| s.name = "BrainCloudCpp" - s.version = "5.3.0" + s.version = "5.4.0" s.summary = "The C++ client library for brainCloud" s.homepage = "http://getbraincloud.com/" diff --git a/src/BrainCloudClient.cpp b/src/BrainCloudClient.cpp index e4c79ac2..263a2cd3 100644 --- a/src/BrainCloudClient.cpp +++ b/src/BrainCloudClient.cpp @@ -27,7 +27,7 @@ namespace BrainCloud "Singleton usage is disabled. If called by mistake, use your own variable that holds an instance of the bcWrapper/bcClient."; BrainCloudClient * BrainCloudClient::_instance = NULL; - std::string BrainCloudClient::s_brainCloudClientVersion = "5.3.0"; + std::string BrainCloudClient::s_brainCloudClientVersion = "5.4.0"; const char* BC_SERVER_URL = "https://api.braincloudservers.com/dispatcherv2"; /**