From 752b53991a585f6892194313d4167f6c0eb1b3f8 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Fri, 10 Jan 2025 12:55:47 -0500 Subject: [PATCH 01/12] implemented GET_SERVER_VERSION --- include/braincloud/BrainCloudAuthentication.h | 5 +++++ include/braincloud/ServiceOperation.h | 1 + src/BrainCloudAuthentication.cpp | 11 +++++++++++ src/ServiceOperation.cpp | 1 + src/win/CppRestBrainCloudComms.cpp | 3 ++- tests/src/TestBCAuth.cpp | 7 +++++++ 6 files changed, 27 insertions(+), 1 deletion(-) diff --git a/include/braincloud/BrainCloudAuthentication.h b/include/braincloud/BrainCloudAuthentication.h index 2e381d60..775d1201 100644 --- a/include/braincloud/BrainCloudAuthentication.h +++ b/include/braincloud/BrainCloudAuthentication.h @@ -140,6 +140,11 @@ namespace BrainCloud */ void authenticateUniversal(const char * in_userId, const char * in_password, bool in_forceCreate, IServerCallback * in_callback = NULL); + /* + * Get server version. + */ + void getServerVersion(IServerCallback *in_callback = NULL); + /* * Authenticate the user using a steam userid and session ticket (without any validation on the userid). * diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index a5c9a5df..164070cb 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -10,6 +10,7 @@ namespace BrainCloud { static const ServiceOperation None; static const ServiceOperation Authenticate; + static const ServiceOperation GetServerVersion; static const ServiceOperation Attach; static const ServiceOperation Merge; static const ServiceOperation Detach; diff --git a/src/BrainCloudAuthentication.cpp b/src/BrainCloudAuthentication.cpp index 216ffe07..6df30563 100644 --- a/src/BrainCloudAuthentication.cpp +++ b/src/BrainCloudAuthentication.cpp @@ -89,6 +89,17 @@ namespace BrainCloud { authenticate(in_userid, in_password, AuthenticationType::Universal, NULL, in_forceCreate, "", in_callback); } + void BrainCloudAuthentication::getServerVersion(IServerCallback *in_callback) + { + Json::Value message; + + message[OperationParam::AuthenticateServiceAuthenticateGameId.getValue()] = m_client->getAppId().c_str(); + + ServerCall *sc = new ServerCall(ServiceName::AuthenticateV2, ServiceOperation::GetServerVersion, message, in_callback); + + m_client->sendRequest(sc); + } + void BrainCloudAuthentication::authenticateSteam(const char * in_userid, const char * in_sessionticket, bool in_forceCreate, IServerCallback * in_callback) { authenticate(in_userid, in_sessionticket, AuthenticationType::Steam, NULL, in_forceCreate, "", in_callback); diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index 6ef09b32..31f9f1d6 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -5,6 +5,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::None = ServiceOperation("NONE"); const ServiceOperation ServiceOperation::Authenticate = ServiceOperation("AUTHENTICATE"); + const ServiceOperation ServiceOperation::GetServerVersion = ServiceOperation("GET_SERVER_VERSION"); const ServiceOperation ServiceOperation::Attach = ServiceOperation("ATTACH"); const ServiceOperation ServiceOperation::Merge = ServiceOperation("MERGE"); const ServiceOperation ServiceOperation::Detach = ServiceOperation("DETACH"); diff --git a/src/win/CppRestBrainCloudComms.cpp b/src/win/CppRestBrainCloudComms.cpp index cb592b2c..2c3b8c15 100644 --- a/src/win/CppRestBrainCloudComms.cpp +++ b/src/win/CppRestBrainCloudComms.cpp @@ -277,7 +277,8 @@ namespace BrainCloud for (; it != _inProgressQueue.end(); it++) { if ((*it)->getOperation() == ServiceOperation::Authenticate || - (*it)->getOperation() == ServiceOperation::ResetEmailPassword) + (*it)->getOperation() == ServiceOperation::ResetEmailPassword || + (*it)->getOperation() == ServiceOperation::GetServerVersion) { isAuth = true; break; diff --git a/tests/src/TestBCAuth.cpp b/tests/src/TestBCAuth.cpp index 6df9d9d5..4968be33 100644 --- a/tests/src/TestBCAuth.cpp +++ b/tests/src/TestBCAuth.cpp @@ -100,6 +100,13 @@ TEST_F(TestBCAuth, AuthenticateUniversal) Logout(); } +TEST_F(TestBCAuth, GetServerVersion) +{ + TestResult tr; + m_bc->getAuthenticationService()->getServerVersion(&tr); + tr.run(m_bc); +} + TEST_F(TestBCAuth, AuthenticateParse) { TestResult tr; From 1c6ac06e3575c42c35bf7b4ad8e8f7d492b37cd5 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Fri, 10 Jan 2025 15:30:29 -0500 Subject: [PATCH 02/12] allowed GET_SERVER_VERSION w/o auth --- src/DefaultBrainCloudComms.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DefaultBrainCloudComms.cpp b/src/DefaultBrainCloudComms.cpp index ba1b97d5..02979883 100644 --- a/src/DefaultBrainCloudComms.cpp +++ b/src/DefaultBrainCloudComms.cpp @@ -1004,7 +1004,8 @@ namespace BrainCloud || call->getOperation() == ServiceOperation::ResetEmailPassword || call->getOperation() == ServiceOperation::ResetEmailPasswordAdvanced || call->getOperation() == ServiceOperation::ResetUniversalIdPassword - || call->getOperation() == ServiceOperation::ResetUniversalIdPasswordAdvanced) + || call->getOperation() == ServiceOperation::ResetUniversalIdPasswordAdvanced + || call->getOperation() == ServiceOperation::GetServerVersion) { authenticating = true; } From d0d18f016e3e9c2c5717be3077bd1684e8270b5b Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Mon, 13 Jan 2025 11:18:14 -0500 Subject: [PATCH 03/12] implemented GET_IDENTITY_STATUS --- include/braincloud/BrainCloudIdentity.h | 5 +++++ include/braincloud/ServiceOperation.h | 1 + .../brainCloud/brainCloud.vcxproj | 10 +++++----- src/BrainCloudIdentity.cpp | 12 ++++++++++++ src/ServiceOperation.cpp | 1 + tests/src/TestBCIdentity.cpp | 10 ++++++++++ 6 files changed, 34 insertions(+), 5 deletions(-) diff --git a/include/braincloud/BrainCloudIdentity.h b/include/braincloud/BrainCloudIdentity.h index 9b8a0f13..741e2cbd 100644 --- a/include/braincloud/BrainCloudIdentity.h +++ b/include/braincloud/BrainCloudIdentity.h @@ -737,6 +737,11 @@ namespace BrainCloud */ void getIdentities(IServerCallback * in_callback = NULL); + /* + * Retrieves identity status for given identity type for this profile. + */ + void getIdentityStatus(AuthenticationType in_authenticationType, const char *in_externalAuthName, IServerCallback *in_callback); + /** * Retrieve list of expired identities * diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 164070cb..93d5c960 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -28,6 +28,7 @@ namespace BrainCloud { static const ServiceOperation UpdateUniversalIdLogin; static const ServiceOperation GetChildProfiles; static const ServiceOperation GetIdentities; + static const ServiceOperation GetIdentityStatus; static const ServiceOperation GetExpiredIdentities; static const ServiceOperation RefreshIdentity; static const ServiceOperation ChangeEmailIdentity; diff --git a/solutions/windowsDesktop_vc120/brainCloud/brainCloud.vcxproj b/solutions/windowsDesktop_vc120/brainCloud/brainCloud.vcxproj index e44c94f1..6ab40e10 100644 --- a/solutions/windowsDesktop_vc120/brainCloud/brainCloud.vcxproj +++ b/solutions/windowsDesktop_vc120/brainCloud/brainCloud.vcxproj @@ -23,32 +23,32 @@ {CDCA39C7-E839-4EF5-BB25-5C586B7C975B} GameClientLib Win32Proj - 8.1 + 10.0 StaticLibrary - v120 + v143 Unicode true false StaticLibrary - v120 + v143 Unicode true false StaticLibrary - v120 + v143 Unicode false StaticLibrary - v120 + v143 Unicode false diff --git a/src/BrainCloudIdentity.cpp b/src/BrainCloudIdentity.cpp index 0bbcf032..8c0849ef 100644 --- a/src/BrainCloudIdentity.cpp +++ b/src/BrainCloudIdentity.cpp @@ -296,6 +296,18 @@ namespace BrainCloud m_client->sendRequest(sc); } + void BrainCloudIdentity::getIdentityStatus(AuthenticationType in_authenticationType, const char *in_externalAuthName, IServerCallback *in_callback) + { + Json::Value message; + + message[OperationParam::IdentityServiceAuthenticationType.getValue()] = in_authenticationType.toString(); + if (StringUtil::IsOptionalParameterValid(in_externalAuthName)) + message[OperationParam::AuthenticateServiceAuthenticateExternalAuthName.getValue()] = in_externalAuthName; + + ServerCall *sc = new ServerCall(ServiceName::Identity, ServiceOperation::GetIdentityStatus, message, in_callback); + m_client->sendRequest(sc); + } + void BrainCloudIdentity::getExpiredIdentities(IServerCallback * in_callback) { Json::Value message = Json::nullValue; diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index 31f9f1d6..c198d190 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -21,6 +21,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::SwitchToParentProfile = ServiceOperation("SWITCH_TO_PARENT_PROFILE"); const ServiceOperation ServiceOperation::GetChildProfiles = ServiceOperation("GET_CHILD_PROFILES"); const ServiceOperation ServiceOperation::GetIdentities = ServiceOperation("GET_IDENTITIES"); + const ServiceOperation ServiceOperation::GetIdentityStatus = ServiceOperation("GET_IDENTITY_STATUS"); const ServiceOperation ServiceOperation::GetExpiredIdentities = ServiceOperation("GET_EXPIRED_IDENTITIES"); const ServiceOperation ServiceOperation::RefreshIdentity = ServiceOperation("REFRESH_IDENTITY"); const ServiceOperation ServiceOperation::ChangeEmailIdentity = ServiceOperation("CHANGE_EMAIL_IDENTITY"); diff --git a/tests/src/TestBCIdentity.cpp b/tests/src/TestBCIdentity.cpp index 7c9b1511..6846ef04 100644 --- a/tests/src/TestBCIdentity.cpp +++ b/tests/src/TestBCIdentity.cpp @@ -93,6 +93,16 @@ TEST_F(TestBCIdentity, GetIdentities) tr.run(m_bc); } +TEST_F(TestBCIdentity, GetIdentityStatus) +{ + TestResult tr; + AuthenticationType authenticationType = AuthenticationType::Universal; + const char *externalAuthName = ""; + + m_bc->getIdentityService()->getIdentityStatus(authenticationType, externalAuthName, &tr); + tr.run(m_bc); +} + TEST_F(TestBCIdentity, GetExpiredIdentities) { TestResult tr; From 9013559b31261da0da67ef673a79bfe4a053d315 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Mon, 13 Jan 2025 13:48:14 -0500 Subject: [PATCH 04/12] implemented PROTECT_STREAM_UNTIL --- include/braincloud/BrainCloudPlaybackStream.h | 14 ++++++++++++++ include/braincloud/OperationParam.h | 1 + include/braincloud/ServiceOperation.h | 1 + src/BrainCloudPlaybackStream.cpp | 10 ++++++++++ src/OperationParam.cpp | 1 + src/ServiceOperation.cpp | 1 + tests/src/TestBCPlaybackStream.cpp | 17 +++++++++++++++++ 7 files changed, 45 insertions(+) diff --git a/include/braincloud/BrainCloudPlaybackStream.h b/include/braincloud/BrainCloudPlaybackStream.h index cbe10b03..ef05f445 100644 --- a/include/braincloud/BrainCloudPlaybackStream.h +++ b/include/braincloud/BrainCloudPlaybackStream.h @@ -102,6 +102,20 @@ namespace BrainCloud */ void getRecentStreamsForTargetPlayer(const char * in_targetPlayerId, int in_maxNumStreams, IServerCallback * in_callback = NULL); + /** + * Protects a playback stream from being purged (but not deleted) for the given number of days (from now). + * If the number of days given is less than the normal purge interval days (from createdAt), the longer protection date is applied. + * Can only be called by users involved in the playback stream. + * + * Service Name - PlaybackStream + * Service Operation - PROTECT_STREAM_UNTIL + * + * @param in_playbackStreamId Identifies the stream to protect + * @param in_numDays The number of days the stream is to be protected (from now) + * @param in_callback The method to be invoked when the server response is received + */ + void protectStreamUntil(const char *in_playbackStreamId, int in_numDays, IServerCallback *in_callback = NULL); + private: BrainCloudClient * m_client; }; diff --git a/include/braincloud/OperationParam.h b/include/braincloud/OperationParam.h index a20ef334..5c65d253 100644 --- a/include/braincloud/OperationParam.h +++ b/include/braincloud/OperationParam.h @@ -299,6 +299,7 @@ namespace BrainCloud { static const OperationParam PlaybackStreamServiceIncludeSharedData; static const OperationParam PlaybackStreamServiceEventData; static const OperationParam PlaybackStreamServiceSummary; + static const OperationParam PlaybackStreamServiceNumDays; static const OperationParam ProductServiceTransId; static const OperationParam ProductServiceLanguage; diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 93d5c960..1927559b 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -257,6 +257,7 @@ namespace BrainCloud { static const ServiceOperation GetStreamSummariesForTargetPlayer; static const ServiceOperation GetRecentStreamsForInitiatingPlayer; static const ServiceOperation GetRecentStreamsForTargetPlayer; + static const ServiceOperation ProtectStreamUntil; static const ServiceOperation GetUserInfo; diff --git a/src/BrainCloudPlaybackStream.cpp b/src/BrainCloudPlaybackStream.cpp index 17822f97..0af0ce26 100644 --- a/src/BrainCloudPlaybackStream.cpp +++ b/src/BrainCloudPlaybackStream.cpp @@ -83,4 +83,14 @@ namespace BrainCloud ServerCall * sc = new ServerCall(ServiceName::PlaybackStream, ServiceOperation::GetRecentStreamsForTargetPlayer, message, in_callback); m_client->sendRequest(sc); } + + void BrainCloudPlaybackStream::protectStreamUntil(const char *in_playbackStreamId, int in_numDays, IServerCallback *in_callback) + { + Json::Value data; + data[OperationParam::PlaybackStreamServicePlaybackStreamId.getValue()] = in_playbackStreamId; + data[OperationParam::PlaybackStreamServiceNumDays.getValue()] = in_numDays; + + ServerCall *sc = new ServerCall(ServiceName::PlaybackStream, ServiceOperation::ProtectStreamUntil, data, in_callback); + m_client->sendRequest(sc); + } } diff --git a/src/OperationParam.cpp b/src/OperationParam.cpp index e5f21f93..7db6e4c0 100644 --- a/src/OperationParam.cpp +++ b/src/OperationParam.cpp @@ -291,6 +291,7 @@ namespace BrainCloud const OperationParam OperationParam::PlaybackStreamServiceIncludeSharedData = OperationParam("includeSharedData"); const OperationParam OperationParam::PlaybackStreamServiceEventData = OperationParam("eventData"); const OperationParam OperationParam::PlaybackStreamServiceSummary = OperationParam("summary"); + const OperationParam OperationParam::PlaybackStreamServiceNumDays = OperationParam("numDays"); const OperationParam OperationParam::ProductServiceTransId = OperationParam("transId"); const OperationParam OperationParam::ProductServiceLanguage = OperationParam("language"); diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index c198d190..7704ffa3 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -247,6 +247,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::GetStreamSummariesForTargetPlayer = ServiceOperation("GET_STREAM_SUMMARIES_FOR_TARGET_PLAYER"); const ServiceOperation ServiceOperation::GetRecentStreamsForInitiatingPlayer = ServiceOperation("GET_RECENT_STREAMS_FOR_INITIATING_PLAYER"); const ServiceOperation ServiceOperation::GetRecentStreamsForTargetPlayer = ServiceOperation("GET_RECENT_STREAMS_FOR_TARGET_PLAYER"); + const ServiceOperation ServiceOperation::ProtectStreamUntil = ServiceOperation("PROTECT_STREAM_UNTIL"); const ServiceOperation ServiceOperation::GetUserInfo = ServiceOperation("GET_USER_INFO"); diff --git a/tests/src/TestBCPlaybackStream.cpp b/tests/src/TestBCPlaybackStream.cpp index ee1ba7c3..d488a4de 100644 --- a/tests/src/TestBCPlaybackStream.cpp +++ b/tests/src/TestBCPlaybackStream.cpp @@ -47,6 +47,23 @@ TEST_F(TestBCPlaybackStream, GetRecentStreamsForTargetPlayer) EndStream(); } +TEST_F(TestBCPlaybackStream, ProtectStreamUntil) +{ + TestResult tr; + const char *playbackStreamId; + int numDays = 1; + + StartStream(); + + playbackStreamId = m_streamId.c_str(); + + m_bc->getPlaybackStreamService()->protectStreamUntil(playbackStreamId, numDays, &tr); + + tr.run(m_bc); + + EndStream(); +} + TEST_F(TestBCPlaybackStream, GetRecentStreamsForInitiatingPlayer) { StartStream(); From 06a9a0fc6eb5f193741b7570e46b5de62a2717ad Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Mon, 13 Jan 2025 14:32:15 -0500 Subject: [PATCH 05/12] implemented GET_PROFILE_INFO_FOR_CREDENTIAL_IF_EXISTS --- include/braincloud/BrainCloudFriend.h | 13 +++++++++++++ include/braincloud/ServiceOperation.h | 1 + src/BrainCloudFriend.cpp | 10 ++++++++++ src/ServiceOperation.cpp | 1 + tests/src/TestBCFriend.cpp | 9 +++++++++ 5 files changed, 34 insertions(+) diff --git a/include/braincloud/BrainCloudFriend.h b/include/braincloud/BrainCloudFriend.h index 20698d93..ccbe9d12 100644 --- a/include/braincloud/BrainCloudFriend.h +++ b/include/braincloud/BrainCloudFriend.h @@ -59,6 +59,19 @@ namespace BrainCloud */ void getProfileInfoForCredential(const char * in_externalId, AuthenticationType in_authenticationType, IServerCallback * in_callback = NULL); + /** + * Retrieves profile information for the specified user. + Silently fails, if profile does not exist, just returns null and success, instead of an error. + * + * Service Name - friend + * Service Operation - GET_PROFILE_INFO_FOR_CREDENTIAL_IF_EXISTS + * + * @param in_externalId The users's external ID + * @param in_authenticationType The authentication type of the user ID + * @param in_callback Method to be invoked when the server response is received. + */ + void getProfileInfoForCredentialIfExists(const char *in_externalId, AuthenticationType in_authenticationType, IServerCallback *in_callback = NULL); + /** * Retrieves profile information for the specified external auth user. * diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 1927559b..be5ea4d8 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -91,6 +91,7 @@ namespace BrainCloud { static const ServiceOperation GetFriendProfileInfoForExternalId; static const ServiceOperation GetProfileInfoForCredential; + static const ServiceOperation GetProfileInfoForCredentialIfExists; static const ServiceOperation GetProfileInfoForExternalAuthId; static const ServiceOperation GetExternalIdForProfileId; static const ServiceOperation ReadFriendEntity; diff --git a/src/BrainCloudFriend.cpp b/src/BrainCloudFriend.cpp index c2ef7823..db58e426 100644 --- a/src/BrainCloudFriend.cpp +++ b/src/BrainCloudFriend.cpp @@ -60,6 +60,16 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudFriend::getProfileInfoForCredentialIfExists(const char *in_externalId, AuthenticationType in_authenticationType, IServerCallback *in_callback) + { + Json::Value message; + message[OperationParam::FriendServiceExternalId.getValue()] = in_externalId; + message[OperationParam::FriendServiceAuthenticationType.getValue()] = in_authenticationType.toString(); + + ServerCall *sc = new ServerCall(ServiceName::Friend, ServiceOperation::GetProfileInfoForCredentialIfExists, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudFriend::getProfileInfoForExternalAuthId(const char * in_externalId, const char * in_externalAuthType, IServerCallback * in_callback) { Json::Value message; diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index 7704ffa3..a18ee3e4 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -84,6 +84,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::GetFriendProfileInfoForExternalId = ServiceOperation("GET_FRIEND_PROFILE_INFO_FOR_EXTERNAL_ID"); const ServiceOperation ServiceOperation::GetProfileInfoForCredential = ServiceOperation("GET_PROFILE_INFO_FOR_CREDENTIAL"); + const ServiceOperation ServiceOperation::GetProfileInfoForCredentialIfExists = ServiceOperation("GET_PROFILE_INFO_FOR_CREDENTIAL_IF_EXISTS"); const ServiceOperation ServiceOperation::GetProfileInfoForExternalAuthId = ServiceOperation("GET_PROFILE_INFO_FOR_EXTERNAL_AUTH_ID"); const ServiceOperation ServiceOperation::GetExternalIdForProfileId = ServiceOperation("GET_EXTERNAL_ID_FOR_PROFILE_ID"); const ServiceOperation ServiceOperation::ReadFriendEntity = ServiceOperation("READ_FRIEND_ENTITY"); diff --git a/tests/src/TestBCFriend.cpp b/tests/src/TestBCFriend.cpp index 04100ab8..52d9307f 100644 --- a/tests/src/TestBCFriend.cpp +++ b/tests/src/TestBCFriend.cpp @@ -22,6 +22,15 @@ TEST_F(TestBCFriend, GetProfileInfoForCredential) tr.run(m_bc); } +TEST_F(TestBCFriend, GetProfileInfoForCredentialIfExists) +{ + TestResult tr; + + m_bc->getFriendService()->getProfileInfoForCredentialIfExists(GetUser(UserA)->m_id, AuthenticationType::Universal, &tr); + + tr.run(m_bc); +} + TEST_F(TestBCFriend, GetProfileInfoForExternalAuthId) { TestResult tr; From 3f84bb98bf7c40cd83f47775d4a1378de8b9dcc1 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Tue, 14 Jan 2025 09:59:32 -0500 Subject: [PATCH 06/12] corrected operation name --- include/braincloud/ServiceOperation.h | 2 +- src/BrainCloudGroup.cpp | 2 +- src/ServiceOperation.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index be5ea4d8..6ccbafb0 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -375,7 +375,7 @@ namespace BrainCloud { static const ServiceOperation RejectGroupJoinRequest; static const ServiceOperation RemoveGroupMember; static const ServiceOperation UpdateGroupData; - static const ServiceOperation UpdateGroupEntity; + static const ServiceOperation UpdateGroupEntityData; static const ServiceOperation UpdateGroupMember; static const ServiceOperation UpdateGroupName; static const ServiceOperation SetGroupOpen; diff --git a/src/BrainCloudGroup.cpp b/src/BrainCloudGroup.cpp index f013a108..8418d4ef 100644 --- a/src/BrainCloudGroup.cpp +++ b/src/BrainCloudGroup.cpp @@ -394,7 +394,7 @@ namespace BrainCloud message[OperationParam::GroupVersion.getValue()] = in_version; message[OperationParam::GroupData.getValue()] = JsonUtil::jsonStringToValue(in_jsonData); - ServerCall * sc = new ServerCall(ServiceName::Group, ServiceOperation::UpdateGroupEntity, message, in_callback); + ServerCall * sc = new ServerCall(ServiceName::Group, ServiceOperation::UpdateGroupEntityData, message, in_callback); m_client->getBrainCloudComms()->addToQueue(sc); } diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index a18ee3e4..6180bd06 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -354,7 +354,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::RejectGroupJoinRequest = ServiceOperation("REJECT_GROUP_JOIN_REQUEST"); const ServiceOperation ServiceOperation::RemoveGroupMember = ServiceOperation("REMOVE_GROUP_MEMBER"); const ServiceOperation ServiceOperation::UpdateGroupData = ServiceOperation("UPDATE_GROUP_DATA"); - const ServiceOperation ServiceOperation::UpdateGroupEntity = ServiceOperation("UPDATE_GROUP_ENTITY_DATA"); + const ServiceOperation ServiceOperation::UpdateGroupEntityData = ServiceOperation("UPDATE_GROUP_ENTITY_DATA"); const ServiceOperation ServiceOperation::UpdateGroupMember = ServiceOperation("UPDATE_GROUP_MEMBER"); const ServiceOperation ServiceOperation::UpdateGroupName = ServiceOperation("UPDATE_GROUP_NAME"); const ServiceOperation ServiceOperation::SetGroupOpen = ServiceOperation("SET_GROUP_OPEN"); From 8f67d76671bc2ab7d6d53aceb093e63539632624 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Tue, 14 Jan 2025 16:59:54 -0500 Subject: [PATCH 07/12] implemented UPDATE_GROUP_ENTITY_ACL --- include/braincloud/BrainCloudGroup.h | 13 ++++++++++ include/braincloud/ServiceOperation.h | 1 + src/BrainCloudGroup.cpp | 13 ++++++++++ src/ServiceOperation.cpp | 1 + tests/src/TestBCGroup.cpp | 36 +++++++++++++++++++++------ tests/src/TestBCGroup.h | 2 +- 6 files changed, 58 insertions(+), 8 deletions(-) diff --git a/include/braincloud/BrainCloudGroup.h b/include/braincloud/BrainCloudGroup.h index a9302a4b..c319cbf4 100644 --- a/include/braincloud/BrainCloudGroup.h +++ b/include/braincloud/BrainCloudGroup.h @@ -443,6 +443,19 @@ namespace BrainCloud */ void updateGroupData(const char* in_groupId, int32_t in_version, const std::string& in_jsonData, IServerCallback* in_callback = NULL); + /** + * Update the acl settings for a group entity, enforcing ownership. + * + * Service Name - Group + * Service Operation - UPDATE_GROUP_ENTITY_ACL + * + * @param in_groupId The id of the group + * @param in_entityId The id of the entity to update + * @param in_acl Access control list for the group entity + * @param in_callback The method to be invoked when the server response is received + */ + void updateGroupEntityAcl(const char *in_groupId, const char *in_entityId, const std::string &in_acl, IServerCallback *in_callback = NULL); + /** * Update a group entity. * diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 6ccbafb0..bdc66254 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -375,6 +375,7 @@ namespace BrainCloud { static const ServiceOperation RejectGroupJoinRequest; static const ServiceOperation RemoveGroupMember; static const ServiceOperation UpdateGroupData; + static const ServiceOperation UpdateGroupEntityAcl; static const ServiceOperation UpdateGroupEntityData; static const ServiceOperation UpdateGroupMember; static const ServiceOperation UpdateGroupName; diff --git a/src/BrainCloudGroup.cpp b/src/BrainCloudGroup.cpp index 8418d4ef..4763db77 100644 --- a/src/BrainCloudGroup.cpp +++ b/src/BrainCloudGroup.cpp @@ -386,6 +386,19 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudGroup::updateGroupEntityAcl(const char *in_groupId, const char *in_entityId, const std::string &in_acl, IServerCallback *in_callback) + { + Json::Value data; + + data[OperationParam::GroupId.getValue()] = in_groupId; + data[OperationParam::GroupEntityId.getValue()] = in_entityId; + data[OperationParam::GroupAcl.getValue()] = JsonUtil::jsonStringToValue(in_acl); + + ServerCall *sc = new ServerCall(ServiceName::Group, ServiceOperation::UpdateGroupEntityAcl, data, in_callback); + + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudGroup::updateGroupEntityData(const char * in_groupId, const char * in_entityId, int32_t in_version, const std::string& in_jsonData, IServerCallback * in_callback) { Json::Value message; diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index 6180bd06..6bf0c97e 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -354,6 +354,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::RejectGroupJoinRequest = ServiceOperation("REJECT_GROUP_JOIN_REQUEST"); const ServiceOperation ServiceOperation::RemoveGroupMember = ServiceOperation("REMOVE_GROUP_MEMBER"); const ServiceOperation ServiceOperation::UpdateGroupData = ServiceOperation("UPDATE_GROUP_DATA"); + const ServiceOperation ServiceOperation::UpdateGroupEntityAcl = ServiceOperation("UPDATE_GROUP_ENTITY_ACL"); const ServiceOperation ServiceOperation::UpdateGroupEntityData = ServiceOperation("UPDATE_GROUP_ENTITY_DATA"); const ServiceOperation ServiceOperation::UpdateGroupMember = ServiceOperation("UPDATE_GROUP_MEMBER"); const ServiceOperation ServiceOperation::UpdateGroupName = ServiceOperation("UPDATE_GROUP_NAME"); diff --git a/tests/src/TestBCGroup.cpp b/tests/src/TestBCGroup.cpp index c9103de5..129864d1 100644 --- a/tests/src/TestBCGroup.cpp +++ b/tests/src/TestBCGroup.cpp @@ -162,7 +162,7 @@ TEST_F(TestBCGroup, CreateGroupEntity) { Authenticate(UserA); CreateGroup(); - CreateGroupEntity(); + CreateGroupEntity(false); DeleteGroup(); Logout(); } @@ -180,7 +180,7 @@ TEST_F(TestBCGroup, DeleteGroupEntity) { Authenticate(UserA); CreateGroup(); - std::string entityId = CreateGroupEntity(); + std::string entityId = CreateGroupEntity(false); TestResult tr; m_bc->getGroupService()->deleteGroupEntity( @@ -260,7 +260,7 @@ TEST_F(TestBCGroup, IncrementGroupEntityData) { Authenticate(UserA); CreateGroup(); - std::string id = CreateGroupEntity(); + std::string id = CreateGroupEntity(false); TestResult tr; m_bc->getGroupService()->incrementGroupEntityData( @@ -454,7 +454,7 @@ TEST_F(TestBCGroup, ReadGroupEntity) { Authenticate(UserA); CreateGroup(); - std::string id = CreateGroupEntity(); + std::string id = CreateGroupEntity(false); TestResult tr; m_bc->getGroupService()->readGroupEntity( @@ -571,11 +571,33 @@ TEST_F(TestBCGroup, UpdateGroupData) Logout(); } +TEST_F(TestBCGroup, UpdateGroupEntityAcl) +{ + TestResult tr; + const char *groupId; + const char *entityId; + const char *acl = _testAcl; + + Authenticate(UserA); + CreateGroup(); + + std::string _entityId = CreateGroupEntity(true); + groupId = _groupId.c_str(); + entityId = _entityId.c_str(); + + m_bc->getGroupService()->updateGroupEntityAcl(groupId, entityId, acl, &tr); + + tr.run(m_bc); + + DeleteGroup(); + Logout(); +} + TEST_F(TestBCGroup, UpdateGroupEntity) { Authenticate(UserA); CreateGroup(); - std::string id = CreateGroupEntity(); + std::string id = CreateGroupEntity(false); TestResult tr; m_bc->getGroupService()->updateGroupEntityData( @@ -737,7 +759,7 @@ void TestBCGroup::CreateGroupWithSummaryData(bool isOpen) _groupId = tr.m_response["data"]["groupId"].asString(); } -std::string TestBCGroup::CreateGroupEntity() +std::string TestBCGroup::CreateGroupEntity(bool isOwnedByGroupMember) { TestResult tr; Json::Value entityData; @@ -749,7 +771,7 @@ std::string TestBCGroup::CreateGroupEntity() std::string entityId; Json::FastWriter fw; - m_bc->getGroupService()->createGroupEntity(_groupId.c_str(), _entityType, false, fw.write(entityAcl), fw.write(entityData), &tr); + m_bc->getGroupService()->createGroupEntity(_groupId.c_str(), _entityType, isOwnedByGroupMember, fw.write(entityAcl), fw.write(entityData), &tr); if (tr.run(m_bc)) { return tr.m_response["data"]["entityId"].asString(); diff --git a/tests/src/TestBCGroup.h b/tests/src/TestBCGroup.h index e9cd8aea..91f58a43 100644 --- a/tests/src/TestBCGroup.h +++ b/tests/src/TestBCGroup.h @@ -21,7 +21,7 @@ class TestBCGroup : public TestFixtureBase void Authenticate(Users user); void CreateGroup(bool isOpen = false); void CreateGroupWithSummaryData(bool isOpen = false); - std::string CreateGroupEntity(); + std::string CreateGroupEntity(bool isOwnedByGroupMember); void DeleteGroup(); std::string CreateContext(int numItemsPerPage, int startPage, std::string searchKey, std::string searchValue); From b66620744b378943d40c01ec723f07fbe22f6c4d Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Fri, 17 Jan 2025 15:33:09 -0500 Subject: [PATCH 08/12] implemented UPDATE_GROUP_ACL --- include/braincloud/BrainCloudGroup.h | 12 ++++++++++++ include/braincloud/ServiceOperation.h | 1 + src/BrainCloudGroup.cpp | 11 +++++++++++ src/ServiceOperation.cpp | 1 + tests/src/TestBCGroup.cpp | 18 ++++++++++++++++++ 5 files changed, 43 insertions(+) diff --git a/include/braincloud/BrainCloudGroup.h b/include/braincloud/BrainCloudGroup.h index c319cbf4..c74b2d91 100644 --- a/include/braincloud/BrainCloudGroup.h +++ b/include/braincloud/BrainCloudGroup.h @@ -508,6 +508,18 @@ namespace BrainCloud */ void setGroupOpen(const char* in_groupId, bool in_isOpenGroup, IServerCallback *callback = nullptr); + /** + * Set a group's access conditions. + * + * Service Name - Group + * Service Operation - UPDATE_GROUP_ACL + * + * @param groupId ID of the group + * @param acl The group's access control list. A null ACL implies default + * @param callback The method to be invoked when the server response is received + */ + void updateGroupAcl(const char *in_groupId, const std::string &in_acl, IServerCallback *in_callback = NULL); + /** * Update a group's summary data * diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index bdc66254..3cfff6e6 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -380,6 +380,7 @@ namespace BrainCloud { static const ServiceOperation UpdateGroupMember; static const ServiceOperation UpdateGroupName; static const ServiceOperation SetGroupOpen; + static const ServiceOperation UpdateGroupAcl; static const ServiceOperation GetRandomGroupsMatching; static const ServiceOperation UpdateGroupSummaryData; diff --git a/src/BrainCloudGroup.cpp b/src/BrainCloudGroup.cpp index 4763db77..9c7ec339 100644 --- a/src/BrainCloudGroup.cpp +++ b/src/BrainCloudGroup.cpp @@ -445,6 +445,17 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudGroup::updateGroupAcl(const char *in_groupId, const std::string &in_acl, IServerCallback *in_callback) + { + Json::Value data; + + data[OperationParam::GroupId.getValue()] = in_groupId; + data[OperationParam::GroupAcl.getValue()] = JsonUtil::jsonStringToValue(in_acl); + + ServerCall *sc = new ServerCall(ServiceName::Group, ServiceOperation::UpdateGroupAcl, data, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudGroup::updateGroupSummaryData(const char* in_groupId, int in_version, const std::string& in_jsonSummaryData, IServerCallback *in_callback) { Json::Value message; diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index 6bf0c97e..3c75adbc 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -359,6 +359,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::UpdateGroupMember = ServiceOperation("UPDATE_GROUP_MEMBER"); const ServiceOperation ServiceOperation::UpdateGroupName = ServiceOperation("UPDATE_GROUP_NAME"); const ServiceOperation ServiceOperation::SetGroupOpen = ServiceOperation("SET_GROUP_OPEN"); + const ServiceOperation ServiceOperation::UpdateGroupAcl = ServiceOperation("UPDATE_GROUP_ACL"); const ServiceOperation ServiceOperation::GetRandomGroupsMatching = ServiceOperation("GET_RANDOM_GROUPS_MATCHING"); const ServiceOperation ServiceOperation::UpdateGroupSummaryData = ServiceOperation("UPDATE_GROUP_SUMMARY_DATA"); diff --git a/tests/src/TestBCGroup.cpp b/tests/src/TestBCGroup.cpp index 129864d1..02dead56 100644 --- a/tests/src/TestBCGroup.cpp +++ b/tests/src/TestBCGroup.cpp @@ -662,6 +662,24 @@ TEST_F(TestBCGroup, SetGroupOpen) Logout(); } +TEST_F(TestBCGroup, UpdateGroupAcl){ + TestResult tr; + const char *groupId; + const char *acl = _testAcl; + + Authenticate(UserA); + CreateGroup(); + + groupId = _groupId.c_str(); + + m_bc->getGroupService()->updateGroupAcl(groupId, acl, &tr); + + tr.run(m_bc); + + DeleteGroup(); + Logout(); +} + TEST_F(TestBCGroup, UpdateGroupSummaryData) { Authenticate(UserA); From a7f65184996f790cedc5cf048efa3dbe992db125 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Fri, 24 Jan 2025 10:01:01 -0500 Subject: [PATCH 09/12] implemented GET_PROFILE_INFO_FOR_EXTERNAL_AUTH_ID_IF_EXISTS --- include/braincloud/BrainCloudFriend.h | 12 ++++++++++++ include/braincloud/ServiceOperation.h | 1 + src/BrainCloudFriend.cpp | 14 ++++++++++++-- src/ServiceOperation.cpp | 1 + tests/src/TestBCFriend.cpp | 7 +++++++ 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/include/braincloud/BrainCloudFriend.h b/include/braincloud/BrainCloudFriend.h index ccbe9d12..0904dbd1 100644 --- a/include/braincloud/BrainCloudFriend.h +++ b/include/braincloud/BrainCloudFriend.h @@ -84,6 +84,18 @@ namespace BrainCloud */ void getProfileInfoForExternalAuthId(const char * in_externalId, const char * in_externalAuthType, IServerCallback * in_callback = NULL); + /** + * Retrieves profile information for the specified user. Silently fails, if profile does not exist, just returns null and success, instead of an error. + * + * Service Name - Friend + * Service Operation - GET_PROFILE_INFO_FOR_EXTERNAL_AUTH_ID_IF_EXISTS + * + * @param in_externalId External ID of the friend to find + * @param in_externalAuthType The external authentication type used for this friend's external ID + * @param in_callback Method to be invoked when the server response is received. + */ + void getProfileInfoForExternalAuthIdIfExists(const char *in_externalId, const char *in_externalAuthType, IServerCallback *in_callback = NULL); + /** * Retrieves the external ID for the specified user profile ID on the specified social platform. * diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 3cfff6e6..5e5b678c 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -93,6 +93,7 @@ namespace BrainCloud { static const ServiceOperation GetProfileInfoForCredential; static const ServiceOperation GetProfileInfoForCredentialIfExists; static const ServiceOperation GetProfileInfoForExternalAuthId; + static const ServiceOperation GetProfileInfoForExternalAuthIdIfExists; static const ServiceOperation GetExternalIdForProfileId; static const ServiceOperation ReadFriendEntity; static const ServiceOperation ReadFriendsEntities; diff --git a/src/BrainCloudFriend.cpp b/src/BrainCloudFriend.cpp index db58e426..fdeeb28c 100644 --- a/src/BrainCloudFriend.cpp +++ b/src/BrainCloudFriend.cpp @@ -70,13 +70,23 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } - void BrainCloudFriend::getProfileInfoForExternalAuthId(const char * in_externalId, const char * in_externalAuthType, IServerCallback * in_callback) + void BrainCloudFriend::getProfileInfoForExternalAuthId(const char *in_externalId, const char *in_externalAuthType, IServerCallback *in_callback) { Json::Value message; message[OperationParam::FriendServiceExternalId.getValue()] = in_externalId; message[OperationParam::ExternalAuthType.getValue()] = in_externalAuthType; - ServerCall * sc = new ServerCall(ServiceName::Friend, ServiceOperation::GetProfileInfoForExternalAuthId, message, in_callback); + ServerCall *sc = new ServerCall(ServiceName::Friend, ServiceOperation::GetProfileInfoForExternalAuthId, message, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + + void BrainCloudFriend::getProfileInfoForExternalAuthIdIfExists(const char * in_externalId, const char * in_externalAuthType, IServerCallback * in_callback) + { + Json::Value message; + message[OperationParam::FriendServiceExternalId.getValue()] = in_externalId; + message[OperationParam::ExternalAuthType.getValue()] = in_externalAuthType; + + ServerCall * sc = new ServerCall(ServiceName::Friend, ServiceOperation::GetProfileInfoForExternalAuthIdIfExists, message, in_callback); m_client->getBrainCloudComms()->addToQueue(sc); } diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index 3c75adbc..9aa4fec6 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -86,6 +86,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::GetProfileInfoForCredential = ServiceOperation("GET_PROFILE_INFO_FOR_CREDENTIAL"); const ServiceOperation ServiceOperation::GetProfileInfoForCredentialIfExists = ServiceOperation("GET_PROFILE_INFO_FOR_CREDENTIAL_IF_EXISTS"); const ServiceOperation ServiceOperation::GetProfileInfoForExternalAuthId = ServiceOperation("GET_PROFILE_INFO_FOR_EXTERNAL_AUTH_ID"); + const ServiceOperation ServiceOperation::GetProfileInfoForExternalAuthIdIfExists = ServiceOperation("GET_PROFILE_INFO_FOR_EXTERNAL_AUTH_ID_IF_EXISTS"); const ServiceOperation ServiceOperation::GetExternalIdForProfileId = ServiceOperation("GET_EXTERNAL_ID_FOR_PROFILE_ID"); const ServiceOperation ServiceOperation::ReadFriendEntity = ServiceOperation("READ_FRIEND_ENTITY"); const ServiceOperation ServiceOperation::ReadFriendsEntities = ServiceOperation("READ_FRIENDS_ENTITIES"); diff --git a/tests/src/TestBCFriend.cpp b/tests/src/TestBCFriend.cpp index 52d9307f..5ee90f39 100644 --- a/tests/src/TestBCFriend.cpp +++ b/tests/src/TestBCFriend.cpp @@ -38,6 +38,13 @@ TEST_F(TestBCFriend, GetProfileInfoForExternalAuthId) tr.runExpectFail(m_bc, 400, INVALID_EXT_AUTH_TYPE); } +TEST_F(TestBCFriend, GetProfileInfoForExternalAuthIdIfExists) +{ + TestResult tr; + m_bc->getFriendService()->getProfileInfoForExternalAuthIdIfExists(GetUser(UserA)->m_id, "testExternal", &tr); + tr.run(m_bc); +} + TEST_F(TestBCFriend, GetExternalIdForProfileId) { TestResult tr; From 4431a10ecaaf240754391c4f417b9f712ed47690 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Fri, 24 Jan 2025 12:31:40 -0500 Subject: [PATCH 10/12] implemented POST_GROUP_SCORE_DYNAMIC_USING_CONFIG & SEND_ADVANCED_EMAIL_BY_ADDRESSES --- include/braincloud/BrainCloudMail.h | 13 +++++++++++++ .../braincloud/BrainCloudSocialLeaderboard.h | 14 ++++++++++++++ include/braincloud/OperationParam.h | 1 + include/braincloud/ServiceOperation.h | 2 ++ src/BrainCloudMail.cpp | 14 ++++++++++++++ src/BrainCloudSocialLeaderboard.cpp | 13 +++++++++++++ src/OperationParam.cpp | 1 + src/ServiceOperation.cpp | 2 ++ tests/src/TestBCMail.cpp | 19 +++++++++++++++++++ tests/src/TestBCSocialLeaderboard.cpp | 17 +++++++++++++++++ 10 files changed, 96 insertions(+) diff --git a/include/braincloud/BrainCloudMail.h b/include/braincloud/BrainCloudMail.h index 9f80b186..740f8d6f 100644 --- a/include/braincloud/BrainCloudMail.h +++ b/include/braincloud/BrainCloudMail.h @@ -8,6 +8,7 @@ #include +#include #include "braincloud/IServerCallback.h" @@ -60,6 +61,18 @@ namespace BrainCloud */ void sendAdvancedEmailByAddress(const char * in_emailAddress, const std::string & in_jsonServiceParams, IServerCallback * in_callback = NULL); + /** + * Sends an advanced email to the specified email addresses. + * + * Service Name - Mail + * Service Operation - SEND_ADVANCED_EMAIL_BY_ADDRESSES + * + * @param in_emailAddress The list of addresses to send the email to + * @param in_serviceParams Set of parameters dependant on the mail service configured + * @param in_callback The method to be invoked when the server response is received + */ + void sendAdvancedEmailByAddresses(const std::vector &in_emailAddresses, const std::string &in_serviceParams, IServerCallback *in_callback = NULL); + private: BrainCloudClient * m_client; }; diff --git a/include/braincloud/BrainCloudSocialLeaderboard.h b/include/braincloud/BrainCloudSocialLeaderboard.h index 62f9b992..ca285e87 100644 --- a/include/braincloud/BrainCloudSocialLeaderboard.h +++ b/include/braincloud/BrainCloudSocialLeaderboard.h @@ -772,6 +772,20 @@ namespace BrainCloud void postScoreToDynamicGroupLeaderboardDaysUTC(const char * in_leaderboardId, const char * in_groupId, int32_t in_score, const std::string& in_jsonData, const char * in_leaderboardType, int64_t in_rotationResetUTC, int32_t in_retainedCount, int32_t in_numDaysToRotate, IServerCallback * in_callback = NULL); + /** + * Post the group's score to the given social leaderboard, dynamically creating the group 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 - Leaderboard + * Service Operation - POST_GROUP_SCORE_DYNAMIC_USING_CONFIG + * + * @param in_leaderboard The leaderboard to post to + * @param in_groupId The ID of the group + * @param in_score A score to post + * @param in_configJson Configuration for the leaderboard if it does not exist yet, specified as JSON object. The supporting configuration fields are listed in the following table of configJson fields. + * @param in_callback The method to be invoked when the server response is received + */ + void postScoreToDynamicGroupLeaderboardUsingConfig(const char *in_leaderboardId, const char *in_groupId, int32_t in_score, const std::string &in_scoreData, const std::string &in_configJson, IServerCallback *in_callback); /** * Removes score from group leaderboard diff --git a/include/braincloud/OperationParam.h b/include/braincloud/OperationParam.h index 5c65d253..1378c5be 100644 --- a/include/braincloud/OperationParam.h +++ b/include/braincloud/OperationParam.h @@ -404,6 +404,7 @@ namespace BrainCloud { static const OperationParam FieldAuthenticationToken; static const OperationParam EmailAddress; + static const OperationParam EmailAddresses; static const OperationParam Subject; static const OperationParam Body; static const OperationParam ServiceParams; diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index 5e5b678c..f0d86957 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -132,6 +132,7 @@ namespace BrainCloud { static const ServiceOperation GetGroupSocialLeaderboardByVersion; static const ServiceOperation PostScoreToGroupLeaderboard; static const ServiceOperation PostScoreToDynamicGroupLeaderboard; + static const ServiceOperation PostScoreToDynamicGroupLeaderboardUsingConfig; static const ServiceOperation RemoveGroupScore; static const ServiceOperation GetGroupLeaderboardView; static const ServiceOperation GetSummaryDataForProfileId; @@ -389,6 +390,7 @@ namespace BrainCloud { static const ServiceOperation SendBasicEmail; static const ServiceOperation SendAdvancedEmail; static const ServiceOperation SendAdvancedEmailByAddress; + static const ServiceOperation SendAdvancedEmailByAddresses; //tournament static const ServiceOperation GetTournamentStatus; diff --git a/src/BrainCloudMail.cpp b/src/BrainCloudMail.cpp index 585627bf..6e2d493c 100644 --- a/src/BrainCloudMail.cpp +++ b/src/BrainCloudMail.cpp @@ -9,6 +9,7 @@ #include "braincloud/ServiceOperation.h" #include "braincloud/OperationParam.h" #include "json/json.h" +#include #include "braincloud/internal/StringUtil.h" #include "braincloud/internal/JsonUtil.h" @@ -51,4 +52,17 @@ namespace BrainCloud ServerCall * sc = new ServerCall(ServiceName::Mail, ServiceOperation::SendAdvancedEmailByAddress, message, in_callback); m_client->sendRequest(sc); } + + void BrainCloudMail::sendAdvancedEmailByAddresses(const std::vector &in_emailAddresses, const std::string &in_serviceParams, IServerCallback *in_callback) + { + Json::Value message; + Json::Value emailAddresses = JsonUtil::stringVectorToJson(in_emailAddresses); + message[OperationParam::EmailAddresses.getValue()] = emailAddresses; + + Json::Value jsonData = JsonUtil::jsonStringToValue(in_serviceParams); + message[OperationParam::ServiceParams.getValue()] = jsonData; + + ServerCall *sc = new ServerCall(ServiceName::Mail, ServiceOperation::SendAdvancedEmailByAddresses, message, in_callback); + m_client->sendRequest(sc); + } } \ No newline at end of file diff --git a/src/BrainCloudSocialLeaderboard.cpp b/src/BrainCloudSocialLeaderboard.cpp index 62e36c4b..ed66cffe 100644 --- a/src/BrainCloudSocialLeaderboard.cpp +++ b/src/BrainCloudSocialLeaderboard.cpp @@ -325,6 +325,19 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudSocialLeaderboard::postScoreToDynamicGroupLeaderboardUsingConfig(const char *in_leaderboardId, const char *in_groupId, int32_t in_score, const std::string &in_scoreData, const std::string &in_configJson, IServerCallback *in_callback) + { + Json::Value data; + data[OperationParam::SocialLeaderboardServiceLeaderboardId.getValue()] = in_leaderboardId; + data[OperationParam::GroupId.getValue()] = in_groupId; + data[OperationParam::SocialLeaderboardServiceScore.getValue()] = (Json::Int64) in_score; + data[OperationParam::SocialLeaderboardServiceScoreData.getValue()] = JsonUtil::jsonStringToValue(in_scoreData); + data[OperationParam::SocialLeaderboardServiceConfigJson.getValue()] = JsonUtil::jsonStringToValue(in_configJson); + + ServerCall *sc = new ServerCall(ServiceName::Leaderboard, ServiceOperation::PostScoreToDynamicGroupLeaderboardUsingConfig, data, in_callback); + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudSocialLeaderboard::removePlayerScore(const char * in_leaderboardId, int32_t in_versionId, IServerCallback * in_callback) { Json::Value message; diff --git a/src/OperationParam.cpp b/src/OperationParam.cpp index 7db6e4c0..c48cfbfe 100644 --- a/src/OperationParam.cpp +++ b/src/OperationParam.cpp @@ -398,6 +398,7 @@ namespace BrainCloud //mail const OperationParam OperationParam::EmailAddress = OperationParam("emailAddress"); + const OperationParam OperationParam::EmailAddresses = OperationParam("emailAddresses"); const OperationParam OperationParam::Subject = OperationParam("subject"); const OperationParam OperationParam::Body = OperationParam("body"); const OperationParam OperationParam::ServiceParams = OperationParam("serviceParams"); diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index 9aa4fec6..214eac23 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -125,6 +125,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::GetGroupSocialLeaderboardByVersion = ServiceOperation("GET_GROUP_SOCIAL_LEADERBOARD_BY_VERSION"); const ServiceOperation ServiceOperation::PostScoreToGroupLeaderboard = ServiceOperation("POST_GROUP_SCORE"); const ServiceOperation ServiceOperation::PostScoreToDynamicGroupLeaderboard = ServiceOperation("POST_GROUP_SCORE_DYNAMIC"); + const ServiceOperation ServiceOperation::PostScoreToDynamicGroupLeaderboardUsingConfig = ServiceOperation("POST_GROUP_SCORE_DYNAMIC_USING_CONFIG"); const ServiceOperation ServiceOperation::RemoveGroupScore = ServiceOperation("REMOVE_GROUP_SCORE"); const ServiceOperation ServiceOperation::GetGroupLeaderboardView = ServiceOperation("GET_GROUP_LEADERBOARD_VIEW"); const ServiceOperation ServiceOperation::GetSummaryDataForProfileId = ServiceOperation("GET_SUMMARY_DATA_FOR_PROFILE_ID"); @@ -382,6 +383,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::SendBasicEmail = ServiceOperation("SEND_BASIC_EMAIL"); const ServiceOperation ServiceOperation::SendAdvancedEmail = ServiceOperation("SEND_ADVANCED_EMAIL"); const ServiceOperation ServiceOperation::SendAdvancedEmailByAddress = ServiceOperation("SEND_ADVANCED_EMAIL_BY_ADDRESS"); + const ServiceOperation ServiceOperation::SendAdvancedEmailByAddresses = ServiceOperation("SEND_ADVANCED_EMAIL_BY_ADDRESSES"); //rtt registration const ServiceOperation ServiceOperation::RequestClientConnection = ServiceOperation("REQUEST_CLIENT_CONNECTION"); diff --git a/tests/src/TestBCMail.cpp b/tests/src/TestBCMail.cpp index 00291469..b742c69e 100644 --- a/tests/src/TestBCMail.cpp +++ b/tests/src/TestBCMail.cpp @@ -3,6 +3,7 @@ #include "TestResult.h" #include "TestBCMail.h" #include +#include using namespace BrainCloud; @@ -46,4 +47,22 @@ TEST_F(TestBCMail, SendAdvancedEmailByAddress) m_bc->getMailService()->sendAdvancedEmailByAddress(GetUser(UserB)->m_email, dataStr, &tr); tr.run(m_bc); +} + +TEST_F(TestBCMail, SendAdvancedEmailByAddresses) +{ + TestResult tr; + Json::FastWriter fw; + std::vector emailAddresses; + emailAddresses.push_back("test@email.com"); + emailAddresses.push_back("anothertest@email.com"); + Json::Value data; + data["subject"] = "Test Subject"; + data["body"] = "Test body"; + data["fromAddress"] = "testemail@email.com"; + data["fromName"] = "James Reece"; + std::string dataStr = fw.write(data); + + m_bc->getMailService()->sendAdvancedEmailByAddresses(emailAddresses, dataStr, &tr); + tr.run(m_bc); } \ No newline at end of file diff --git a/tests/src/TestBCSocialLeaderboard.cpp b/tests/src/TestBCSocialLeaderboard.cpp index 5bb696bd..ee6fa4e3 100644 --- a/tests/src/TestBCSocialLeaderboard.cpp +++ b/tests/src/TestBCSocialLeaderboard.cpp @@ -491,6 +491,23 @@ TEST_F(TestBCSocialLeaderboard, PostScoreToDynamicGroupLeaderboardDaysUTC) tr.run(m_bc); } +TEST_F(TestBCSocialLeaderboard, PostScoreToDynamicGroupLeaderboardUsingConfig) +{ + TestResult tr; + std::string groupId; + Json::FastWriter fw; + Json::Value jsonData; + jsonData["testKey"] = "TestValue"; + + m_bc->getGroupService()->createGroup("testGroup", "test", false, "", "", "", "", &tr); + tr.run(m_bc); + + groupId = tr.m_response["data"]["groupId"].asString(); + + m_bc->getLeaderboardService()->postScoreToDynamicGroupLeaderboardUsingConfig(GROUP_LB_ID, groupId.c_str(), 99, "{\"nickname\": \"CPP-Tester\"}", fw.write(jsonData), &tr); + tr.run(m_bc); +} + TEST_F(TestBCSocialLeaderboard, RemoveGroupScore) { TestResult tr; From 2cae3746bf7141676bd242643cc4305148cd39ec Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Fri, 24 Jan 2025 14:38:38 -0500 Subject: [PATCH 11/12] implemented SEND_EVENT_TO_PROFILES --- include/braincloud/BrainCloudEvent.h | 13 +++++++++++++ include/braincloud/OperationParam.h | 1 + include/braincloud/ServiceOperation.h | 1 + src/BrainCloudEvent.cpp | 13 +++++++++++++ src/OperationParam.cpp | 1 + src/ServiceOperation.cpp | 1 + tests/src/TestBCEvent.cpp | 21 +++++++++++++++++++++ 7 files changed, 51 insertions(+) diff --git a/include/braincloud/BrainCloudEvent.h b/include/braincloud/BrainCloudEvent.h index 15665ae0..997e11e8 100644 --- a/include/braincloud/BrainCloudEvent.h +++ b/include/braincloud/BrainCloudEvent.h @@ -41,6 +41,19 @@ namespace BrainCloud */ void sendEvent(const char * in_toProfileId, const char * in_eventType, const std::string& in_jsonEventData, IServerCallback * in_callback = NULL); + /** + * Sends an event to multiple users with the attached json data. + * + * Service Name - Event + * Service Operation - SEND_EVENT_TO_PROFILES + * + * @param in_toIds The profile ids of the users to send the event + * @param in_eventType The user-defined type of the event + * @param in_eventData 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 sendEventToProfiles(const std::vector &in_toIds, const char *in_eventType, const std::string &in_eventData, IServerCallback *in_callback); + /** * Updates an event in the user's incoming event mailbox. * diff --git a/include/braincloud/OperationParam.h b/include/braincloud/OperationParam.h index 1378c5be..385aff69 100644 --- a/include/braincloud/OperationParam.h +++ b/include/braincloud/OperationParam.h @@ -125,6 +125,7 @@ namespace BrainCloud { // Event Service - Send Params static const OperationParam EventServiceSendToId; + static const OperationParam EventServiceToIds; static const OperationParam EventServiceSendEventType; static const OperationParam EventServiceSendEventId; static const OperationParam EventServiceSendEventData; diff --git a/include/braincloud/ServiceOperation.h b/include/braincloud/ServiceOperation.h index f0d86957..20ea8bfd 100644 --- a/include/braincloud/ServiceOperation.h +++ b/include/braincloud/ServiceOperation.h @@ -169,6 +169,7 @@ namespace BrainCloud { static const ServiceOperation ResetParentVC; static const ServiceOperation Send; + static const ServiceOperation SendEventToProfiles; static const ServiceOperation UpdateEventData; static const ServiceOperation UpdateEventDataIfExists; static const ServiceOperation DeleteSent; diff --git a/src/BrainCloudEvent.cpp b/src/BrainCloudEvent.cpp index d25c064b..2be11187 100644 --- a/src/BrainCloudEvent.cpp +++ b/src/BrainCloudEvent.cpp @@ -108,6 +108,19 @@ namespace BrainCloud m_client->getBrainCloudComms()->addToQueue(sc); } + void BrainCloudEvent::sendEventToProfiles(const std::vector &in_toIds, const char *in_eventType, const std::string &in_eventData, IServerCallback *in_callback) + { + Json::Value data; + Json::Value toIds = JsonUtil::stringVectorToJson(in_toIds); + data[OperationParam::EventServiceToIds.getValue()] = toIds; + data[OperationParam::EventServiceSendEventType.getValue()] = in_eventType; + data[OperationParam::EventServiceSendEventData.getValue()] = JsonUtil::jsonStringToValue(in_eventData); + + ServerCall *sc = new ServerCall(ServiceName::Event, ServiceOperation::SendEventToProfiles, data, in_callback); + + m_client->getBrainCloudComms()->addToQueue(sc); + } + void BrainCloudEvent::updateIncomingEventData(const char * in_fromPlayerId, uint64_t in_eventId, const std::string& in_jsonEventData, IServerCallback * in_callback) { Json::Value message; diff --git a/src/OperationParam.cpp b/src/OperationParam.cpp index c48cfbfe..7513a41d 100644 --- a/src/OperationParam.cpp +++ b/src/OperationParam.cpp @@ -116,6 +116,7 @@ namespace BrainCloud // Event Service - Send Params const OperationParam OperationParam::EventServiceSendToId = OperationParam("toId"); + const OperationParam OperationParam::EventServiceToIds = OperationParam("toIds"); const OperationParam OperationParam::EventServiceSendEventType = OperationParam("eventType"); const OperationParam OperationParam::EventServiceSendEventId = OperationParam("eventId"); const OperationParam OperationParam::EventServiceSendEventData = OperationParam("eventData"); diff --git a/src/ServiceOperation.cpp b/src/ServiceOperation.cpp index 214eac23..16f9dbdd 100644 --- a/src/ServiceOperation.cpp +++ b/src/ServiceOperation.cpp @@ -162,6 +162,7 @@ namespace BrainCloud const ServiceOperation ServiceOperation::ResetParentVC = ServiceOperation("RESET_PARENT_VC"); const ServiceOperation ServiceOperation::Send = ServiceOperation("SEND"); + const ServiceOperation ServiceOperation::SendEventToProfiles = ServiceOperation("SEND_EVENT_TO_PROFILES"); 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"); diff --git a/tests/src/TestBCEvent.cpp b/tests/src/TestBCEvent.cpp index 2d4d3aeb..eeb7293a 100644 --- a/tests/src/TestBCEvent.cpp +++ b/tests/src/TestBCEvent.cpp @@ -18,6 +18,27 @@ TEST_F(TestBCEvent, Send) m_bc->deregisterEventCallback(); } +TEST_F(TestBCEvent, SendEventToProfiles) +{ + m_didCallback = false; + m_bc->registerEventCallback(this); + + std::vector toIds; + toIds.push_back(GetUser(UserA)->m_profileId); + + TestResult tr; + Json::FastWriter fw; + Json::Value eventData; + eventData[m_eventDataKey] = "testEventValue"; + + m_bc->getEventService()->sendEventToProfiles(toIds, m_eventType, fw.write(eventData).c_str(), &tr); + tr.run(m_bc); + m_eventId = tr.m_response["data"]["evId"].asString(); + + DeleteIncomingMessage(); + m_bc->deregisterEventCallback(); +} + TEST_F(TestBCEvent, DeleteIncoming) { SendDefaultMessage(); From 9039f020ca0e3b7da70f4838709164433b96ce33 Mon Sep 17 00:00:00 2001 From: bitheadCody Date: Fri, 24 Jan 2025 16:34:14 -0500 Subject: [PATCH 12/12] incremented version for 5.5 --- BrainCloudCpp.podspec | 2 +- src/BrainCloudClient.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BrainCloudCpp.podspec b/BrainCloudCpp.podspec index e0325a83..e0789e5f 100644 --- a/BrainCloudCpp.podspec +++ b/BrainCloudCpp.podspec @@ -11,7 +11,7 @@ Pod::Spec.new do |s| s.name = "BrainCloudCpp" - s.version = "5.4.1" + s.version = "5.5.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 77a6e223..ade1a060 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.4.1"; + std::string BrainCloudClient::s_brainCloudClientVersion = "5.5.0"; const char* BC_SERVER_URL = "https://api.braincloudservers.com/dispatcherv2"; /**