diff --git a/.gitignore b/.gitignore
index 4c55efd..3a285de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -334,3 +334,8 @@ ASALocalRun/
coveragetool
reports/
*.cobertura.xml
+
+# Ignore files used to store 'git diff' and 'pf-gensdk' output
+# Used in template-update-check.yml
+git_diff_output.txt
+gen.txt
diff --git a/External/libHttpClient b/External/libHttpClient
index 149bfeb..a21681e 160000
--- a/External/libHttpClient
+++ b/External/libHttpClient
@@ -1 +1 @@
-Subproject commit 149bfeb9de0cfb0679545596b9a8cf67920eff7a
+Subproject commit a21681e91d945a8d95c97021b512da4c8d112686
diff --git a/Source/PlayFabCore/Include/Generated/playfab/core/PFErrors.h b/Source/PlayFabCore/Include/Generated/playfab/core/PFErrors.h
index 6129893..6034fa7 100644
--- a/Source/PlayFabCore/Include/Generated/playfab/core/PFErrors.h
+++ b/Source/PlayFabCore/Include/Generated/playfab/core/PFErrors.h
@@ -574,192 +574,193 @@ extern "C"
#define E_PF_INVALID_SERVICE_CONFIGURATION MAKE_E_HC(0x5642L) // 0x89235642
#define E_PF_INVALID_NAMESPACE_MISMATCH MAKE_E_HC(0x5643L) // 0x89235643
#define E_PF_LEADERBOARD_COLUMN_LENGTH_MISMATCH MAKE_E_HC(0x5644L) // 0x89235644
-#define E_PF_MATCHMAKING_ENTITY_INVALID MAKE_E_HC(0x5645L) // 0x89235645
-#define E_PF_MATCHMAKING_PLAYER_ATTRIBUTES_INVALID MAKE_E_HC(0x5646L) // 0x89235646
-#define E_PF_MATCHMAKING_QUEUE_NOT_FOUND MAKE_E_HC(0x5647L) // 0x89235647
-#define E_PF_MATCHMAKING_MATCH_NOT_FOUND MAKE_E_HC(0x5648L) // 0x89235648
-#define E_PF_MATCHMAKING_TICKET_NOT_FOUND MAKE_E_HC(0x5649L) // 0x89235649
-#define E_PF_MATCHMAKING_ALREADY_JOINED_TICKET MAKE_E_HC(0x564aL) // 0x8923564a
-#define E_PF_MATCHMAKING_TICKET_ALREADY_COMPLETED MAKE_E_HC(0x564bL) // 0x8923564b
-#define E_PF_MATCHMAKING_QUEUE_CONFIG_INVALID MAKE_E_HC(0x564cL) // 0x8923564c
-#define E_PF_MATCHMAKING_MEMBER_PROFILE_INVALID MAKE_E_HC(0x564dL) // 0x8923564d
-#define E_PF_NINTENDO_SWITCH_DEVICE_ID_NOT_LINKED MAKE_E_HC(0x564eL) // 0x8923564e
-#define E_PF_MATCHMAKING_NOT_ENABLED MAKE_E_HC(0x564fL) // 0x8923564f
-#define E_PF_MATCHMAKING_PLAYER_ATTRIBUTES_TOO_LARGE MAKE_E_HC(0x5650L) // 0x89235650
-#define E_PF_MATCHMAKING_NUMBER_OF_PLAYERS_IN_TICKET_TOO_LARGE MAKE_E_HC(0x5651L) // 0x89235651
-#define E_PF_MATCHMAKING_ATTRIBUTE_INVALID MAKE_E_HC(0x5652L) // 0x89235652
-#define E_PF_MATCHMAKING_PLAYER_HAS_NOT_JOINED_TICKET MAKE_E_HC(0x5653L) // 0x89235653
-#define E_PF_MATCHMAKING_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x5654L) // 0x89235654
-#define E_PF_MATCHMAKING_TICKET_MEMBERSHIP_LIMIT_EXCEEDED MAKE_E_HC(0x5655L) // 0x89235655
-#define E_PF_MATCHMAKING_UNAUTHORIZED MAKE_E_HC(0x5656L) // 0x89235656
-#define E_PF_MATCHMAKING_QUEUE_LIMIT_EXCEEDED MAKE_E_HC(0x5657L) // 0x89235657
-#define E_PF_MATCHMAKING_REQUEST_TYPE_MISMATCH MAKE_E_HC(0x5658L) // 0x89235658
-#define E_PF_MATCHMAKING_BAD_REQUEST MAKE_E_HC(0x5659L) // 0x89235659
-#define E_PF_PUB_SUB_FEATURE_NOT_ENABLED_FOR_TITLE MAKE_E_HC(0x565aL) // 0x8923565a
-#define E_PF_PUB_SUB_TOO_MANY_REQUESTS MAKE_E_HC(0x565bL) // 0x8923565b
-#define E_PF_PUB_SUB_CONNECTION_NOT_FOUND_FOR_ENTITY MAKE_E_HC(0x565cL) // 0x8923565c
-#define E_PF_PUB_SUB_CONNECTION_HANDLE_INVALID MAKE_E_HC(0x565dL) // 0x8923565d
-#define E_PF_PUB_SUB_SUBSCRIPTION_LIMIT_EXCEEDED MAKE_E_HC(0x565eL) // 0x8923565e
-#define E_PF_TITLE_CONFIG_NOT_FOUND MAKE_E_HC(0x565fL) // 0x8923565f
-#define E_PF_TITLE_CONFIG_UPDATE_CONFLICT MAKE_E_HC(0x5660L) // 0x89235660
-#define E_PF_TITLE_CONFIG_SERIALIZATION_ERROR MAKE_E_HC(0x5661L) // 0x89235661
-#define E_PF_CATALOG_API_NOT_IMPLEMENTED MAKE_E_HC(0x5662L) // 0x89235662
-#define E_PF_CATALOG_ENTITY_INVALID MAKE_E_HC(0x5663L) // 0x89235663
-#define E_PF_CATALOG_TITLE_ID_MISSING MAKE_E_HC(0x5664L) // 0x89235664
-#define E_PF_CATALOG_PLAYER_ID_MISSING MAKE_E_HC(0x5665L) // 0x89235665
-#define E_PF_CATALOG_CLIENT_IDENTITY_INVALID MAKE_E_HC(0x5666L) // 0x89235666
-#define E_PF_CATALOG_ONE_OR_MORE_FILES_INVALID MAKE_E_HC(0x5667L) // 0x89235667
-#define E_PF_CATALOG_ITEM_METADATA_INVALID MAKE_E_HC(0x5668L) // 0x89235668
-#define E_PF_CATALOG_ITEM_ID_INVALID MAKE_E_HC(0x5669L) // 0x89235669
-#define E_PF_CATALOG_SEARCH_PARAMETER_INVALID MAKE_E_HC(0x566aL) // 0x8923566a
-#define E_PF_CATALOG_FEATURE_DISABLED MAKE_E_HC(0x566bL) // 0x8923566b
-#define E_PF_CATALOG_CONFIG_INVALID MAKE_E_HC(0x566cL) // 0x8923566c
-#define E_PF_CATALOG_ITEM_TYPE_INVALID MAKE_E_HC(0x566dL) // 0x8923566d
-#define E_PF_CATALOG_BAD_REQUEST MAKE_E_HC(0x566eL) // 0x8923566e
-#define E_PF_CATALOG_TOO_MANY_REQUESTS MAKE_E_HC(0x566fL) // 0x8923566f
-#define E_PF_EXPORT_INVALID_STATUS_UPDATE MAKE_E_HC(0x5670L) // 0x89235670
-#define E_PF_EXPORT_INVALID_PREFIX MAKE_E_HC(0x5671L) // 0x89235671
-#define E_PF_EXPORT_BLOB_CONTAINER_DOES_NOT_EXIST MAKE_E_HC(0x5672L) // 0x89235672
-#define E_PF_EXPORT_NOT_FOUND MAKE_E_HC(0x5673L) // 0x89235673
-#define E_PF_EXPORT_COULD_NOT_UPDATE MAKE_E_HC(0x5674L) // 0x89235674
-#define E_PF_EXPORT_INVALID_STORAGE_TYPE MAKE_E_HC(0x5675L) // 0x89235675
-#define E_PF_EXPORT_AMAZON_BUCKET_DOES_NOT_EXIST MAKE_E_HC(0x5676L) // 0x89235676
-#define E_PF_EXPORT_INVALID_BLOB_STORAGE MAKE_E_HC(0x5677L) // 0x89235677
-#define E_PF_EXPORT_KUSTO_EXCEPTION MAKE_E_HC(0x5678L) // 0x89235678
-#define E_PF_EXPORT_KUSTO_CONNECTION_FAILED MAKE_E_HC(0x5679L) // 0x89235679
-#define E_PF_EXPORT_UNKNOWN_ERROR MAKE_E_HC(0x567aL) // 0x8923567a
-#define E_PF_EXPORT_CANT_EDIT_PENDING_EXPORT MAKE_E_HC(0x567bL) // 0x8923567b
-#define E_PF_EXPORT_LIMIT_EXPORTS MAKE_E_HC(0x567cL) // 0x8923567c
-#define E_PF_EXPORT_LIMIT_EVENTS MAKE_E_HC(0x567dL) // 0x8923567d
-#define E_PF_EXPORT_INVALID_PARTITION_STATUS_MODIFICATION MAKE_E_HC(0x567eL) // 0x8923567e
-#define E_PF_EXPORT_COULD_NOT_CREATE MAKE_E_HC(0x567fL) // 0x8923567f
-#define E_PF_EXPORT_NO_BACKING_DATABASE_FOUND MAKE_E_HC(0x5680L) // 0x89235680
-#define E_PF_EXPORT_COULD_NOT_DELETE MAKE_E_HC(0x5681L) // 0x89235681
-#define E_PF_EXPORT_CANNOT_DETERMINE_EVENT_QUERY MAKE_E_HC(0x5682L) // 0x89235682
-#define E_PF_EXPORT_INVALID_QUERY_SCHEMA_MODIFICATION MAKE_E_HC(0x5683L) // 0x89235683
-#define E_PF_EXPORT_QUERY_SCHEMA_MISSING_REQUIRED_COLUMNS MAKE_E_HC(0x5684L) // 0x89235684
-#define E_PF_EXPORT_CANNOT_PARSE_QUERY MAKE_E_HC(0x5685L) // 0x89235685
-#define E_PF_EXPORT_CONTROL_COMMANDS_NOT_ALLOWED MAKE_E_HC(0x5686L) // 0x89235686
-#define E_PF_EXPORT_QUERY_MISSING_TABLE_REFERENCE MAKE_E_HC(0x5687L) // 0x89235687
-#define E_PF_EXPORT_INSIGHTS_V_1_DEPRECATED MAKE_E_HC(0x5688L) // 0x89235688
-#define E_PF_EXPLORER_BASIC_INVALID_QUERY_NAME MAKE_E_HC(0x5689L) // 0x89235689
-#define E_PF_EXPLORER_BASIC_INVALID_QUERY_DESCRIPTION MAKE_E_HC(0x568aL) // 0x8923568a
-#define E_PF_EXPLORER_BASIC_INVALID_QUERY_CONDITIONS MAKE_E_HC(0x568bL) // 0x8923568b
-#define E_PF_EXPLORER_BASIC_INVALID_QUERY_START_DATE MAKE_E_HC(0x568cL) // 0x8923568c
-#define E_PF_EXPLORER_BASIC_INVALID_QUERY_END_DATE MAKE_E_HC(0x568dL) // 0x8923568d
-#define E_PF_EXPLORER_BASIC_INVALID_QUERY_GROUP_BY MAKE_E_HC(0x568eL) // 0x8923568e
-#define E_PF_EXPLORER_BASIC_INVALID_QUERY_AGGREGATE_TYPE MAKE_E_HC(0x568fL) // 0x8923568f
-#define E_PF_EXPLORER_BASIC_INVALID_QUERY_AGGREGATE_PROPERTY MAKE_E_HC(0x5690L) // 0x89235690
-#define E_PF_EXPLORER_BASIC_LOAD_QUERIES_ERROR MAKE_E_HC(0x5691L) // 0x89235691
-#define E_PF_EXPLORER_BASIC_LOAD_QUERY_ERROR MAKE_E_HC(0x5692L) // 0x89235692
-#define E_PF_EXPLORER_BASIC_CREATE_QUERY_ERROR MAKE_E_HC(0x5693L) // 0x89235693
-#define E_PF_EXPLORER_BASIC_DELETE_QUERY_ERROR MAKE_E_HC(0x5694L) // 0x89235694
-#define E_PF_EXPLORER_BASIC_UPDATE_QUERY_ERROR MAKE_E_HC(0x5695L) // 0x89235695
-#define E_PF_EXPLORER_BASIC_SAVED_QUERIES_LIMIT MAKE_E_HC(0x5696L) // 0x89235696
-#define E_PF_EXPLORER_BASIC_SAVED_QUERY_NOT_FOUND MAKE_E_HC(0x5697L) // 0x89235697
-#define E_PF_TENANT_SHARD_MAPPER_SHARD_NOT_FOUND MAKE_E_HC(0x5698L) // 0x89235698
-#define E_PF_TITLE_NOT_ENABLED_FOR_PARTY MAKE_E_HC(0x5699L) // 0x89235699
-#define E_PF_PARTY_VERSION_NOT_FOUND MAKE_E_HC(0x569aL) // 0x8923569a
-#define E_PF_MULTIPLAYER_SERVER_BUILD_REFERENCED_BY_MATCHMAKING_QUEUE MAKE_E_HC(0x569bL) // 0x8923569b
-#define E_PF_MULTIPLAYER_SERVER_BUILD_REFERENCED_BY_BUILD_ALIAS MAKE_E_HC(0x569cL) // 0x8923569c
-#define E_PF_MULTIPLAYER_SERVER_BUILD_ALIAS_REFERENCED_BY_MATCHMAKING_QUEUE MAKE_E_HC(0x569dL) // 0x8923569d
-#define E_PF_PARTY_SERIALIZATION_ERROR MAKE_E_HC(0x569eL) // 0x8923569e
-#define E_PF_EXPERIMENTATION_EXPERIMENT_STOPPED MAKE_E_HC(0x569fL) // 0x8923569f
-#define E_PF_EXPERIMENTATION_EXPERIMENT_RUNNING MAKE_E_HC(0x56a0L) // 0x892356a0
-#define E_PF_EXPERIMENTATION_EXPERIMENT_NOT_FOUND MAKE_E_HC(0x56a1L) // 0x892356a1
-#define E_PF_EXPERIMENTATION_EXPERIMENT_NEVER_STARTED MAKE_E_HC(0x56a2L) // 0x892356a2
-#define E_PF_EXPERIMENTATION_EXPERIMENT_DELETED MAKE_E_HC(0x56a3L) // 0x892356a3
-#define E_PF_EXPERIMENTATION_CLIENT_TIMEOUT MAKE_E_HC(0x56a4L) // 0x892356a4
-#define E_PF_EXPERIMENTATION_INVALID_VARIANT_CONFIGURATION MAKE_E_HC(0x56a5L) // 0x892356a5
-#define E_PF_EXPERIMENTATION_INVALID_VARIABLE_CONFIGURATION MAKE_E_HC(0x56a6L) // 0x892356a6
-#define E_PF_EXPERIMENT_INVALID_ID MAKE_E_HC(0x56a7L) // 0x892356a7
-#define E_PF_EXPERIMENTATION_NO_SCORECARD MAKE_E_HC(0x56a8L) // 0x892356a8
-#define E_PF_EXPERIMENTATION_TREATMENT_ASSIGNMENT_FAILED MAKE_E_HC(0x56a9L) // 0x892356a9
-#define E_PF_EXPERIMENTATION_TREATMENT_ASSIGNMENT_DISABLED MAKE_E_HC(0x56aaL) // 0x892356aa
-#define E_PF_EXPERIMENTATION_INVALID_DURATION MAKE_E_HC(0x56abL) // 0x892356ab
-#define E_PF_EXPERIMENTATION_MAX_EXPERIMENTS_REACHED MAKE_E_HC(0x56acL) // 0x892356ac
-#define E_PF_EXPERIMENTATION_EXPERIMENT_SCHEDULING_IN_PROGRESS MAKE_E_HC(0x56adL) // 0x892356ad
-#define E_PF_EXPERIMENTATION_INVALID_END_DATE MAKE_E_HC(0x56aeL) // 0x892356ae
-#define E_PF_EXPERIMENTATION_INVALID_START_DATE MAKE_E_HC(0x56afL) // 0x892356af
-#define E_PF_EXPERIMENTATION_MAX_DURATION_EXCEEDED MAKE_E_HC(0x56b0L) // 0x892356b0
-#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_NOT_FOUND MAKE_E_HC(0x56b1L) // 0x892356b1
-#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_INSUFFICIENT_CAPACITY MAKE_E_HC(0x56b2L) // 0x892356b2
-#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_CANNOT_DELETE MAKE_E_HC(0x56b3L) // 0x892356b3
-#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_INVALID_TRAFFIC_ALLOCATION MAKE_E_HC(0x56b4L) // 0x892356b4
-#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_INVALID_NAME MAKE_E_HC(0x56b5L) // 0x892356b5
-#define E_PF_MAX_ACTION_DEPTH_EXCEEDED MAKE_E_HC(0x56b6L) // 0x892356b6
-#define E_PF_TITLE_NOT_ON_UPDATED_PRICING_PLAN MAKE_E_HC(0x56b7L) // 0x892356b7
-#define E_PF_SEGMENT_MANAGEMENT_TITLE_NOT_IN_FLIGHT MAKE_E_HC(0x56b8L) // 0x892356b8
-#define E_PF_SEGMENT_MANAGEMENT_NO_EXPRESSION_TREE MAKE_E_HC(0x56b9L) // 0x892356b9
-#define E_PF_SEGMENT_MANAGEMENT_TRIGGER_ACTION_COUNT_OVER_LIMIT MAKE_E_HC(0x56baL) // 0x892356ba
-#define E_PF_SEGMENT_MANAGEMENT_SEGMENT_COUNT_OVER_LIMIT MAKE_E_HC(0x56bbL) // 0x892356bb
-#define E_PF_SEGMENT_MANAGEMENT_INVALID_SEGMENT_ID MAKE_E_HC(0x56bcL) // 0x892356bc
-#define E_PF_SEGMENT_MANAGEMENT_INVALID_INPUT MAKE_E_HC(0x56bdL) // 0x892356bd
-#define E_PF_SEGMENT_MANAGEMENT_INVALID_SEGMENT_NAME MAKE_E_HC(0x56beL) // 0x892356be
-#define E_PF_DELETE_SEGMENT_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56bfL) // 0x892356bf
-#define E_PF_CREATE_SEGMENT_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c0L) // 0x892356c0
-#define E_PF_UPDATE_SEGMENT_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c1L) // 0x892356c1
-#define E_PF_GET_SEGMENTS_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c2L) // 0x892356c2
-#define E_PF_ASYNC_EXPORT_NOT_IN_FLIGHT MAKE_E_HC(0x56c3L) // 0x892356c3
-#define E_PF_ASYNC_EXPORT_NOT_FOUND MAKE_E_HC(0x56c4L) // 0x892356c4
-#define E_PF_ASYNC_EXPORT_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c5L) // 0x892356c5
-#define E_PF_ANALYTICS_SEGMENT_COUNT_OVER_LIMIT MAKE_E_HC(0x56c6L) // 0x892356c6
-#define E_PF_SNAPSHOT_NOT_FOUND MAKE_E_HC(0x56c7L) // 0x892356c7
-#define E_PF_INVENTORY_API_NOT_IMPLEMENTED MAKE_E_HC(0x56c8L) // 0x892356c8
-#define E_PF_LOBBY_DOES_NOT_EXIST MAKE_E_HC(0x56c9L) // 0x892356c9
-#define E_PF_LOBBY_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56caL) // 0x892356ca
-#define E_PF_LOBBY_PLAYER_ALREADY_JOINED MAKE_E_HC(0x56cbL) // 0x892356cb
-#define E_PF_LOBBY_NOT_JOINABLE MAKE_E_HC(0x56ccL) // 0x892356cc
-#define E_PF_LOBBY_MEMBER_CANNOT_REJOIN MAKE_E_HC(0x56cdL) // 0x892356cd
-#define E_PF_LOBBY_CURRENT_PLAYERS_MORE_THAN_MAX_PLAYERS MAKE_E_HC(0x56ceL) // 0x892356ce
-#define E_PF_LOBBY_PLAYER_NOT_PRESENT MAKE_E_HC(0x56cfL) // 0x892356cf
-#define E_PF_LOBBY_BAD_REQUEST MAKE_E_HC(0x56d0L) // 0x892356d0
-#define E_PF_LOBBY_PLAYER_MAX_LOBBY_LIMIT_EXCEEDED MAKE_E_HC(0x56d1L) // 0x892356d1
-#define E_PF_LOBBY_NEW_OWNER_MUST_BE_CONNECTED MAKE_E_HC(0x56d2L) // 0x892356d2
-#define E_PF_LOBBY_CURRENT_OWNER_STILL_CONNECTED MAKE_E_HC(0x56d3L) // 0x892356d3
-#define E_PF_LOBBY_MEMBER_IS_NOT_OWNER MAKE_E_HC(0x56d4L) // 0x892356d4
-#define E_PF_EVENT_SAMPLING_INVALID_RATIO MAKE_E_HC(0x56d5L) // 0x892356d5
-#define E_PF_EVENT_SAMPLING_INVALID_EVENT_NAMESPACE MAKE_E_HC(0x56d6L) // 0x892356d6
-#define E_PF_EVENT_SAMPLING_INVALID_EVENT_NAME MAKE_E_HC(0x56d7L) // 0x892356d7
-#define E_PF_EVENT_SAMPLING_RATIO_NOT_FOUND MAKE_E_HC(0x56d8L) // 0x892356d8
-#define E_PF_TELEMETRY_KEY_NOT_FOUND MAKE_E_HC(0x56d9L) // 0x892356d9
-#define E_PF_TELEMETRY_KEY_INVALID_NAME MAKE_E_HC(0x56daL) // 0x892356da
-#define E_PF_TELEMETRY_KEY_ALREADY_EXISTS MAKE_E_HC(0x56dbL) // 0x892356db
-#define E_PF_TELEMETRY_KEY_INVALID MAKE_E_HC(0x56dcL) // 0x892356dc
-#define E_PF_TELEMETRY_KEY_COUNT_OVER_LIMIT MAKE_E_HC(0x56ddL) // 0x892356dd
-#define E_PF_TELEMETRY_KEY_DEACTIVATED MAKE_E_HC(0x56deL) // 0x892356de
-#define E_PF_TELEMETRY_KEY_LONG_INSIGHTS_RETENTION_NOT_ALLOWED MAKE_E_HC(0x56dfL) // 0x892356df
-#define E_PF_EVENT_SINK_CONNECTION_INVALID MAKE_E_HC(0x56e0L) // 0x892356e0
-#define E_PF_EVENT_SINK_CONNECTION_UNAUTHORIZED MAKE_E_HC(0x56e1L) // 0x892356e1
-#define E_PF_EVENT_SINK_REGION_INVALID MAKE_E_HC(0x56e2L) // 0x892356e2
-#define E_PF_EVENT_SINK_LIMIT_EXCEEDED MAKE_E_HC(0x56e3L) // 0x892356e3
-#define E_PF_EVENT_SINK_SAS_TOKEN_INVALID MAKE_E_HC(0x56e4L) // 0x892356e4
-#define E_PF_EVENT_SINK_NOT_FOUND MAKE_E_HC(0x56e5L) // 0x892356e5
-#define E_PF_EVENT_SINK_NAME_INVALID MAKE_E_HC(0x56e6L) // 0x892356e6
-#define E_PF_EVENT_SINK_SAS_TOKEN_PERMISSION_INVALID MAKE_E_HC(0x56e7L) // 0x892356e7
-#define E_PF_EVENT_SINK_SECRET_INVALID MAKE_E_HC(0x56e8L) // 0x892356e8
-#define E_PF_EVENT_SINK_TENANT_NOT_FOUND MAKE_E_HC(0x56e9L) // 0x892356e9
-#define E_PF_EVENT_SINK_AAD_NOT_FOUND MAKE_E_HC(0x56eaL) // 0x892356ea
-#define E_PF_EVENT_SINK_DATABASE_NOT_FOUND MAKE_E_HC(0x56ebL) // 0x892356eb
-#define E_PF_OPERATION_CANCELED MAKE_E_HC(0x56ecL) // 0x892356ec
-#define E_PF_INVALID_DISPLAY_NAME_RANDOM_SUFFIX_LENGTH MAKE_E_HC(0x56edL) // 0x892356ed
-#define E_PF_ALLOW_NON_UNIQUE_PLAYER_DISPLAY_NAMES_DISABLE_NOT_ALLOWED MAKE_E_HC(0x56eeL) // 0x892356ee
-#define E_PF_PARTITIONED_EVENT_INVALID MAKE_E_HC(0x56efL) // 0x892356ef
-#define E_PF_PARTITIONED_EVENT_COUNT_OVER_LIMIT MAKE_E_HC(0x56f0L) // 0x892356f0
-#define E_PF_MANAGE_EVENT_NAMESPACE_INVALID MAKE_E_HC(0x56f1L) // 0x892356f1
-#define E_PF_MANAGE_EVENT_NAME_INVALID MAKE_E_HC(0x56f2L) // 0x892356f2
-#define E_PF_MANAGED_EVENT_NOT_FOUND MAKE_E_HC(0x56f3L) // 0x892356f3
-#define E_PF_MANAGE_EVENTS_INVALID_RATIO MAKE_E_HC(0x56f4L) // 0x892356f4
-#define E_PF_MANAGED_EVENT_INVALID MAKE_E_HC(0x56f5L) // 0x892356f5
-#define E_PF_PLAYER_CUSTOM_PROPERTIES_PROPERTY_NAME_TOO_LONG MAKE_E_HC(0x56f6L) // 0x892356f6
-#define E_PF_PLAYER_CUSTOM_PROPERTIES_PROPERTY_NAME_IS_INVALID MAKE_E_HC(0x56f7L) // 0x892356f7
-#define E_PF_PLAYER_CUSTOM_PROPERTIES_STRING_PROPERTY_VALUE_TOO_LONG MAKE_E_HC(0x56f8L) // 0x892356f8
-#define E_PF_PLAYER_CUSTOM_PROPERTIES_VALUE_IS_INVALID_TYPE MAKE_E_HC(0x56f9L) // 0x892356f9
-#define E_PF_PLAYER_CUSTOM_PROPERTIES_VERSION_MISMATCH MAKE_E_HC(0x56faL) // 0x892356fa
-#define E_PF_PLAYER_CUSTOM_PROPERTIES_PROPERTY_COUNT_TOO_HIGH MAKE_E_HC(0x56fbL) // 0x892356fb
-#define E_PF_PLAYER_CUSTOM_PROPERTIES_DUPLICATE_PROPERTY_NAME MAKE_E_HC(0x56fcL) // 0x892356fc
-#define E_PF_PLAYER_CUSTOM_PROPERTIES_PROPERTY_DOES_NOT_EXIST MAKE_E_HC(0x56fdL) // 0x892356fd
-#define E_PF_ADDON_ALREADY_EXISTS MAKE_E_HC(0x56feL) // 0x892356fe
-#define E_PF_ADDON_DOESNT_EXIST MAKE_E_HC(0x56ffL) // 0x892356ff
+#define E_PF_INVALID_STATISTIC_SCORE MAKE_E_HC(0x5645L) // 0x89235645
+#define E_PF_MATCHMAKING_ENTITY_INVALID MAKE_E_HC(0x5646L) // 0x89235646
+#define E_PF_MATCHMAKING_PLAYER_ATTRIBUTES_INVALID MAKE_E_HC(0x5647L) // 0x89235647
+#define E_PF_MATCHMAKING_QUEUE_NOT_FOUND MAKE_E_HC(0x5648L) // 0x89235648
+#define E_PF_MATCHMAKING_MATCH_NOT_FOUND MAKE_E_HC(0x5649L) // 0x89235649
+#define E_PF_MATCHMAKING_TICKET_NOT_FOUND MAKE_E_HC(0x564aL) // 0x8923564a
+#define E_PF_MATCHMAKING_ALREADY_JOINED_TICKET MAKE_E_HC(0x564bL) // 0x8923564b
+#define E_PF_MATCHMAKING_TICKET_ALREADY_COMPLETED MAKE_E_HC(0x564cL) // 0x8923564c
+#define E_PF_MATCHMAKING_QUEUE_CONFIG_INVALID MAKE_E_HC(0x564dL) // 0x8923564d
+#define E_PF_MATCHMAKING_MEMBER_PROFILE_INVALID MAKE_E_HC(0x564eL) // 0x8923564e
+#define E_PF_NINTENDO_SWITCH_DEVICE_ID_NOT_LINKED MAKE_E_HC(0x564fL) // 0x8923564f
+#define E_PF_MATCHMAKING_NOT_ENABLED MAKE_E_HC(0x5650L) // 0x89235650
+#define E_PF_MATCHMAKING_PLAYER_ATTRIBUTES_TOO_LARGE MAKE_E_HC(0x5651L) // 0x89235651
+#define E_PF_MATCHMAKING_NUMBER_OF_PLAYERS_IN_TICKET_TOO_LARGE MAKE_E_HC(0x5652L) // 0x89235652
+#define E_PF_MATCHMAKING_ATTRIBUTE_INVALID MAKE_E_HC(0x5653L) // 0x89235653
+#define E_PF_MATCHMAKING_PLAYER_HAS_NOT_JOINED_TICKET MAKE_E_HC(0x5654L) // 0x89235654
+#define E_PF_MATCHMAKING_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x5655L) // 0x89235655
+#define E_PF_MATCHMAKING_TICKET_MEMBERSHIP_LIMIT_EXCEEDED MAKE_E_HC(0x5656L) // 0x89235656
+#define E_PF_MATCHMAKING_UNAUTHORIZED MAKE_E_HC(0x5657L) // 0x89235657
+#define E_PF_MATCHMAKING_QUEUE_LIMIT_EXCEEDED MAKE_E_HC(0x5658L) // 0x89235658
+#define E_PF_MATCHMAKING_REQUEST_TYPE_MISMATCH MAKE_E_HC(0x5659L) // 0x89235659
+#define E_PF_MATCHMAKING_BAD_REQUEST MAKE_E_HC(0x565aL) // 0x8923565a
+#define E_PF_PUB_SUB_FEATURE_NOT_ENABLED_FOR_TITLE MAKE_E_HC(0x565bL) // 0x8923565b
+#define E_PF_PUB_SUB_TOO_MANY_REQUESTS MAKE_E_HC(0x565cL) // 0x8923565c
+#define E_PF_PUB_SUB_CONNECTION_NOT_FOUND_FOR_ENTITY MAKE_E_HC(0x565dL) // 0x8923565d
+#define E_PF_PUB_SUB_CONNECTION_HANDLE_INVALID MAKE_E_HC(0x565eL) // 0x8923565e
+#define E_PF_PUB_SUB_SUBSCRIPTION_LIMIT_EXCEEDED MAKE_E_HC(0x565fL) // 0x8923565f
+#define E_PF_TITLE_CONFIG_NOT_FOUND MAKE_E_HC(0x5660L) // 0x89235660
+#define E_PF_TITLE_CONFIG_UPDATE_CONFLICT MAKE_E_HC(0x5661L) // 0x89235661
+#define E_PF_TITLE_CONFIG_SERIALIZATION_ERROR MAKE_E_HC(0x5662L) // 0x89235662
+#define E_PF_CATALOG_API_NOT_IMPLEMENTED MAKE_E_HC(0x5663L) // 0x89235663
+#define E_PF_CATALOG_ENTITY_INVALID MAKE_E_HC(0x5664L) // 0x89235664
+#define E_PF_CATALOG_TITLE_ID_MISSING MAKE_E_HC(0x5665L) // 0x89235665
+#define E_PF_CATALOG_PLAYER_ID_MISSING MAKE_E_HC(0x5666L) // 0x89235666
+#define E_PF_CATALOG_CLIENT_IDENTITY_INVALID MAKE_E_HC(0x5667L) // 0x89235667
+#define E_PF_CATALOG_ONE_OR_MORE_FILES_INVALID MAKE_E_HC(0x5668L) // 0x89235668
+#define E_PF_CATALOG_ITEM_METADATA_INVALID MAKE_E_HC(0x5669L) // 0x89235669
+#define E_PF_CATALOG_ITEM_ID_INVALID MAKE_E_HC(0x566aL) // 0x8923566a
+#define E_PF_CATALOG_SEARCH_PARAMETER_INVALID MAKE_E_HC(0x566bL) // 0x8923566b
+#define E_PF_CATALOG_FEATURE_DISABLED MAKE_E_HC(0x566cL) // 0x8923566c
+#define E_PF_CATALOG_CONFIG_INVALID MAKE_E_HC(0x566dL) // 0x8923566d
+#define E_PF_CATALOG_ITEM_TYPE_INVALID MAKE_E_HC(0x566eL) // 0x8923566e
+#define E_PF_CATALOG_BAD_REQUEST MAKE_E_HC(0x566fL) // 0x8923566f
+#define E_PF_CATALOG_TOO_MANY_REQUESTS MAKE_E_HC(0x5670L) // 0x89235670
+#define E_PF_EXPORT_INVALID_STATUS_UPDATE MAKE_E_HC(0x5671L) // 0x89235671
+#define E_PF_EXPORT_INVALID_PREFIX MAKE_E_HC(0x5672L) // 0x89235672
+#define E_PF_EXPORT_BLOB_CONTAINER_DOES_NOT_EXIST MAKE_E_HC(0x5673L) // 0x89235673
+#define E_PF_EXPORT_NOT_FOUND MAKE_E_HC(0x5674L) // 0x89235674
+#define E_PF_EXPORT_COULD_NOT_UPDATE MAKE_E_HC(0x5675L) // 0x89235675
+#define E_PF_EXPORT_INVALID_STORAGE_TYPE MAKE_E_HC(0x5676L) // 0x89235676
+#define E_PF_EXPORT_AMAZON_BUCKET_DOES_NOT_EXIST MAKE_E_HC(0x5677L) // 0x89235677
+#define E_PF_EXPORT_INVALID_BLOB_STORAGE MAKE_E_HC(0x5678L) // 0x89235678
+#define E_PF_EXPORT_KUSTO_EXCEPTION MAKE_E_HC(0x5679L) // 0x89235679
+#define E_PF_EXPORT_KUSTO_CONNECTION_FAILED MAKE_E_HC(0x567aL) // 0x8923567a
+#define E_PF_EXPORT_UNKNOWN_ERROR MAKE_E_HC(0x567bL) // 0x8923567b
+#define E_PF_EXPORT_CANT_EDIT_PENDING_EXPORT MAKE_E_HC(0x567cL) // 0x8923567c
+#define E_PF_EXPORT_LIMIT_EXPORTS MAKE_E_HC(0x567dL) // 0x8923567d
+#define E_PF_EXPORT_LIMIT_EVENTS MAKE_E_HC(0x567eL) // 0x8923567e
+#define E_PF_EXPORT_INVALID_PARTITION_STATUS_MODIFICATION MAKE_E_HC(0x567fL) // 0x8923567f
+#define E_PF_EXPORT_COULD_NOT_CREATE MAKE_E_HC(0x5680L) // 0x89235680
+#define E_PF_EXPORT_NO_BACKING_DATABASE_FOUND MAKE_E_HC(0x5681L) // 0x89235681
+#define E_PF_EXPORT_COULD_NOT_DELETE MAKE_E_HC(0x5682L) // 0x89235682
+#define E_PF_EXPORT_CANNOT_DETERMINE_EVENT_QUERY MAKE_E_HC(0x5683L) // 0x89235683
+#define E_PF_EXPORT_INVALID_QUERY_SCHEMA_MODIFICATION MAKE_E_HC(0x5684L) // 0x89235684
+#define E_PF_EXPORT_QUERY_SCHEMA_MISSING_REQUIRED_COLUMNS MAKE_E_HC(0x5685L) // 0x89235685
+#define E_PF_EXPORT_CANNOT_PARSE_QUERY MAKE_E_HC(0x5686L) // 0x89235686
+#define E_PF_EXPORT_CONTROL_COMMANDS_NOT_ALLOWED MAKE_E_HC(0x5687L) // 0x89235687
+#define E_PF_EXPORT_QUERY_MISSING_TABLE_REFERENCE MAKE_E_HC(0x5688L) // 0x89235688
+#define E_PF_EXPORT_INSIGHTS_V_1_DEPRECATED MAKE_E_HC(0x5689L) // 0x89235689
+#define E_PF_EXPLORER_BASIC_INVALID_QUERY_NAME MAKE_E_HC(0x568aL) // 0x8923568a
+#define E_PF_EXPLORER_BASIC_INVALID_QUERY_DESCRIPTION MAKE_E_HC(0x568bL) // 0x8923568b
+#define E_PF_EXPLORER_BASIC_INVALID_QUERY_CONDITIONS MAKE_E_HC(0x568cL) // 0x8923568c
+#define E_PF_EXPLORER_BASIC_INVALID_QUERY_START_DATE MAKE_E_HC(0x568dL) // 0x8923568d
+#define E_PF_EXPLORER_BASIC_INVALID_QUERY_END_DATE MAKE_E_HC(0x568eL) // 0x8923568e
+#define E_PF_EXPLORER_BASIC_INVALID_QUERY_GROUP_BY MAKE_E_HC(0x568fL) // 0x8923568f
+#define E_PF_EXPLORER_BASIC_INVALID_QUERY_AGGREGATE_TYPE MAKE_E_HC(0x5690L) // 0x89235690
+#define E_PF_EXPLORER_BASIC_INVALID_QUERY_AGGREGATE_PROPERTY MAKE_E_HC(0x5691L) // 0x89235691
+#define E_PF_EXPLORER_BASIC_LOAD_QUERIES_ERROR MAKE_E_HC(0x5692L) // 0x89235692
+#define E_PF_EXPLORER_BASIC_LOAD_QUERY_ERROR MAKE_E_HC(0x5693L) // 0x89235693
+#define E_PF_EXPLORER_BASIC_CREATE_QUERY_ERROR MAKE_E_HC(0x5694L) // 0x89235694
+#define E_PF_EXPLORER_BASIC_DELETE_QUERY_ERROR MAKE_E_HC(0x5695L) // 0x89235695
+#define E_PF_EXPLORER_BASIC_UPDATE_QUERY_ERROR MAKE_E_HC(0x5696L) // 0x89235696
+#define E_PF_EXPLORER_BASIC_SAVED_QUERIES_LIMIT MAKE_E_HC(0x5697L) // 0x89235697
+#define E_PF_EXPLORER_BASIC_SAVED_QUERY_NOT_FOUND MAKE_E_HC(0x5698L) // 0x89235698
+#define E_PF_TENANT_SHARD_MAPPER_SHARD_NOT_FOUND MAKE_E_HC(0x5699L) // 0x89235699
+#define E_PF_TITLE_NOT_ENABLED_FOR_PARTY MAKE_E_HC(0x569aL) // 0x8923569a
+#define E_PF_PARTY_VERSION_NOT_FOUND MAKE_E_HC(0x569bL) // 0x8923569b
+#define E_PF_MULTIPLAYER_SERVER_BUILD_REFERENCED_BY_MATCHMAKING_QUEUE MAKE_E_HC(0x569cL) // 0x8923569c
+#define E_PF_MULTIPLAYER_SERVER_BUILD_REFERENCED_BY_BUILD_ALIAS MAKE_E_HC(0x569dL) // 0x8923569d
+#define E_PF_MULTIPLAYER_SERVER_BUILD_ALIAS_REFERENCED_BY_MATCHMAKING_QUEUE MAKE_E_HC(0x569eL) // 0x8923569e
+#define E_PF_PARTY_SERIALIZATION_ERROR MAKE_E_HC(0x569fL) // 0x8923569f
+#define E_PF_EXPERIMENTATION_EXPERIMENT_STOPPED MAKE_E_HC(0x56a0L) // 0x892356a0
+#define E_PF_EXPERIMENTATION_EXPERIMENT_RUNNING MAKE_E_HC(0x56a1L) // 0x892356a1
+#define E_PF_EXPERIMENTATION_EXPERIMENT_NOT_FOUND MAKE_E_HC(0x56a2L) // 0x892356a2
+#define E_PF_EXPERIMENTATION_EXPERIMENT_NEVER_STARTED MAKE_E_HC(0x56a3L) // 0x892356a3
+#define E_PF_EXPERIMENTATION_EXPERIMENT_DELETED MAKE_E_HC(0x56a4L) // 0x892356a4
+#define E_PF_EXPERIMENTATION_CLIENT_TIMEOUT MAKE_E_HC(0x56a5L) // 0x892356a5
+#define E_PF_EXPERIMENTATION_INVALID_VARIANT_CONFIGURATION MAKE_E_HC(0x56a6L) // 0x892356a6
+#define E_PF_EXPERIMENTATION_INVALID_VARIABLE_CONFIGURATION MAKE_E_HC(0x56a7L) // 0x892356a7
+#define E_PF_EXPERIMENT_INVALID_ID MAKE_E_HC(0x56a8L) // 0x892356a8
+#define E_PF_EXPERIMENTATION_NO_SCORECARD MAKE_E_HC(0x56a9L) // 0x892356a9
+#define E_PF_EXPERIMENTATION_TREATMENT_ASSIGNMENT_FAILED MAKE_E_HC(0x56aaL) // 0x892356aa
+#define E_PF_EXPERIMENTATION_TREATMENT_ASSIGNMENT_DISABLED MAKE_E_HC(0x56abL) // 0x892356ab
+#define E_PF_EXPERIMENTATION_INVALID_DURATION MAKE_E_HC(0x56acL) // 0x892356ac
+#define E_PF_EXPERIMENTATION_MAX_EXPERIMENTS_REACHED MAKE_E_HC(0x56adL) // 0x892356ad
+#define E_PF_EXPERIMENTATION_EXPERIMENT_SCHEDULING_IN_PROGRESS MAKE_E_HC(0x56aeL) // 0x892356ae
+#define E_PF_EXPERIMENTATION_INVALID_END_DATE MAKE_E_HC(0x56afL) // 0x892356af
+#define E_PF_EXPERIMENTATION_INVALID_START_DATE MAKE_E_HC(0x56b0L) // 0x892356b0
+#define E_PF_EXPERIMENTATION_MAX_DURATION_EXCEEDED MAKE_E_HC(0x56b1L) // 0x892356b1
+#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_NOT_FOUND MAKE_E_HC(0x56b2L) // 0x892356b2
+#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_INSUFFICIENT_CAPACITY MAKE_E_HC(0x56b3L) // 0x892356b3
+#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_CANNOT_DELETE MAKE_E_HC(0x56b4L) // 0x892356b4
+#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_INVALID_TRAFFIC_ALLOCATION MAKE_E_HC(0x56b5L) // 0x892356b5
+#define E_PF_EXPERIMENTATION_EXCLUSION_GROUP_INVALID_NAME MAKE_E_HC(0x56b6L) // 0x892356b6
+#define E_PF_MAX_ACTION_DEPTH_EXCEEDED MAKE_E_HC(0x56b7L) // 0x892356b7
+#define E_PF_TITLE_NOT_ON_UPDATED_PRICING_PLAN MAKE_E_HC(0x56b8L) // 0x892356b8
+#define E_PF_SEGMENT_MANAGEMENT_TITLE_NOT_IN_FLIGHT MAKE_E_HC(0x56b9L) // 0x892356b9
+#define E_PF_SEGMENT_MANAGEMENT_NO_EXPRESSION_TREE MAKE_E_HC(0x56baL) // 0x892356ba
+#define E_PF_SEGMENT_MANAGEMENT_TRIGGER_ACTION_COUNT_OVER_LIMIT MAKE_E_HC(0x56bbL) // 0x892356bb
+#define E_PF_SEGMENT_MANAGEMENT_SEGMENT_COUNT_OVER_LIMIT MAKE_E_HC(0x56bcL) // 0x892356bc
+#define E_PF_SEGMENT_MANAGEMENT_INVALID_SEGMENT_ID MAKE_E_HC(0x56bdL) // 0x892356bd
+#define E_PF_SEGMENT_MANAGEMENT_INVALID_INPUT MAKE_E_HC(0x56beL) // 0x892356be
+#define E_PF_SEGMENT_MANAGEMENT_INVALID_SEGMENT_NAME MAKE_E_HC(0x56bfL) // 0x892356bf
+#define E_PF_DELETE_SEGMENT_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c0L) // 0x892356c0
+#define E_PF_CREATE_SEGMENT_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c1L) // 0x892356c1
+#define E_PF_UPDATE_SEGMENT_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c2L) // 0x892356c2
+#define E_PF_GET_SEGMENTS_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c3L) // 0x892356c3
+#define E_PF_ASYNC_EXPORT_NOT_IN_FLIGHT MAKE_E_HC(0x56c4L) // 0x892356c4
+#define E_PF_ASYNC_EXPORT_NOT_FOUND MAKE_E_HC(0x56c5L) // 0x892356c5
+#define E_PF_ASYNC_EXPORT_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56c6L) // 0x892356c6
+#define E_PF_ANALYTICS_SEGMENT_COUNT_OVER_LIMIT MAKE_E_HC(0x56c7L) // 0x892356c7
+#define E_PF_SNAPSHOT_NOT_FOUND MAKE_E_HC(0x56c8L) // 0x892356c8
+#define E_PF_INVENTORY_API_NOT_IMPLEMENTED MAKE_E_HC(0x56c9L) // 0x892356c9
+#define E_PF_LOBBY_DOES_NOT_EXIST MAKE_E_HC(0x56caL) // 0x892356ca
+#define E_PF_LOBBY_RATE_LIMIT_EXCEEDED MAKE_E_HC(0x56cbL) // 0x892356cb
+#define E_PF_LOBBY_PLAYER_ALREADY_JOINED MAKE_E_HC(0x56ccL) // 0x892356cc
+#define E_PF_LOBBY_NOT_JOINABLE MAKE_E_HC(0x56cdL) // 0x892356cd
+#define E_PF_LOBBY_MEMBER_CANNOT_REJOIN MAKE_E_HC(0x56ceL) // 0x892356ce
+#define E_PF_LOBBY_CURRENT_PLAYERS_MORE_THAN_MAX_PLAYERS MAKE_E_HC(0x56cfL) // 0x892356cf
+#define E_PF_LOBBY_PLAYER_NOT_PRESENT MAKE_E_HC(0x56d0L) // 0x892356d0
+#define E_PF_LOBBY_BAD_REQUEST MAKE_E_HC(0x56d1L) // 0x892356d1
+#define E_PF_LOBBY_PLAYER_MAX_LOBBY_LIMIT_EXCEEDED MAKE_E_HC(0x56d2L) // 0x892356d2
+#define E_PF_LOBBY_NEW_OWNER_MUST_BE_CONNECTED MAKE_E_HC(0x56d3L) // 0x892356d3
+#define E_PF_LOBBY_CURRENT_OWNER_STILL_CONNECTED MAKE_E_HC(0x56d4L) // 0x892356d4
+#define E_PF_LOBBY_MEMBER_IS_NOT_OWNER MAKE_E_HC(0x56d5L) // 0x892356d5
+#define E_PF_EVENT_SAMPLING_INVALID_RATIO MAKE_E_HC(0x56d6L) // 0x892356d6
+#define E_PF_EVENT_SAMPLING_INVALID_EVENT_NAMESPACE MAKE_E_HC(0x56d7L) // 0x892356d7
+#define E_PF_EVENT_SAMPLING_INVALID_EVENT_NAME MAKE_E_HC(0x56d8L) // 0x892356d8
+#define E_PF_EVENT_SAMPLING_RATIO_NOT_FOUND MAKE_E_HC(0x56d9L) // 0x892356d9
+#define E_PF_TELEMETRY_KEY_NOT_FOUND MAKE_E_HC(0x56daL) // 0x892356da
+#define E_PF_TELEMETRY_KEY_INVALID_NAME MAKE_E_HC(0x56dbL) // 0x892356db
+#define E_PF_TELEMETRY_KEY_ALREADY_EXISTS MAKE_E_HC(0x56dcL) // 0x892356dc
+#define E_PF_TELEMETRY_KEY_INVALID MAKE_E_HC(0x56ddL) // 0x892356dd
+#define E_PF_TELEMETRY_KEY_COUNT_OVER_LIMIT MAKE_E_HC(0x56deL) // 0x892356de
+#define E_PF_TELEMETRY_KEY_DEACTIVATED MAKE_E_HC(0x56dfL) // 0x892356df
+#define E_PF_TELEMETRY_KEY_LONG_INSIGHTS_RETENTION_NOT_ALLOWED MAKE_E_HC(0x56e0L) // 0x892356e0
+#define E_PF_EVENT_SINK_CONNECTION_INVALID MAKE_E_HC(0x56e1L) // 0x892356e1
+#define E_PF_EVENT_SINK_CONNECTION_UNAUTHORIZED MAKE_E_HC(0x56e2L) // 0x892356e2
+#define E_PF_EVENT_SINK_REGION_INVALID MAKE_E_HC(0x56e3L) // 0x892356e3
+#define E_PF_EVENT_SINK_LIMIT_EXCEEDED MAKE_E_HC(0x56e4L) // 0x892356e4
+#define E_PF_EVENT_SINK_SAS_TOKEN_INVALID MAKE_E_HC(0x56e5L) // 0x892356e5
+#define E_PF_EVENT_SINK_NOT_FOUND MAKE_E_HC(0x56e6L) // 0x892356e6
+#define E_PF_EVENT_SINK_NAME_INVALID MAKE_E_HC(0x56e7L) // 0x892356e7
+#define E_PF_EVENT_SINK_SAS_TOKEN_PERMISSION_INVALID MAKE_E_HC(0x56e8L) // 0x892356e8
+#define E_PF_EVENT_SINK_SECRET_INVALID MAKE_E_HC(0x56e9L) // 0x892356e9
+#define E_PF_EVENT_SINK_TENANT_NOT_FOUND MAKE_E_HC(0x56eaL) // 0x892356ea
+#define E_PF_EVENT_SINK_AAD_NOT_FOUND MAKE_E_HC(0x56ebL) // 0x892356eb
+#define E_PF_EVENT_SINK_DATABASE_NOT_FOUND MAKE_E_HC(0x56ecL) // 0x892356ec
+#define E_PF_OPERATION_CANCELED MAKE_E_HC(0x56edL) // 0x892356ed
+#define E_PF_INVALID_DISPLAY_NAME_RANDOM_SUFFIX_LENGTH MAKE_E_HC(0x56eeL) // 0x892356ee
+#define E_PF_ALLOW_NON_UNIQUE_PLAYER_DISPLAY_NAMES_DISABLE_NOT_ALLOWED MAKE_E_HC(0x56efL) // 0x892356ef
+#define E_PF_PARTITIONED_EVENT_INVALID MAKE_E_HC(0x56f0L) // 0x892356f0
+#define E_PF_PARTITIONED_EVENT_COUNT_OVER_LIMIT MAKE_E_HC(0x56f1L) // 0x892356f1
+#define E_PF_MANAGE_EVENT_NAMESPACE_INVALID MAKE_E_HC(0x56f2L) // 0x892356f2
+#define E_PF_MANAGE_EVENT_NAME_INVALID MAKE_E_HC(0x56f3L) // 0x892356f3
+#define E_PF_MANAGED_EVENT_NOT_FOUND MAKE_E_HC(0x56f4L) // 0x892356f4
+#define E_PF_MANAGE_EVENTS_INVALID_RATIO MAKE_E_HC(0x56f5L) // 0x892356f5
+#define E_PF_MANAGED_EVENT_INVALID MAKE_E_HC(0x56f6L) // 0x892356f6
+#define E_PF_PLAYER_CUSTOM_PROPERTIES_PROPERTY_NAME_TOO_LONG MAKE_E_HC(0x56f7L) // 0x892356f7
+#define E_PF_PLAYER_CUSTOM_PROPERTIES_PROPERTY_NAME_IS_INVALID MAKE_E_HC(0x56f8L) // 0x892356f8
+#define E_PF_PLAYER_CUSTOM_PROPERTIES_STRING_PROPERTY_VALUE_TOO_LONG MAKE_E_HC(0x56f9L) // 0x892356f9
+#define E_PF_PLAYER_CUSTOM_PROPERTIES_VALUE_IS_INVALID_TYPE MAKE_E_HC(0x56faL) // 0x892356fa
+#define E_PF_PLAYER_CUSTOM_PROPERTIES_VERSION_MISMATCH MAKE_E_HC(0x56fbL) // 0x892356fb
+#define E_PF_PLAYER_CUSTOM_PROPERTIES_PROPERTY_COUNT_TOO_HIGH MAKE_E_HC(0x56fcL) // 0x892356fc
+#define E_PF_PLAYER_CUSTOM_PROPERTIES_DUPLICATE_PROPERTY_NAME MAKE_E_HC(0x56fdL) // 0x892356fd
+#define E_PF_PLAYER_CUSTOM_PROPERTIES_PROPERTY_DOES_NOT_EXIST MAKE_E_HC(0x56feL) // 0x892356fe
+#define E_PF_ADDON_ALREADY_EXISTS MAKE_E_HC(0x56ffL) // 0x892356ff
+#define E_PF_ADDON_DOESNT_EXIST MAKE_E_HC(0x5700L) // 0x89235700
}
diff --git a/Source/PlayFabCore/Include/playfab/httpClient/PFHttpClient.h b/Source/PlayFabCore/Include/playfab/httpClient/PFHttpClient.h
index 7060b60..8fb6dd2 100644
--- a/Source/PlayFabCore/Include/playfab/httpClient/PFHttpClient.h
+++ b/Source/PlayFabCore/Include/playfab/httpClient/PFHttpClient.h
@@ -755,7 +755,7 @@ enum class PFHCCompressionLevel : uint32_t
High = 9
};
-#if HC_PLATFORM == HC_PLATFORM_WIN32 || HC_PLATFORM == HC_PLATFORM_GDK
+#if HC_PLATFORM == HC_PLATFORM_WIN32 || HC_PLATFORM == HC_PLATFORM_GDK || HC_PLATFORM == HC_PLATFORM_NINTENDO_SWITCH
///
/// Enable GZIP compression on the provided body payload.
///
diff --git a/Source/PlayFabCore/Source/HttpClient/PFHttpClient.cpp b/Source/PlayFabCore/Source/HttpClient/PFHttpClient.cpp
index 98377b4..f2eff65 100644
--- a/Source/PlayFabCore/Source/HttpClient/PFHttpClient.cpp
+++ b/Source/PlayFabCore/Source/HttpClient/PFHttpClient.cpp
@@ -411,7 +411,7 @@ PF_API PFHCHttpCallResponseGetHeaderAtIndex(
);
}
-#if HC_PLATFORM == HC_PLATFORM_WIN32 || HC_PLATFORM == HC_PLATFORM_GDK
+#if HC_PLATFORM == HC_PLATFORM_WIN32 || HC_PLATFORM == HC_PLATFORM_GDK || HC_PLATFORM == HC_PLATFORM_NINTENDO_SWITCH
PF_API PFHCHttpCallRequestEnableGzipCompression(
_In_ PFHCCallHandle call,
diff --git a/Source/PlayFabServices/API-List.csv b/Source/PlayFabServices/API-List.csv
index 26210bd..cf2fc78 100644
--- a/Source/PlayFabServices/API-List.csv
+++ b/Source/PlayFabServices/API-List.csv
@@ -210,6 +210,7 @@ PF Services,AccountManagement,PFAccountManagementServerGetServerCustomIDsFromPla
PF Services,AccountManagement,PFAccountManagementServerGetUserAccountInfoAsync,SecretKey,Account Management,ServerGetUserAccountInfo,false,No,Yes,No,No
PF Services,AccountManagement,PFAccountManagementServerGetUserBansAsync,SecretKey,Account Management,ServerGetUserBans,false,No,Yes,No,No
PF Services,AccountManagement,PFAccountManagementServerLinkNintendoServiceAccountAsync,SecretKey,Account Management,ServerLinkNintendoServiceAccount,false,No,Yes,No,No
+PF Services,AccountManagement,PFAccountManagementServerLinkNintendoServiceAccountSubjectAsync,SecretKey,Account Management,ServerLinkNintendoServiceAccountSubject,false,No,Yes,No,No
PF Services,AccountManagement,PFAccountManagementServerLinkNintendoSwitchDeviceIdAsync,SecretKey,Account Management,ServerLinkNintendoSwitchDeviceId,false,No,Yes,No,No
PF Services,AccountManagement,PFAccountManagementServerLinkPSNAccountAsync,SecretKey,Account Management,ServerLinkPSNAccount,false,No,Yes,No,No
PF Services,AccountManagement,PFAccountManagementServerLinkPSNIdAsync,SecretKey,Account Management,ServerLinkPSNId,false,No,No,No,No
@@ -539,6 +540,7 @@ PF Services,MultiplayerServer,PFMultiplayerServerListQosServersForTitleAsync,Ent
PF Services,MultiplayerServer,PFMultiplayerServerListTitleMultiplayerServersQuotaChangesAsync,EntityToken,MultiplayerServer,ListTitleMultiplayerServersQuotaChanges,false,No,No,No,No
PF Services,MultiplayerServer,PFMultiplayerServerListVirtualMachineSummariesAsync,EntityToken,MultiplayerServer,ListVirtualMachineSummaries,false,No,No,No,No
PF Services,MultiplayerServer,PFMultiplayerServerRequestMultiplayerServerAsync,EntityToken,MultiplayerServer,RequestMultiplayerServer,false,Yes,Yes,Yes,Yes
+PF Services,MultiplayerServer,PFMultiplayerServerRequestPartyServiceAsync,EntityToken,MultiplayerServer,RequestPartyService,false,No,No,No,No
PF Services,MultiplayerServer,PFMultiplayerServerRolloverContainerRegistryCredentialsAsync,EntityToken,MultiplayerServer,RolloverContainerRegistryCredentials,false,No,No,No,No
PF Services,MultiplayerServer,PFMultiplayerServerShutdownMultiplayerServerAsync,EntityToken,MultiplayerServer,ShutdownMultiplayerServer,false,No,No,No,No
PF Services,MultiplayerServer,PFMultiplayerServerUntagContainerImageAsync,EntityToken,MultiplayerServer,UntagContainerImage,false,No,No,No,No
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/PFAccountManagement.h b/Source/PlayFabServices/Include/Generated/playfab/services/PFAccountManagement.h
index cfaf0f5..76ac667 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/PFAccountManagement.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/PFAccountManagement.h
@@ -2826,7 +2826,7 @@ PF_API PFAccountManagementServerGetUserBansGetResult(
/// Result code for this API operation.
///
/// This API is available on Win32.
-/// See also ServerUnlinkNintendoServiceAccountAsync.
+/// See also ServerLinkNintendoServiceAccountSubjectAsync, ServerUnlinkNintendoServiceAccountAsync.
///
/// Call to get the status of the operation. If the service call is unsuccessful,
/// the async result will be E_PF_INVALID_IDENTITY_PROVIDER_ID, E_PF_LINKED_IDENTIFIER_ALREADY_CLAIMED,
@@ -2840,6 +2840,31 @@ PF_API PFAccountManagementServerLinkNintendoServiceAccountAsync(
) noexcept;
#endif
+#if HC_PLATFORM == HC_PLATFORM_WIN32
+///
+/// Links the Nintendo account associated with the Nintendo Service Account subject or id to the user's
+/// PlayFab account
+///
+/// PFEntityHandle for a title Entity obtained using PFAuthenticationGetEntityWithSecretKeyAsync.
+/// Populated request object.
+/// XAsyncBlock for the async operation.
+/// Result code for this API operation.
+///
+/// This API is available on Win32.
+/// See also ServerLinkNintendoServiceAccountAsync, ServerUnlinkNintendoServiceAccountAsync.
+///
+/// Call to get the status of the operation. If the service call is unsuccessful,
+/// the async result will be E_PF_INVALID_IDENTITY_PROVIDER_ID, E_PF_LINKED_IDENTIFIER_ALREADY_CLAIMED,
+/// E_PF_NINTENDO_SWITCH_NOT_ENABLED_FOR_TITLE or any of the global PlayFab Service errors. See doc page
+/// "Handling PlayFab Errors" for more details on error handling.
+///
+PF_API PFAccountManagementServerLinkNintendoServiceAccountSubjectAsync(
+ _In_ PFEntityHandle titleEntityHandle,
+ _In_ const PFAccountManagementLinkNintendoServiceAccountSubjectRequest* request,
+ _Inout_ XAsyncBlock* async
+) noexcept;
+#endif
+
#if HC_PLATFORM == HC_PLATFORM_WIN32
///
/// Links the NintendoSwitchDeviceId to the user's PlayFab account
@@ -3169,7 +3194,7 @@ PF_API PFAccountManagementServerSendEmailFromTemplateAsync(
/// Result code for this API operation.
///
/// This API is available on Win32.
-/// See also ServerLinkNintendoServiceAccountAsync.
+/// See also ServerLinkNintendoServiceAccountAsync, ServerLinkNintendoServiceAccountSubjectAsync.
///
/// Call to get the status of the operation. If the service call is unsuccessful,
/// the async result will be E_PF_ACCOUNT_NOT_LINKED, E_PF_NINTENDO_SWITCH_NOT_ENABLED_FOR_TITLE or any
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/PFAccountManagementTypes.h b/Source/PlayFabServices/Include/Generated/playfab/services/PFAccountManagementTypes.h
index bb46c96..45d0bf2 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/PFAccountManagementTypes.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/PFAccountManagementTypes.h
@@ -2261,6 +2261,40 @@ typedef struct PFAccountManagementServerLinkNintendoServiceAccountRequest
} PFAccountManagementServerLinkNintendoServiceAccountRequest;
+///
+/// PFAccountManagementLinkNintendoServiceAccountSubjectRequest data model.
+///
+typedef struct PFAccountManagementLinkNintendoServiceAccountSubjectRequest
+{
+ ///
+ /// (Optional) The optional custom tags associated with the request (e.g. build number, external
+ /// trace identifiers, etc.).
+ ///
+ _Maybenull_ _Field_size_(customTagsCount) struct PFStringDictionaryEntry const* customTags;
+
+ ///
+ /// Count of customTags
+ ///
+ uint32_t customTagsCount;
+
+ ///
+ /// (Optional) If another user is already linked to a specific Nintendo Service Account, unlink the
+ /// other user and re-link.
+ ///
+ _Maybenull_ bool const* forceLink;
+
+ ///
+ /// Unique PlayFab assigned ID of the user on whom the operation will be performed.
+ ///
+ _Null_terminated_ const char* playFabId;
+
+ ///
+ /// The Nintendo Service Account subject or id to link to the PlayFab user.
+ ///
+ _Null_terminated_ const char* subject;
+
+} PFAccountManagementLinkNintendoServiceAccountSubjectRequest;
+
///
/// PFAccountManagementServerLinkNintendoSwitchDeviceIdRequest data model.
///
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/PFData.h b/Source/PlayFabServices/Include/Generated/playfab/services/PFData.h
index dc8c581..36a4ae9 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/PFData.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/PFData.h
@@ -22,8 +22,7 @@ extern "C"
/// Result code for this API operation.
///
/// This API is available on all platforms.
-/// Aborts the pending upload of the requested files. See also FileDeleteFilesAsync, FileFinalizeFileUploadsAsync,
-/// FileGetFilesAsync, FileInitiateFileUploadsAsync.
+/// Aborts the pending upload of the requested files.
///
/// When the asynchronous task is complete, call and
/// to get the result.
@@ -82,8 +81,7 @@ PF_API PFDataAbortFileUploadsGetResult(
/// Result code for this API operation.
///
/// This API is available on all platforms.
-/// Deletes the requested files from the entity's profile. See also FileAbortFileUploadsAsync, FileFinalizeFileUploadsAsync,
-/// FileGetFilesAsync, FileInitiateFileUploadsAsync.
+/// Deletes the requested files from the entity's profile.
///
/// When the asynchronous task is complete, call and to get the result.
@@ -143,8 +141,7 @@ PF_API PFDataDeleteFilesGetResult(
///
/// This API is available on all platforms.
/// Finalizes the upload of the requested files. Verifies that the files have been successfully uploaded
-/// and moves the file pointers from pending to live. See also FileAbortFileUploadsAsync, FileDeleteFilesAsync,
-/// FileGetFilesAsync, FileInitiateFileUploadsAsync.
+/// and moves the file pointers from pending to live.
///
/// When the asynchronous task is complete, call
/// and to get the result.
@@ -321,8 +318,7 @@ PF_API PFDataGetObjectsGetResult(
///
/// This API is available on all platforms.
/// Returns URLs that may be used to upload the files for a profile 5 minutes. After using the upload
-/// calls FinalizeFileUploads must be called to move the file status from pending to live. See also FileAbortFileUploadsAsync,
-/// FileDeleteFilesAsync, FileFinalizeFileUploadsAsync, FileGetFilesAsync.
+/// calls FinalizeFileUploads must be called to move the file status from pending to live.
///
/// When the asynchronous task is complete, call
/// and to get the result.
@@ -385,7 +381,7 @@ PF_API PFDataInitiateFileUploadsGetResult(
/// optimistic concurrency operations during update. If the current version differs from the version in
/// the request the request will be ignored. If no version is set on the request then the value will always
/// be updated if the values differ. Using the version value does not guarantee a write though, ConcurrentEditError
-/// may still occur if multiple clients are attempting to update the same profile. See also ObjectGetObjectsAsync.
+/// may still occur if multiple clients are attempting to update the same profile. .
///
/// When the asynchronous task is complete, call and to get the result.
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/PFGroups.h b/Source/PlayFabServices/Include/Generated/playfab/services/PFGroups.h
index 87e2150..2567f00 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/PFGroups.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/PFGroups.h
@@ -74,7 +74,8 @@ PF_API PFGroupsAcceptGroupInvitationAsync(
/// Adds members to a group or role. Existing members of the group will added to roles within the group,
/// but if the user is not already a member of the group, only title claimants may add them to the group,
/// and others must use the group application or invite system to add new members to a group. Returns
-/// nothing if successful.
+/// nothing if successful. See also GroupApplyToGroupAsync, GroupInviteToGroupAsync, GroupListGroupMembersAsync,
+/// GroupRemoveMembersAsync.
///
/// Call to get the status of the operation. If the service call is unsuccessful,
/// the async result will be E_PF_ROLE_DOES_NOT_EXIST or any of the global PlayFab Service errors. See
@@ -100,7 +101,8 @@ PF_API PFGroupsAddMembersAsync(
/// expires. By default, if the entity has an invitation to join the group outstanding, this will accept
/// the invitation to join the group instead and return an error indicating such, rather than creating
/// a duplicate application to join that will need to be cleaned up later. Returns information about the
-/// application or an error indicating an invitation was accepted instead.
+/// application or an error indicating an invitation was accepted instead. See also GroupAcceptGroupApplicationAsync,
+/// GroupListGroupApplicationsAsync, GroupRemoveGroupApplicationAsync.
///
/// When the asynchronous task is complete, call and
/// to get the result.
@@ -185,7 +187,8 @@ PF_API PFGroupsBlockEntityAsync(
/// This API is available on all platforms.
/// Changes the role membership of a list of entities from one role to another in in a single operation.
/// The destination role must already exist. This is equivalent to adding the entities to the destination
-/// role and removing from the origin role. Returns nothing if successful.
+/// role and removing from the origin role. Returns nothing if successful. See also GroupAddMembersAsync,
+/// GroupCreateRoleAsync, GroupRemoveMembersAsync.
///
/// Call to get the status of the operation. If the service call is unsuccessful,
/// the async result will be E_PF_ROLE_DOES_NOT_EXIST or any of the global PlayFab Service errors. See
@@ -207,7 +210,8 @@ PF_API PFGroupsChangeMemberRoleAsync(
///
/// This API is available on all platforms.
/// Creates a new group, as well as administration and member roles, based off of a title's group template.
-/// Returns information about the group that was created.
+/// Returns information about the group that was created. See also GroupAddMembersAsync, GroupApplyToGroupAsync,
+/// GroupDeleteGroupAsync, GroupInviteToGroupAsync, GroupListGroupMembersAsync, GroupRemoveMembersAsync.
///
/// When the asynchronous task is complete, call and to get the result.
@@ -268,7 +272,7 @@ PF_API PFGroupsCreateGroupGetResult(
/// This API is available on all platforms.
/// Creates a new role within an existing group, with no members. Both the role ID and role name must
/// be unique within the group, but the name can be the same as the ID. The role ID is set at creation
-/// and cannot be changed. Returns information about the role that was created.
+/// and cannot be changed. Returns information about the role that was created. See also GroupDeleteRoleAsync.
///
/// When the asynchronous task is complete, call and to get the result.
@@ -330,7 +334,7 @@ PF_API PFGroupsCreateRoleGetResult(
/// Deletes a group and all roles, invitations, join requests, and blocks associated with it. Permission
/// to delete is only required the group itself to execute this action. The group and data cannot be cannot
/// be recovered once removed, but any abuse reports about the group will remain. No data is returned
-/// in the case of success.
+/// in the case of success. See also GroupCreateGroupAsync.
///
/// Call to get the status of the operation. If the service call is unsuccessful,
/// the async result will be one of global PlayFab Service errors. See doc page "Handling PlayFab Errors"
@@ -351,7 +355,7 @@ PF_API PFGroupsDeleteGroupAsync(
/// Result code for this API operation.
///
/// This API is available on all platforms.
-/// Returns information about the role.
+/// Returns information about the role See also GroupCreateRoleAsync.
///
/// Call to get the status of the operation. If the service call is unsuccessful,
/// the async result will be E_PF_ROLE_DOES_NOT_EXIST, E_PF_ROLE_IS_GROUP_ADMIN, E_PF_ROLE_IS_GROUP_DEFAULT_MEMBER
@@ -373,7 +377,8 @@ PF_API PFGroupsDeleteRoleAsync(
/// Result code for this API operation.
///
/// This API is available on all platforms.
-/// Returns the ID, name, role list and other non-membership related information about a group.
+/// Returns the ID, name, role list and other non-membership related information about a group. See also
+/// GroupUpdateGroupAsync.
///
/// When the asynchronous task is complete, call and to get the result.
@@ -435,7 +440,8 @@ PF_API PFGroupsGetGroupGetResult(
/// has an application to the group outstanding, this will accept the application instead and return an
/// error indicating such, rather than creating a duplicate invitation to join that will need to be cleaned
/// up later. Returns information about the new invitation or an error indicating an existing application
-/// to join was accepted.
+/// to join was accepted. See also GroupAcceptGroupInvitationAsync, GroupListGroupInvitationsAsync, GroupListMembershipOpportunitiesAsync,
+/// GroupRemoveGroupInvitationAsync.
///
/// When the asynchronous task is complete, call and
/// to get the result.
@@ -534,6 +540,7 @@ PF_API PFGroupsIsMemberGetResult(
/// This API is available on all platforms.
/// Lists all outstanding requests to join a group. Returns a list of all requests to join, as well as
/// when the request will expire. To get the group applications for a specific entity, use ListMembershipOpportunities.
+/// See also GroupAcceptGroupApplicationAsync, GroupApplyToGroupAsync, GroupRemoveGroupApplicationAsync.
///
/// When the asynchronous task is complete, call
/// and to get the result.
@@ -590,7 +597,8 @@ PF_API PFGroupsListGroupApplicationsGetResult(
/// Result code for this API operation.
///
/// This API is available on all platforms.
-/// Lists all entities blocked from joining a group. A list of blocked entities is returned.
+/// Lists all entities blocked from joining a group. A list of blocked entities is returned See also
+/// GroupBlockEntityAsync, GroupUnblockEntityAsync.
///
/// When the asynchronous task is complete, call and
/// to get the result.
@@ -829,6 +837,7 @@ PF_API PFGroupsListMembershipGetResult(
/// Lists all outstanding group applications and invitations for an entity. Anyone may call this for
/// any entity, but data will only be returned for the entity or a parent of that entity. To list invitations
/// or applications for a group to check if a player is trying to join, use ListGroupInvitations and ListGroupApplications.
+/// See also GroupListGroupApplicationsAsync, GroupListGroupInvitationsAsync.
///
/// When the asynchronous task is complete, call
/// and to get the result.
@@ -888,7 +897,8 @@ PF_API PFGroupsListMembershipOpportunitiesGetResult(
/// Removes an existing application to join the group. This is used for both rejection of an application
/// as well as withdrawing an application. The applying entity or a parent in its chain (e.g. title) may
/// withdraw the application, and any caller with appropriate access in the group may reject an application.
-/// No data is returned in the case of success.
+/// No data is returned in the case of success. See also GroupAcceptGroupApplicationAsync, GroupApplyToGroupAsync,
+/// GroupListGroupApplicationsAsync.
///
/// Call to get the status of the operation. If the service call is unsuccessful,
/// the async result will be E_PF_GROUP_APPLICATION_NOT_FOUND or any of the global PlayFab Service errors.
@@ -956,7 +966,8 @@ PF_API PFGroupsRemoveMembersAsync(
/// Result code for this API operation.
///
/// This API is available on all platforms.
-/// Unblocks a list of entities from joining a group. No data is returned in the case of success.
+/// Unblocks a list of entities from joining a group. No data is returned in the case of success. See
+/// also GroupBlockEntityAsync, GroupListGroupBlocksAsync.
///
/// Call to get the status of the operation. If the service call is unsuccessful,
/// the async result will be one of global PlayFab Service errors. See doc page "Handling PlayFab Errors"
@@ -978,7 +989,8 @@ PF_API PFGroupsUnblockEntityAsync(
///
/// This API is available on all platforms.
/// Updates data about a group, such as the name or default member role. Returns information about whether
-/// the update was successful. Only title claimants may modify the administration role for a group.
+/// the update was successful. Only title claimants may modify the administration role for a group. See
+/// also GroupCreateGroupAsync, GroupDeleteGroupAsync, GroupGetGroupAsync.
///
/// When the asynchronous task is complete, call and to get the result.
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/PFMultiplayerServer.h b/Source/PlayFabServices/Include/Generated/playfab/services/PFMultiplayerServer.h
index 5320ad2..6863260 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/PFMultiplayerServer.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/PFMultiplayerServer.h
@@ -273,5 +273,68 @@ PF_API PFMultiplayerServerRequestMultiplayerServerGetResult(
_Out_opt_ size_t* bufferUsed
) noexcept;
+#if 0
+///
+/// Request a party session.
+///
+/// PFEntityHandle to use for authentication.
+/// Populated request object.
+/// XAsyncBlock for the async operation.
+/// Result code for this API operation.
+///
+/// Requests a party session from a particular set of builds if build alias params is provided, in any
+/// of the given preferred regions.
+///
+/// When the asynchronous task is complete, call
+/// and to get the result.
+///
+PF_API PFMultiplayerServerRequestPartyServiceAsync(
+ _In_ PFEntityHandle entityHandle,
+ _In_ const PFMultiplayerServerRequestPartyServiceRequest* request,
+ _Inout_ XAsyncBlock* async
+) noexcept;
+
+///
+/// Get the size in bytes needed to store the result of a RequestPartyService call.
+///
+/// XAsyncBlock for the async operation.
+/// The buffer size in bytes required for the result.
+///
+/// Result code for this API operation. If the service call is unsuccessful, the result will be E_PF_PARTY_BAD_REQUEST,
+/// E_PF_PARTY_INTERNAL_SERVER_ERROR, E_PF_PARTY_NOT_FOUND, E_PF_PARTY_REQUESTS_THROTTLED_FROM_RATE_LIMITER,
+/// E_PF_PARTY_TOO_MANY_REQUESTS, E_PF_PARTY_UNAUTHORIZED, E_PF_PARTY_UNAVAILABLE or any of the global
+/// PlayFab Service errors. See doc page "Handling PlayFab Errors" for more details on error handling.
+///
+PF_API PFMultiplayerServerRequestPartyServiceGetResultSize(
+ _Inout_ XAsyncBlock* async,
+ _Out_ size_t* bufferSize
+) noexcept;
+
+///
+/// Gets the result of a successful PFMultiplayerServerRequestPartyServiceAsync call.
+///
+/// XAsyncBlock for the async operation.
+/// The size of the buffer for the result object.
+/// Byte buffer used for the result value and its fields.
+/// Pointer to the result object.
+/// The number of bytes in the provided buffer that were used.
+///
+/// Result code for this API operation. If the service call is unsuccessful, the result will be E_PF_PARTY_BAD_REQUEST,
+/// E_PF_PARTY_INTERNAL_SERVER_ERROR, E_PF_PARTY_NOT_FOUND, E_PF_PARTY_REQUESTS_THROTTLED_FROM_RATE_LIMITER,
+/// E_PF_PARTY_TOO_MANY_REQUESTS, E_PF_PARTY_UNAUTHORIZED, E_PF_PARTY_UNAVAILABLE or any of the global
+/// PlayFab Service errors. See doc page "Handling PlayFab Errors" for more details on error handling.
+///
+///
+/// result is a pointer within buffer and does not need to be freed separately.
+///
+PF_API PFMultiplayerServerRequestPartyServiceGetResult(
+ _Inout_ XAsyncBlock* async,
+ _In_ size_t bufferSize,
+ _Out_writes_bytes_to_(bufferSize, *bufferUsed) void* buffer,
+ _Outptr_ PFMultiplayerServerRequestPartyServiceResponse** result,
+ _Out_opt_ size_t* bufferUsed
+) noexcept;
+#endif
+
}
\ No newline at end of file
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/PFMultiplayerServerTypes.h b/Source/PlayFabServices/Include/Generated/playfab/services/PFMultiplayerServerTypes.h
index 4a76fd3..32a3669 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/PFMultiplayerServerTypes.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/PFMultiplayerServerTypes.h
@@ -779,6 +779,144 @@ typedef struct PFMultiplayerServerRequestMultiplayerServerResponse
} PFMultiplayerServerRequestMultiplayerServerResponse;
+///
+/// PFMultiplayerServerPartyInvitationConfiguration data model.
+///
+typedef struct PFMultiplayerServerPartyInvitationConfiguration
+{
+ ///
+ /// (Optional) The list of PlayFab EntityKeys that the invitation allows to authenticate into the
+ /// network. If this list is empty, all users are allowed to authenticate using the invitation's identifier.
+ /// This list may contain no more than 1024 items.
+ ///
+ _Maybenull_ _Field_size_(entityKeysCount) PFEntityKey const* const* entityKeys;
+
+ ///
+ /// Count of entityKeys
+ ///
+ uint32_t entityKeysCount;
+
+ ///
+ /// (Optional) The invite identifier for this party. If this value is specified, it must be no longer
+ /// than 127 characters.
+ ///
+ _Maybenull_ _Null_terminated_ const char* identifier;
+
+ ///
+ /// (Optional) Controls which participants can revoke this invite.
+ ///
+ _Maybenull_ _Null_terminated_ const char* revocability;
+
+} PFMultiplayerServerPartyInvitationConfiguration;
+
+///
+/// PFMultiplayerServerPartyNetworkConfiguration data model.
+///
+typedef struct PFMultiplayerServerPartyNetworkConfiguration
+{
+ ///
+ /// (Optional) Controls whether and how to support direct peer-to-peer connection attempts among
+ /// devices in the network.
+ ///
+ _Maybenull_ _Null_terminated_ const char* directPeerConnectivityOptions;
+
+ ///
+ /// The maximum number of devices allowed to connect to the network. Must be between 1 and 32, inclusive.
+ ///
+ uint32_t maxDevices;
+
+ ///
+ /// The maximum number of devices allowed per user. Must be greater than 0.
+ ///
+ uint32_t maxDevicesPerUser;
+
+ ///
+ /// The maximum number of endpoints allowed per device. Must be between 0 and 32, inclusive.
+ ///
+ uint32_t maxEndpointsPerDevice;
+
+ ///
+ /// The maximum number of unique users allowed in the network. Must be greater than 0.
+ ///
+ uint32_t maxUsers;
+
+ ///
+ /// The maximum number of users allowed per device. Must be between 1 and 8, inclusive.
+ ///
+ uint32_t maxUsersPerDevice;
+
+ ///
+ /// (Optional) An optionally-specified configuration for the initial invitation for this party. If
+ /// not provided, default configuration values will be used: a title-unique invitation identifier
+ /// will be generated, the revocability will be Anyone, and the EntityID list will be empty.
+ ///
+ _Maybenull_ PFMultiplayerServerPartyInvitationConfiguration const* partyInvitationConfiguration;
+
+} PFMultiplayerServerPartyNetworkConfiguration;
+
+///
+/// PFMultiplayerServerRequestPartyServiceRequest data model. Requests a party session from a particular
+/// set of builds if build alias params is provided, in any of the given preferred regions.
+///
+typedef struct PFMultiplayerServerRequestPartyServiceRequest
+{
+ ///
+ /// (Optional) The optional custom tags associated with the request (e.g. build number, external
+ /// trace identifiers, etc.).
+ ///
+ _Maybenull_ _Field_size_(customTagsCount) struct PFStringDictionaryEntry const* customTags;
+
+ ///
+ /// Count of customTags
+ ///
+ uint32_t customTagsCount;
+
+ ///
+ /// The network configuration for this request.
+ ///
+ PFMultiplayerServerPartyNetworkConfiguration const* networkConfiguration;
+
+ ///
+ /// (Optional) A guid string party ID created track the party session over its life.
+ ///
+ _Maybenull_ _Null_terminated_ const char* partyId;
+
+ ///
+ /// The preferred regions to request a party session from. The party service will iterate through
+ /// the regions in the specified order and allocate a party session from the first one that is available.
+ ///
+ _Field_size_(preferredRegionsCount) const char* const* preferredRegions;
+
+ ///
+ /// Count of preferredRegions
+ ///
+ uint32_t preferredRegionsCount;
+
+} PFMultiplayerServerRequestPartyServiceRequest;
+
+///
+/// PFMultiplayerServerRequestPartyServiceResponse data model.
+///
+typedef struct PFMultiplayerServerRequestPartyServiceResponse
+{
+ ///
+ /// (Optional) The invitation identifier supplied in the PartyInvitationConfiguration, or the PlayFab-generated
+ /// guid if none was supplied.
+ ///
+ _Maybenull_ _Null_terminated_ const char* invitationId;
+
+ ///
+ /// (Optional) The guid string party ID of the party session.
+ ///
+ _Maybenull_ _Null_terminated_ const char* partyId;
+
+ ///
+ /// (Optional) A base-64 encoded string containing the serialized network descriptor for this party.
+ ///
+ _Maybenull_ _Null_terminated_ const char* serializedNetworkDescriptor;
+
+} PFMultiplayerServerRequestPartyServiceResponse;
+
#pragma pop_macro("IN")
}
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/PFProfiles.h b/Source/PlayFabServices/Include/Generated/playfab/services/PFProfiles.h
index 3973c0a..f925cd3 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/PFProfiles.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/PFProfiles.h
@@ -261,7 +261,7 @@ PF_API PFProfilesSetProfileLanguageGetResult(
///
/// This API is available on all platforms.
/// This will set the access policy statements on the given entity profile. This is not additive, any
-/// existing statements will be replaced with the statements in this request.
+/// existing statements will be replaced with the statements in this request. See also ProfileGetProfileAsync.
///
/// When the asynchronous task is complete, call
/// and to get the result.
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/PFProfilesTypes.h b/Source/PlayFabServices/Include/Generated/playfab/services/PFProfilesTypes.h
index d32cf9d..c3fb703 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/PFProfilesTypes.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/PFProfilesTypes.h
@@ -148,11 +148,48 @@ typedef struct PFProfilesEntityPermissionStatement
} PFProfilesEntityPermissionStatement;
+///
+/// PFProfilesEntityStatisticAttributeValue data model.
+///
+typedef struct PFProfilesEntityStatisticAttributeValue
+{
+ ///
+ /// (Optional) Metadata associated with the Statistic.
+ ///
+ _Maybenull_ _Null_terminated_ const char* metadata;
+
+ ///
+ /// (Optional) Attribute name.
+ ///
+ _Maybenull_ _Null_terminated_ const char* name;
+
+ ///
+ /// (Optional) Attribute Statistic scores.
+ ///
+ _Maybenull_ _Field_size_(scoresCount) const char* const* scores;
+
+ ///
+ /// Count of scores
+ ///
+ uint32_t scoresCount;
+
+} PFProfilesEntityStatisticAttributeValue;
+
///
/// PFProfilesEntityStatisticValue data model.
///
typedef struct PFProfilesEntityStatisticValue
{
+ ///
+ /// (Optional) Attribute Statistic values.
+ ///
+ _Maybenull_ _Field_size_(attributeStatisticsCount) struct PFProfilesEntityStatisticAttributeValueDictionaryEntry const* attributeStatistics;
+
+ ///
+ /// Count of attributeStatistics
+ ///
+ uint32_t attributeStatisticsCount;
+
///
/// (Optional) Metadata associated with the Statistic.
///
@@ -163,6 +200,16 @@ typedef struct PFProfilesEntityStatisticValue
///
_Maybenull_ _Null_terminated_ const char* name;
+ ///
+ /// (Optional) Statistic scores.
+ ///
+ _Maybenull_ _Field_size_(scoresCount) const char* const* scores;
+
+ ///
+ /// Count of scores
+ ///
+ uint32_t scoresCount;
+
///
/// (Optional) Statistic value.
///
@@ -530,6 +577,15 @@ typedef struct PFProfilesEntityStatisticValueDictionaryEntry
PFProfilesEntityStatisticValue const* value;
} PFProfilesEntityStatisticValueDictionaryEntry;
+///
+/// Dictionary entry for an associative array with PFProfilesEntityStatisticAttributeValue values.
+///
+typedef struct PFProfilesEntityStatisticAttributeValueDictionaryEntry
+{
+ _Null_terminated_ const char* key;
+ PFProfilesEntityStatisticAttributeValue const* value;
+} PFProfilesEntityStatisticAttributeValueDictionaryEntry;
+
#pragma pop_macro("IN")
}
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/cpp/AccountManagementTypeWrappers.h b/Source/PlayFabServices/Include/Generated/playfab/services/cpp/AccountManagementTypeWrappers.h
index 6d69511..615f1a5 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/cpp/AccountManagementTypeWrappers.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/cpp/AccountManagementTypeWrappers.h
@@ -7018,6 +7018,97 @@ class PFAccountManagementServerLinkNintendoServiceAccountRequestWrapper : public
String m_playFabId;
};
+template class Alloc = std::allocator>
+class PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper : public ModelWrapper
+{
+public:
+ using ModelType = PFAccountManagementLinkNintendoServiceAccountSubjectRequest;
+ using String = typename std::basic_string, Alloc>;
+ template using Vector = typename std::vector>;
+
+ PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper() = default;
+
+ PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper(const PFAccountManagementLinkNintendoServiceAccountSubjectRequest& model) :
+ ModelWrapper{ model },
+ m_customTags{ model.customTags, model.customTags + model.customTagsCount },
+ m_forceLink{ model.forceLink ? std::optional{ *model.forceLink } : std::nullopt },
+ m_playFabId{ SafeString(model.playFabId) },
+ m_subject{ SafeString(model.subject) }
+ {
+ SetModelPointers();
+ }
+
+ PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper(const PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper& src) :
+ PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper{ src.Model() }
+ {
+ }
+
+ PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper(PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper&& src) :
+ PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper{}
+ {
+ swap(*this, src);
+ }
+
+ PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper& operator=(PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper src)
+ {
+ swap(*this, src);
+ return *this;
+ }
+
+ virtual ~PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper() = default;
+
+ friend void swap(PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper& lhs, PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper& rhs)
+ {
+ using std::swap;
+ swap(lhs.m_model, rhs.m_model);
+ swap(lhs.m_customTags, rhs.m_customTags);
+ swap(lhs.m_forceLink, rhs.m_forceLink);
+ swap(lhs.m_playFabId, rhs.m_playFabId);
+ swap(lhs.m_subject, rhs.m_subject);
+ lhs.SetModelPointers();
+ rhs.SetModelPointers();
+ }
+
+ void SetCustomTags(StringDictionaryEntryVector value)
+ {
+ m_customTags = std::move(value);
+ this->m_model.customTags = m_customTags.empty() ? nullptr : m_customTags.data();
+ this->m_model.customTagsCount = static_cast(m_customTags.size());
+ }
+
+ void SetForceLink(std::optional value)
+ {
+ m_forceLink = std::move(value);
+ this->m_model.forceLink = m_forceLink ? m_forceLink.operator->() : nullptr;
+ }
+
+ void SetPlayFabId(String value)
+ {
+ m_playFabId = std::move(value);
+ this->m_model.playFabId = m_playFabId.empty() ? nullptr : m_playFabId.data();
+ }
+
+ void SetSubject(String value)
+ {
+ m_subject = std::move(value);
+ this->m_model.subject = m_subject.empty() ? nullptr : m_subject.data();
+ }
+
+private:
+ void SetModelPointers()
+ {
+ this->m_model.customTags = m_customTags.empty() ? nullptr : m_customTags.data();
+ this->m_model.forceLink = m_forceLink ? m_forceLink.operator->() : nullptr;
+ this->m_model.playFabId = m_playFabId.empty() ? nullptr : m_playFabId.data();
+ this->m_model.subject = m_subject.empty() ? nullptr : m_subject.data();
+ }
+
+ StringDictionaryEntryVector m_customTags;
+ std::optional m_forceLink;
+ String m_playFabId;
+ String m_subject;
+};
+
template class Alloc = std::allocator>
class PFAccountManagementServerLinkNintendoSwitchDeviceIdRequestWrapper : public ModelWrapper
{
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/cpp/MultiplayerServerTypeWrappers.h b/Source/PlayFabServices/Include/Generated/playfab/services/cpp/MultiplayerServerTypeWrappers.h
index f278286..6d0e974 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/cpp/MultiplayerServerTypeWrappers.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/cpp/MultiplayerServerTypeWrappers.h
@@ -1774,5 +1774,353 @@ class PFMultiplayerServerRequestMultiplayerServerResponseWrapper : public ModelW
String m_vmId;
};
+template class Alloc = std::allocator>
+class PFMultiplayerServerPartyInvitationConfigurationWrapper : public ModelWrapper
+{
+public:
+ using ModelType = PFMultiplayerServerPartyInvitationConfiguration;
+ using String = typename std::basic_string, Alloc>;
+ template using Vector = typename std::vector>;
+
+ PFMultiplayerServerPartyInvitationConfigurationWrapper() = default;
+
+ PFMultiplayerServerPartyInvitationConfigurationWrapper(const PFMultiplayerServerPartyInvitationConfiguration& model) :
+ ModelWrapper{ model },
+ m_entityKeys{ model.entityKeys, model.entityKeys + model.entityKeysCount },
+ m_identifier{ SafeString(model.identifier) },
+ m_revocability{ SafeString(model.revocability) }
+ {
+ SetModelPointers();
+ }
+
+ PFMultiplayerServerPartyInvitationConfigurationWrapper(const PFMultiplayerServerPartyInvitationConfigurationWrapper& src) :
+ PFMultiplayerServerPartyInvitationConfigurationWrapper{ src.Model() }
+ {
+ }
+
+ PFMultiplayerServerPartyInvitationConfigurationWrapper(PFMultiplayerServerPartyInvitationConfigurationWrapper&& src) :
+ PFMultiplayerServerPartyInvitationConfigurationWrapper{}
+ {
+ swap(*this, src);
+ }
+
+ PFMultiplayerServerPartyInvitationConfigurationWrapper& operator=(PFMultiplayerServerPartyInvitationConfigurationWrapper src)
+ {
+ swap(*this, src);
+ return *this;
+ }
+
+ virtual ~PFMultiplayerServerPartyInvitationConfigurationWrapper() = default;
+
+ friend void swap(PFMultiplayerServerPartyInvitationConfigurationWrapper& lhs, PFMultiplayerServerPartyInvitationConfigurationWrapper& rhs)
+ {
+ using std::swap;
+ swap(lhs.m_model, rhs.m_model);
+ swap(lhs.m_entityKeys, rhs.m_entityKeys);
+ swap(lhs.m_identifier, rhs.m_identifier);
+ swap(lhs.m_revocability, rhs.m_revocability);
+ lhs.SetModelPointers();
+ rhs.SetModelPointers();
+ }
+
+ void SetEntityKeys(ModelVector, Alloc> value)
+ {
+ m_entityKeys = std::move(value);
+ this->m_model.entityKeys = m_entityKeys.empty() ? nullptr : m_entityKeys.data();
+ this->m_model.entityKeysCount = static_cast(m_entityKeys.size());
+ }
+
+ void SetIdentifier(String value)
+ {
+ m_identifier = std::move(value);
+ this->m_model.identifier = m_identifier.empty() ? nullptr : m_identifier.data();
+ }
+
+ void SetRevocability(String value)
+ {
+ m_revocability = std::move(value);
+ this->m_model.revocability = m_revocability.empty() ? nullptr : m_revocability.data();
+ }
+
+private:
+ void SetModelPointers()
+ {
+ this->m_model.entityKeys = m_entityKeys.empty() ? nullptr : m_entityKeys.data();
+ this->m_model.identifier = m_identifier.empty() ? nullptr : m_identifier.data();
+ this->m_model.revocability = m_revocability.empty() ? nullptr : m_revocability.data();
+ }
+
+ ModelVector, Alloc> m_entityKeys;
+ String m_identifier;
+ String m_revocability;
+};
+
+template class Alloc = std::allocator>
+class PFMultiplayerServerPartyNetworkConfigurationWrapper : public ModelWrapper
+{
+public:
+ using ModelType = PFMultiplayerServerPartyNetworkConfiguration;
+ using String = typename std::basic_string, Alloc>;
+ template using Vector = typename std::vector>;
+
+ PFMultiplayerServerPartyNetworkConfigurationWrapper() = default;
+
+ PFMultiplayerServerPartyNetworkConfigurationWrapper(const PFMultiplayerServerPartyNetworkConfiguration& model) :
+ ModelWrapper{ model },
+ m_directPeerConnectivityOptions{ SafeString(model.directPeerConnectivityOptions) },
+ m_partyInvitationConfiguration{ model.partyInvitationConfiguration ? std::optional>{ *model.partyInvitationConfiguration } : std::nullopt }
+ {
+ SetModelPointers();
+ }
+
+ PFMultiplayerServerPartyNetworkConfigurationWrapper(const PFMultiplayerServerPartyNetworkConfigurationWrapper& src) :
+ PFMultiplayerServerPartyNetworkConfigurationWrapper{ src.Model() }
+ {
+ }
+
+ PFMultiplayerServerPartyNetworkConfigurationWrapper(PFMultiplayerServerPartyNetworkConfigurationWrapper&& src) :
+ PFMultiplayerServerPartyNetworkConfigurationWrapper{}
+ {
+ swap(*this, src);
+ }
+
+ PFMultiplayerServerPartyNetworkConfigurationWrapper& operator=(PFMultiplayerServerPartyNetworkConfigurationWrapper src)
+ {
+ swap(*this, src);
+ return *this;
+ }
+
+ virtual ~PFMultiplayerServerPartyNetworkConfigurationWrapper() = default;
+
+ friend void swap(PFMultiplayerServerPartyNetworkConfigurationWrapper& lhs, PFMultiplayerServerPartyNetworkConfigurationWrapper& rhs)
+ {
+ using std::swap;
+ swap(lhs.m_model, rhs.m_model);
+ swap(lhs.m_directPeerConnectivityOptions, rhs.m_directPeerConnectivityOptions);
+ swap(lhs.m_partyInvitationConfiguration, rhs.m_partyInvitationConfiguration);
+ lhs.SetModelPointers();
+ rhs.SetModelPointers();
+ }
+
+ void SetDirectPeerConnectivityOptions(String value)
+ {
+ m_directPeerConnectivityOptions = std::move(value);
+ this->m_model.directPeerConnectivityOptions = m_directPeerConnectivityOptions.empty() ? nullptr : m_directPeerConnectivityOptions.data();
+ }
+
+ void SetMaxDevices(uint32_t value)
+ {
+ this->m_model.maxDevices = value;
+ }
+
+ void SetMaxDevicesPerUser(uint32_t value)
+ {
+ this->m_model.maxDevicesPerUser = value;
+ }
+
+ void SetMaxEndpointsPerDevice(uint32_t value)
+ {
+ this->m_model.maxEndpointsPerDevice = value;
+ }
+
+ void SetMaxUsers(uint32_t value)
+ {
+ this->m_model.maxUsers = value;
+ }
+
+ void SetMaxUsersPerDevice(uint32_t value)
+ {
+ this->m_model.maxUsersPerDevice = value;
+ }
+
+ void SetPartyInvitationConfiguration(std::optional> value)
+ {
+ m_partyInvitationConfiguration = std::move(value);
+ this->m_model.partyInvitationConfiguration = m_partyInvitationConfiguration ? &m_partyInvitationConfiguration->Model() : nullptr;
+ }
+
+private:
+ void SetModelPointers()
+ {
+ this->m_model.directPeerConnectivityOptions = m_directPeerConnectivityOptions.empty() ? nullptr : m_directPeerConnectivityOptions.data();
+ this->m_model.partyInvitationConfiguration = m_partyInvitationConfiguration ? &m_partyInvitationConfiguration->Model() : nullptr;
+ }
+
+ String m_directPeerConnectivityOptions;
+ std::optional> m_partyInvitationConfiguration;
+};
+
+template class Alloc = std::allocator>
+class PFMultiplayerServerRequestPartyServiceRequestWrapper : public ModelWrapper
+{
+public:
+ using ModelType = PFMultiplayerServerRequestPartyServiceRequest;
+ using String = typename std::basic_string, Alloc>;
+ template using Vector = typename std::vector>;
+
+ PFMultiplayerServerRequestPartyServiceRequestWrapper() = default;
+
+ PFMultiplayerServerRequestPartyServiceRequestWrapper(const PFMultiplayerServerRequestPartyServiceRequest& model) :
+ ModelWrapper{ model },
+ m_customTags{ model.customTags, model.customTags + model.customTagsCount },
+ m_networkConfiguration{ model.networkConfiguration ? *model.networkConfiguration : decltype(*model.networkConfiguration){} },
+ m_partyId{ SafeString(model.partyId) },
+ m_preferredRegions{ model.preferredRegions, model.preferredRegions + model.preferredRegionsCount }
+ {
+ SetModelPointers();
+ }
+
+ PFMultiplayerServerRequestPartyServiceRequestWrapper(const PFMultiplayerServerRequestPartyServiceRequestWrapper& src) :
+ PFMultiplayerServerRequestPartyServiceRequestWrapper{ src.Model() }
+ {
+ }
+
+ PFMultiplayerServerRequestPartyServiceRequestWrapper(PFMultiplayerServerRequestPartyServiceRequestWrapper&& src) :
+ PFMultiplayerServerRequestPartyServiceRequestWrapper{}
+ {
+ swap(*this, src);
+ }
+
+ PFMultiplayerServerRequestPartyServiceRequestWrapper& operator=(PFMultiplayerServerRequestPartyServiceRequestWrapper src)
+ {
+ swap(*this, src);
+ return *this;
+ }
+
+ virtual ~PFMultiplayerServerRequestPartyServiceRequestWrapper() = default;
+
+ friend void swap(PFMultiplayerServerRequestPartyServiceRequestWrapper& lhs, PFMultiplayerServerRequestPartyServiceRequestWrapper& rhs)
+ {
+ using std::swap;
+ swap(lhs.m_model, rhs.m_model);
+ swap(lhs.m_customTags, rhs.m_customTags);
+ swap(lhs.m_networkConfiguration, rhs.m_networkConfiguration);
+ swap(lhs.m_partyId, rhs.m_partyId);
+ swap(lhs.m_preferredRegions, rhs.m_preferredRegions);
+ lhs.SetModelPointers();
+ rhs.SetModelPointers();
+ }
+
+ void SetCustomTags(StringDictionaryEntryVector value)
+ {
+ m_customTags = std::move(value);
+ this->m_model.customTags = m_customTags.empty() ? nullptr : m_customTags.data();
+ this->m_model.customTagsCount = static_cast(m_customTags.size());
+ }
+
+ void SetNetworkConfiguration(PFMultiplayerServerPartyNetworkConfigurationWrapper value)
+ {
+ m_networkConfiguration = std::move(value);
+ this->m_model.networkConfiguration = &m_networkConfiguration.Model();
+ }
+
+ void SetPartyId(String value)
+ {
+ m_partyId = std::move(value);
+ this->m_model.partyId = m_partyId.empty() ? nullptr : m_partyId.data();
+ }
+
+ void SetPreferredRegions(CStringVector value)
+ {
+ m_preferredRegions = std::move(value);
+ this->m_model.preferredRegions = m_preferredRegions.empty() ? nullptr : m_preferredRegions.data();
+ this->m_model.preferredRegionsCount = static_cast(m_preferredRegions.size());
+ }
+
+private:
+ void SetModelPointers()
+ {
+ this->m_model.customTags = m_customTags.empty() ? nullptr : m_customTags.data();
+ this->m_model.networkConfiguration = &m_networkConfiguration.Model();
+ this->m_model.partyId = m_partyId.empty() ? nullptr : m_partyId.data();
+ this->m_model.preferredRegions = m_preferredRegions.empty() ? nullptr : m_preferredRegions.data();
+ }
+
+ StringDictionaryEntryVector m_customTags;
+ PFMultiplayerServerPartyNetworkConfigurationWrapper m_networkConfiguration;
+ String m_partyId;
+ CStringVector m_preferredRegions;
+};
+
+template class Alloc = std::allocator>
+class PFMultiplayerServerRequestPartyServiceResponseWrapper : public ModelWrapper
+{
+public:
+ using ModelType = PFMultiplayerServerRequestPartyServiceResponse;
+ using String = typename std::basic_string, Alloc>;
+ template using Vector = typename std::vector>;
+
+ PFMultiplayerServerRequestPartyServiceResponseWrapper() = default;
+
+ PFMultiplayerServerRequestPartyServiceResponseWrapper(const PFMultiplayerServerRequestPartyServiceResponse& model) :
+ ModelWrapper{ model },
+ m_invitationId{ SafeString(model.invitationId) },
+ m_partyId{ SafeString(model.partyId) },
+ m_serializedNetworkDescriptor{ SafeString(model.serializedNetworkDescriptor) }
+ {
+ SetModelPointers();
+ }
+
+ PFMultiplayerServerRequestPartyServiceResponseWrapper(const PFMultiplayerServerRequestPartyServiceResponseWrapper& src) :
+ PFMultiplayerServerRequestPartyServiceResponseWrapper{ src.Model() }
+ {
+ }
+
+ PFMultiplayerServerRequestPartyServiceResponseWrapper(PFMultiplayerServerRequestPartyServiceResponseWrapper&& src) :
+ PFMultiplayerServerRequestPartyServiceResponseWrapper{}
+ {
+ swap(*this, src);
+ }
+
+ PFMultiplayerServerRequestPartyServiceResponseWrapper& operator=(PFMultiplayerServerRequestPartyServiceResponseWrapper src)
+ {
+ swap(*this, src);
+ return *this;
+ }
+
+ virtual ~PFMultiplayerServerRequestPartyServiceResponseWrapper() = default;
+
+ friend void swap(PFMultiplayerServerRequestPartyServiceResponseWrapper& lhs, PFMultiplayerServerRequestPartyServiceResponseWrapper& rhs)
+ {
+ using std::swap;
+ swap(lhs.m_model, rhs.m_model);
+ swap(lhs.m_invitationId, rhs.m_invitationId);
+ swap(lhs.m_partyId, rhs.m_partyId);
+ swap(lhs.m_serializedNetworkDescriptor, rhs.m_serializedNetworkDescriptor);
+ lhs.SetModelPointers();
+ rhs.SetModelPointers();
+ }
+
+ void SetInvitationId(String value)
+ {
+ m_invitationId = std::move(value);
+ this->m_model.invitationId = m_invitationId.empty() ? nullptr : m_invitationId.data();
+ }
+
+ void SetPartyId(String value)
+ {
+ m_partyId = std::move(value);
+ this->m_model.partyId = m_partyId.empty() ? nullptr : m_partyId.data();
+ }
+
+ void SetSerializedNetworkDescriptor(String value)
+ {
+ m_serializedNetworkDescriptor = std::move(value);
+ this->m_model.serializedNetworkDescriptor = m_serializedNetworkDescriptor.empty() ? nullptr : m_serializedNetworkDescriptor.data();
+ }
+
+private:
+ void SetModelPointers()
+ {
+ this->m_model.invitationId = m_invitationId.empty() ? nullptr : m_invitationId.data();
+ this->m_model.partyId = m_partyId.empty() ? nullptr : m_partyId.data();
+ this->m_model.serializedNetworkDescriptor = m_serializedNetworkDescriptor.empty() ? nullptr : m_serializedNetworkDescriptor.data();
+ }
+
+ String m_invitationId;
+ String m_partyId;
+ String m_serializedNetworkDescriptor;
+};
+
} // namespace Wrappers
} // namespace PlayFab
diff --git a/Source/PlayFabServices/Include/Generated/playfab/services/cpp/ProfilesTypeWrappers.h b/Source/PlayFabServices/Include/Generated/playfab/services/cpp/ProfilesTypeWrappers.h
index e57a97d..2f7f249 100644
--- a/Source/PlayFabServices/Include/Generated/playfab/services/cpp/ProfilesTypeWrappers.h
+++ b/Source/PlayFabServices/Include/Generated/playfab/services/cpp/ProfilesTypeWrappers.h
@@ -363,6 +363,88 @@ class PFProfilesEntityPermissionStatementWrapper : public ModelWrapper class Alloc = std::allocator>
+class PFProfilesEntityStatisticAttributeValueWrapper : public ModelWrapper
+{
+public:
+ using ModelType = PFProfilesEntityStatisticAttributeValue;
+ using DictionaryEntryType = PFProfilesEntityStatisticAttributeValueDictionaryEntry;
+ using String = typename std::basic_string, Alloc>;
+ template using Vector = typename std::vector>;
+
+ PFProfilesEntityStatisticAttributeValueWrapper() = default;
+
+ PFProfilesEntityStatisticAttributeValueWrapper(const PFProfilesEntityStatisticAttributeValue& model) :
+ ModelWrapper{ model },
+ m_metadata{ SafeString(model.metadata) },
+ m_name{ SafeString(model.name) },
+ m_scores{ model.scores, model.scores + model.scoresCount }
+ {
+ SetModelPointers();
+ }
+
+ PFProfilesEntityStatisticAttributeValueWrapper(const PFProfilesEntityStatisticAttributeValueWrapper& src) :
+ PFProfilesEntityStatisticAttributeValueWrapper{ src.Model() }
+ {
+ }
+
+ PFProfilesEntityStatisticAttributeValueWrapper(PFProfilesEntityStatisticAttributeValueWrapper&& src) :
+ PFProfilesEntityStatisticAttributeValueWrapper{}
+ {
+ swap(*this, src);
+ }
+
+ PFProfilesEntityStatisticAttributeValueWrapper& operator=(PFProfilesEntityStatisticAttributeValueWrapper src)
+ {
+ swap(*this, src);
+ return *this;
+ }
+
+ virtual ~PFProfilesEntityStatisticAttributeValueWrapper() = default;
+
+ friend void swap(PFProfilesEntityStatisticAttributeValueWrapper& lhs, PFProfilesEntityStatisticAttributeValueWrapper& rhs)
+ {
+ using std::swap;
+ swap(lhs.m_model, rhs.m_model);
+ swap(lhs.m_metadata, rhs.m_metadata);
+ swap(lhs.m_name, rhs.m_name);
+ swap(lhs.m_scores, rhs.m_scores);
+ lhs.SetModelPointers();
+ rhs.SetModelPointers();
+ }
+
+ void SetMetadata(String value)
+ {
+ m_metadata = std::move(value);
+ this->m_model.metadata = m_metadata.empty() ? nullptr : m_metadata.data();
+ }
+
+ void SetName(String value)
+ {
+ m_name = std::move(value);
+ this->m_model.name = m_name.empty() ? nullptr : m_name.data();
+ }
+
+ void SetScores(CStringVector value)
+ {
+ m_scores = std::move(value);
+ this->m_model.scores = m_scores.empty() ? nullptr : m_scores.data();
+ this->m_model.scoresCount = static_cast(m_scores.size());
+ }
+
+private:
+ void SetModelPointers()
+ {
+ this->m_model.metadata = m_metadata.empty() ? nullptr : m_metadata.data();
+ this->m_model.name = m_name.empty() ? nullptr : m_name.data();
+ this->m_model.scores = m_scores.empty() ? nullptr : m_scores.data();
+ }
+
+ String m_metadata;
+ String m_name;
+ CStringVector m_scores;
+};
+
template class Alloc = std::allocator>
class PFProfilesEntityStatisticValueWrapper : public ModelWrapper
{
@@ -376,8 +458,10 @@ class PFProfilesEntityStatisticValueWrapper : public ModelWrapper{ model },
+ m_attributeStatistics{ model.attributeStatistics, model.attributeStatistics + model.attributeStatisticsCount },
m_metadata{ SafeString(model.metadata) },
m_name{ SafeString(model.name) },
+ m_scores{ model.scores, model.scores + model.scoresCount },
m_value{ model.value ? std::optional{ *model.value } : std::nullopt }
{
SetModelPointers();
@@ -406,13 +490,22 @@ class PFProfilesEntityStatisticValueWrapper : public ModelWrapper, Alloc> value)
+ {
+ m_attributeStatistics = std::move(value);
+ this->m_model.attributeStatistics = m_attributeStatistics.empty() ? nullptr : m_attributeStatistics.data();
+ this->m_model.attributeStatisticsCount = static_cast(m_attributeStatistics.size());
+ }
+
void SetMetadata(String value)
{
m_metadata = std::move(value);
@@ -425,6 +518,13 @@ class PFProfilesEntityStatisticValueWrapper : public ModelWrapperm_model.name = m_name.empty() ? nullptr : m_name.data();
}
+ void SetScores(CStringVector value)
+ {
+ m_scores = std::move(value);
+ this->m_model.scores = m_scores.empty() ? nullptr : m_scores.data();
+ this->m_model.scoresCount = static_cast(m_scores.size());
+ }
+
void SetValue(std::optional value)
{
m_value = std::move(value);
@@ -439,13 +539,17 @@ class PFProfilesEntityStatisticValueWrapper : public ModelWrapperm_model.attributeStatistics = m_attributeStatistics.empty() ? nullptr : m_attributeStatistics.data();
this->m_model.metadata = m_metadata.empty() ? nullptr : m_metadata.data();
this->m_model.name = m_name.empty() ? nullptr : m_name.data();
+ this->m_model.scores = m_scores.empty() ? nullptr : m_scores.data();
this->m_model.value = m_value ? m_value.operator->() : nullptr;
}
+ ModelDictionaryEntryVector, Alloc> m_attributeStatistics;
String m_metadata;
String m_name;
+ CStringVector m_scores;
std::optional m_value;
};
diff --git a/Source/PlayFabServices/Source/Generated/AccountManagement.cpp b/Source/PlayFabServices/Source/Generated/AccountManagement.cpp
index bbaf5b3..9d975bb 100644
--- a/Source/PlayFabServices/Source/Generated/AccountManagement.cpp
+++ b/Source/PlayFabServices/Source/Generated/AccountManagement.cpp
@@ -2450,6 +2450,39 @@ AsyncOp AccountManagementAPI::ServerLinkNintendoServiceAccount(
});
}
+AsyncOp AccountManagementAPI::ServerLinkNintendoServiceAccountSubject(
+ Entity const& entity,
+ const LinkNintendoServiceAccountSubjectRequest& request,
+ RunContext rc
+)
+{
+ const char* path{ "/Server/LinkNintendoServiceAccountSubject" };
+ JsonValue requestBody{ request.ToJson() };
+
+ auto requestOp = ServicesHttpClient::MakeSecretKeyRequest(
+ ServicesCacheId::AccountManagementServerLinkNintendoServiceAccountSubject,
+ entity,
+ path,
+ requestBody,
+ std::move(rc)
+ );
+
+ return requestOp.Then([](Result result) -> Result
+ {
+ RETURN_IF_FAILED(result.hr);
+
+ auto serviceResponse = result.ExtractPayload();
+ if (serviceResponse.HttpCode >= 200 && serviceResponse.HttpCode < 300)
+ {
+ return S_OK;
+ }
+ else
+ {
+ return Result{ ServiceErrorToHR(serviceResponse.ErrorCode), std::move(serviceResponse.ErrorMessage) };
+ }
+ });
+}
+
AsyncOp AccountManagementAPI::ServerLinkNintendoSwitchDeviceId(
Entity const& entity,
const ServerLinkNintendoSwitchDeviceIdRequest& request,
diff --git a/Source/PlayFabServices/Source/Generated/AccountManagement.h b/Source/PlayFabServices/Source/Generated/AccountManagement.h
index 243aa8d..3d60d35 100644
--- a/Source/PlayFabServices/Source/Generated/AccountManagement.h
+++ b/Source/PlayFabServices/Source/Generated/AccountManagement.h
@@ -92,6 +92,7 @@ class AccountManagementAPI
static AsyncOp ServerGetUserAccountInfo(Entity const& entity, const GetUserAccountInfoRequest& request, RunContext rc);
static AsyncOp ServerGetUserBans(Entity const& entity, const GetUserBansRequest& request, RunContext rc);
static AsyncOp ServerLinkNintendoServiceAccount(Entity const& entity, const ServerLinkNintendoServiceAccountRequest& request, RunContext rc);
+ static AsyncOp ServerLinkNintendoServiceAccountSubject(Entity const& entity, const LinkNintendoServiceAccountSubjectRequest& request, RunContext rc);
static AsyncOp ServerLinkNintendoSwitchDeviceId(Entity const& entity, const ServerLinkNintendoSwitchDeviceIdRequest& request, RunContext rc);
static AsyncOp ServerLinkPSNAccount(Entity const& entity, const ServerLinkPSNAccountRequest& request, RunContext rc);
static AsyncOp ServerLinkPSNId(Entity const& entity, const LinkPSNIdRequest& request, RunContext rc);
diff --git a/Source/PlayFabServices/Source/Generated/AccountManagementTypes.cpp b/Source/PlayFabServices/Source/Generated/AccountManagementTypes.cpp
index 4595fbe..6fe9b29 100644
--- a/Source/PlayFabServices/Source/Generated/AccountManagementTypes.cpp
+++ b/Source/PlayFabServices/Source/Generated/AccountManagementTypes.cpp
@@ -2552,6 +2552,21 @@ JsonValue ServerLinkNintendoServiceAccountRequest::ToJson(const PFAccountManagem
return output;
}
+JsonValue LinkNintendoServiceAccountSubjectRequest::ToJson() const
+{
+ return LinkNintendoServiceAccountSubjectRequest::ToJson(this->Model());
+}
+
+JsonValue LinkNintendoServiceAccountSubjectRequest::ToJson(const PFAccountManagementLinkNintendoServiceAccountSubjectRequest& input)
+{
+ JsonValue output{ rapidjson::kObjectType };
+ JsonUtils::ObjectAddMemberDictionary(output, "CustomTags", input.customTags, input.customTagsCount);
+ JsonUtils::ObjectAddMember(output, "ForceLink", input.forceLink);
+ JsonUtils::ObjectAddMember(output, "PlayFabId", input.playFabId);
+ JsonUtils::ObjectAddMember(output, "Subject", input.subject);
+ return output;
+}
+
JsonValue ServerLinkNintendoSwitchDeviceIdRequest::ToJson() const
{
return ServerLinkNintendoSwitchDeviceIdRequest::ToJson(this->Model());
diff --git a/Source/PlayFabServices/Source/Generated/AccountManagementTypes.h b/Source/PlayFabServices/Source/Generated/AccountManagementTypes.h
index 81e4293..d54dec7 100644
--- a/Source/PlayFabServices/Source/Generated/AccountManagementTypes.h
+++ b/Source/PlayFabServices/Source/Generated/AccountManagementTypes.h
@@ -1576,6 +1576,20 @@ class ServerLinkNintendoServiceAccountRequest : public Wrappers::PFAccountManage
static JsonValue ToJson(const PFAccountManagementServerLinkNintendoServiceAccountRequest& input);
};
+class LinkNintendoServiceAccountSubjectRequest : public Wrappers::PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper, public InputModel
+{
+public:
+ using ModelWrapperType = typename Wrappers::PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper;
+ using ModelWrapperType::ModelType;
+
+ // Constructors
+ using ModelWrapperType::ModelWrapperType;
+
+ // InputModel
+ JsonValue ToJson() const override;
+ static JsonValue ToJson(const PFAccountManagementLinkNintendoServiceAccountSubjectRequest& input);
+};
+
class ServerLinkNintendoSwitchDeviceIdRequest : public Wrappers::PFAccountManagementServerLinkNintendoSwitchDeviceIdRequestWrapper, public InputModel
{
public:
diff --git a/Source/PlayFabServices/Source/Generated/CacheId.h b/Source/PlayFabServices/Source/Generated/CacheId.h
index 62b07c1..29706fe 100644
--- a/Source/PlayFabServices/Source/Generated/CacheId.h
+++ b/Source/PlayFabServices/Source/Generated/CacheId.h
@@ -95,160 +95,162 @@ enum class ServicesCacheId : uint32_t
AccountManagementServerGetUserAccountInfo = 2078,
AccountManagementServerGetUserBans = 2079,
AccountManagementServerLinkNintendoServiceAccount = 2080,
- AccountManagementServerLinkNintendoSwitchDeviceId = 2081,
- AccountManagementServerLinkPSNAccount = 2082,
- AccountManagementServerLinkPSNId = 2083,
- AccountManagementServerLinkServerCustomId = 2084,
- AccountManagementServerLinkSteamId = 2085,
- AccountManagementServerLinkXboxAccount = 2086,
- AccountManagementServerRevokeAllBansForUser = 2087,
- AccountManagementServerRevokeBans = 2088,
- AccountManagementServerSendCustomAccountRecoveryEmail = 2089,
- AccountManagementServerSendEmailFromTemplate = 2090,
- AccountManagementServerUnlinkNintendoServiceAccount = 2091,
- AccountManagementServerUnlinkNintendoSwitchDeviceId = 2092,
- AccountManagementServerUnlinkPSNAccount = 2093,
- AccountManagementServerUnlinkServerCustomId = 2094,
- AccountManagementServerUnlinkSteamId = 2095,
- AccountManagementServerUnlinkXboxAccount = 2096,
- AccountManagementServerUpdateAvatarUrl = 2097,
- AccountManagementServerUpdateBans = 2098,
- AccountManagementGetTitlePlayersFromXboxLiveIDs = 2099,
- PlatformSpecificClientAndroidDevicePushNotificationRegistration = 2100,
- PlatformSpecificClientRefreshPSNAuthToken = 2101,
- PlatformSpecificClientRegisterForIOSPushNotification = 2102,
- PlatformSpecificServerAwardSteamAchievement = 2103,
- CloudScriptClientExecuteCloudScript = 2104,
- CloudScriptServerExecuteCloudScript = 2105,
- CloudScriptExecuteEntityCloudScript = 2106,
- CloudScriptExecuteFunction = 2107,
- SegmentsClientGetPlayerSegments = 2108,
- SegmentsClientGetPlayerTags = 2109,
- SegmentsServerAddPlayerTag = 2110,
- SegmentsServerGetAllSegments = 2111,
- SegmentsServerGetPlayerSegments = 2112,
- SegmentsServerGetPlayersInSegment = 2113,
- SegmentsServerGetPlayerTags = 2114,
- SegmentsServerRemovePlayerTag = 2115,
- TitleDataManagementClientGetPublisherData = 2116,
- TitleDataManagementClientGetTime = 2117,
- TitleDataManagementClientGetTitleData = 2118,
- TitleDataManagementClientGetTitleNews = 2119,
- TitleDataManagementServerGetPublisherData = 2120,
- TitleDataManagementServerGetTime = 2121,
- TitleDataManagementServerGetTitleData = 2122,
- TitleDataManagementServerGetTitleInternalData = 2123,
- TitleDataManagementServerGetTitleNews = 2124,
- TitleDataManagementServerSetPublisherData = 2125,
- TitleDataManagementServerSetTitleData = 2126,
- TitleDataManagementServerSetTitleInternalData = 2127,
- PlayerDataManagementClientGetUserData = 2128,
- PlayerDataManagementClientGetUserPublisherData = 2129,
- PlayerDataManagementClientGetUserPublisherReadOnlyData = 2130,
- PlayerDataManagementClientGetUserReadOnlyData = 2131,
- PlayerDataManagementClientUpdateUserData = 2132,
- PlayerDataManagementClientUpdateUserPublisherData = 2133,
- PlayerDataManagementServerGetUserData = 2134,
- PlayerDataManagementServerGetUserInternalData = 2135,
- PlayerDataManagementServerGetUserPublisherData = 2136,
- PlayerDataManagementServerGetUserPublisherInternalData = 2137,
- PlayerDataManagementServerGetUserPublisherReadOnlyData = 2138,
- PlayerDataManagementServerGetUserReadOnlyData = 2139,
- PlayerDataManagementServerUpdateUserData = 2140,
- PlayerDataManagementServerUpdateUserInternalData = 2141,
- PlayerDataManagementServerUpdateUserPublisherData = 2142,
- PlayerDataManagementServerUpdateUserPublisherInternalData = 2143,
- PlayerDataManagementServerUpdateUserPublisherReadOnlyData = 2144,
- PlayerDataManagementServerUpdateUserReadOnlyData = 2145,
- PushNotificationsServerSendPushNotification = 2146,
- PushNotificationsServerSendPushNotificationFromTemplate = 2147,
- DataAbortFileUploads = 2148,
- DataDeleteFiles = 2149,
- DataFinalizeFileUploads = 2150,
- DataGetFiles = 2151,
- DataGetObjects = 2152,
- DataInitiateFileUploads = 2153,
- DataSetObjects = 2154,
- InventoryAddInventoryItems = 2155,
- InventoryDeleteInventoryCollection = 2156,
- InventoryDeleteInventoryItems = 2157,
- InventoryExecuteInventoryOperations = 2158,
- InventoryGetInventoryCollectionIds = 2159,
- InventoryGetInventoryItems = 2160,
- InventoryGetMicrosoftStoreAccessTokens = 2161,
- InventoryGetTransactionHistory = 2162,
- InventoryPurchaseInventoryItems = 2163,
- InventoryRedeemAppleAppStoreInventoryItems = 2164,
- InventoryRedeemGooglePlayInventoryItems = 2165,
- InventoryRedeemMicrosoftStoreInventoryItems = 2166,
- InventoryRedeemNintendoEShopInventoryItems = 2167,
- InventoryRedeemPlayStationStoreInventoryItems = 2168,
- InventoryRedeemSteamInventoryItems = 2169,
- InventorySubtractInventoryItems = 2170,
- InventoryTransferInventoryItems = 2171,
- InventoryUpdateInventoryItems = 2172,
- CatalogCreateDraftItem = 2173,
- CatalogCreateUploadUrls = 2174,
- CatalogDeleteEntityItemReviews = 2175,
- CatalogDeleteItem = 2176,
- CatalogGetCatalogConfig = 2177,
- CatalogGetDraftItem = 2178,
- CatalogGetDraftItems = 2179,
- CatalogGetEntityDraftItems = 2180,
- CatalogGetEntityItemReview = 2181,
- CatalogGetItem = 2182,
- CatalogGetItemContainers = 2183,
- CatalogGetItemModerationState = 2184,
- CatalogGetItemPublishStatus = 2185,
- CatalogGetItemReviews = 2186,
- CatalogGetItemReviewSummary = 2187,
- CatalogGetItems = 2188,
- CatalogPublishDraftItem = 2189,
- CatalogReportItem = 2190,
- CatalogReportItemReview = 2191,
- CatalogReviewItem = 2192,
- CatalogSearchItems = 2193,
- CatalogSetItemModerationState = 2194,
- CatalogSubmitItemReviewVote = 2195,
- CatalogTakedownItemReviews = 2196,
- CatalogUpdateCatalogConfig = 2197,
- CatalogUpdateDraftItem = 2198,
- ExperimentationGetTreatmentAssignment = 2199,
- GroupsAcceptGroupApplication = 2200,
- GroupsAcceptGroupInvitation = 2201,
- GroupsAddMembers = 2202,
- GroupsApplyToGroup = 2203,
- GroupsBlockEntity = 2204,
- GroupsChangeMemberRole = 2205,
- GroupsCreateGroup = 2206,
- GroupsCreateRole = 2207,
- GroupsDeleteGroup = 2208,
- GroupsDeleteRole = 2209,
- GroupsGetGroup = 2210,
- GroupsInviteToGroup = 2211,
- GroupsIsMember = 2212,
- GroupsListGroupApplications = 2213,
- GroupsListGroupBlocks = 2214,
- GroupsListGroupInvitations = 2215,
- GroupsListGroupMembers = 2216,
- GroupsListMembership = 2217,
- GroupsListMembershipOpportunities = 2218,
- GroupsRemoveGroupApplication = 2219,
- GroupsRemoveGroupInvitation = 2220,
- GroupsRemoveMembers = 2221,
- GroupsUnblockEntity = 2222,
- GroupsUpdateGroup = 2223,
- GroupsUpdateRole = 2224,
- LocalizationGetLanguageList = 2225,
- MultiplayerServerListBuildAliases = 2226,
- MultiplayerServerListBuildSummariesV2 = 2227,
- MultiplayerServerListQosServersForTitle = 2228,
- MultiplayerServerRequestMultiplayerServer = 2229,
- ProfilesGetProfile = 2230,
- ProfilesGetProfiles = 2231,
- ProfilesGetTitlePlayersFromMasterPlayerAccountIds = 2232,
- ProfilesSetProfileLanguage = 2233,
- ProfilesSetProfilePolicy = 2234,
+ AccountManagementServerLinkNintendoServiceAccountSubject = 2081,
+ AccountManagementServerLinkNintendoSwitchDeviceId = 2082,
+ AccountManagementServerLinkPSNAccount = 2083,
+ AccountManagementServerLinkPSNId = 2084,
+ AccountManagementServerLinkServerCustomId = 2085,
+ AccountManagementServerLinkSteamId = 2086,
+ AccountManagementServerLinkXboxAccount = 2087,
+ AccountManagementServerRevokeAllBansForUser = 2088,
+ AccountManagementServerRevokeBans = 2089,
+ AccountManagementServerSendCustomAccountRecoveryEmail = 2090,
+ AccountManagementServerSendEmailFromTemplate = 2091,
+ AccountManagementServerUnlinkNintendoServiceAccount = 2092,
+ AccountManagementServerUnlinkNintendoSwitchDeviceId = 2093,
+ AccountManagementServerUnlinkPSNAccount = 2094,
+ AccountManagementServerUnlinkServerCustomId = 2095,
+ AccountManagementServerUnlinkSteamId = 2096,
+ AccountManagementServerUnlinkXboxAccount = 2097,
+ AccountManagementServerUpdateAvatarUrl = 2098,
+ AccountManagementServerUpdateBans = 2099,
+ AccountManagementGetTitlePlayersFromXboxLiveIDs = 2100,
+ PlatformSpecificClientAndroidDevicePushNotificationRegistration = 2101,
+ PlatformSpecificClientRefreshPSNAuthToken = 2102,
+ PlatformSpecificClientRegisterForIOSPushNotification = 2103,
+ PlatformSpecificServerAwardSteamAchievement = 2104,
+ CloudScriptClientExecuteCloudScript = 2105,
+ CloudScriptServerExecuteCloudScript = 2106,
+ CloudScriptExecuteEntityCloudScript = 2107,
+ CloudScriptExecuteFunction = 2108,
+ SegmentsClientGetPlayerSegments = 2109,
+ SegmentsClientGetPlayerTags = 2110,
+ SegmentsServerAddPlayerTag = 2111,
+ SegmentsServerGetAllSegments = 2112,
+ SegmentsServerGetPlayerSegments = 2113,
+ SegmentsServerGetPlayersInSegment = 2114,
+ SegmentsServerGetPlayerTags = 2115,
+ SegmentsServerRemovePlayerTag = 2116,
+ TitleDataManagementClientGetPublisherData = 2117,
+ TitleDataManagementClientGetTime = 2118,
+ TitleDataManagementClientGetTitleData = 2119,
+ TitleDataManagementClientGetTitleNews = 2120,
+ TitleDataManagementServerGetPublisherData = 2121,
+ TitleDataManagementServerGetTime = 2122,
+ TitleDataManagementServerGetTitleData = 2123,
+ TitleDataManagementServerGetTitleInternalData = 2124,
+ TitleDataManagementServerGetTitleNews = 2125,
+ TitleDataManagementServerSetPublisherData = 2126,
+ TitleDataManagementServerSetTitleData = 2127,
+ TitleDataManagementServerSetTitleInternalData = 2128,
+ PlayerDataManagementClientGetUserData = 2129,
+ PlayerDataManagementClientGetUserPublisherData = 2130,
+ PlayerDataManagementClientGetUserPublisherReadOnlyData = 2131,
+ PlayerDataManagementClientGetUserReadOnlyData = 2132,
+ PlayerDataManagementClientUpdateUserData = 2133,
+ PlayerDataManagementClientUpdateUserPublisherData = 2134,
+ PlayerDataManagementServerGetUserData = 2135,
+ PlayerDataManagementServerGetUserInternalData = 2136,
+ PlayerDataManagementServerGetUserPublisherData = 2137,
+ PlayerDataManagementServerGetUserPublisherInternalData = 2138,
+ PlayerDataManagementServerGetUserPublisherReadOnlyData = 2139,
+ PlayerDataManagementServerGetUserReadOnlyData = 2140,
+ PlayerDataManagementServerUpdateUserData = 2141,
+ PlayerDataManagementServerUpdateUserInternalData = 2142,
+ PlayerDataManagementServerUpdateUserPublisherData = 2143,
+ PlayerDataManagementServerUpdateUserPublisherInternalData = 2144,
+ PlayerDataManagementServerUpdateUserPublisherReadOnlyData = 2145,
+ PlayerDataManagementServerUpdateUserReadOnlyData = 2146,
+ PushNotificationsServerSendPushNotification = 2147,
+ PushNotificationsServerSendPushNotificationFromTemplate = 2148,
+ DataAbortFileUploads = 2149,
+ DataDeleteFiles = 2150,
+ DataFinalizeFileUploads = 2151,
+ DataGetFiles = 2152,
+ DataGetObjects = 2153,
+ DataInitiateFileUploads = 2154,
+ DataSetObjects = 2155,
+ InventoryAddInventoryItems = 2156,
+ InventoryDeleteInventoryCollection = 2157,
+ InventoryDeleteInventoryItems = 2158,
+ InventoryExecuteInventoryOperations = 2159,
+ InventoryGetInventoryCollectionIds = 2160,
+ InventoryGetInventoryItems = 2161,
+ InventoryGetMicrosoftStoreAccessTokens = 2162,
+ InventoryGetTransactionHistory = 2163,
+ InventoryPurchaseInventoryItems = 2164,
+ InventoryRedeemAppleAppStoreInventoryItems = 2165,
+ InventoryRedeemGooglePlayInventoryItems = 2166,
+ InventoryRedeemMicrosoftStoreInventoryItems = 2167,
+ InventoryRedeemNintendoEShopInventoryItems = 2168,
+ InventoryRedeemPlayStationStoreInventoryItems = 2169,
+ InventoryRedeemSteamInventoryItems = 2170,
+ InventorySubtractInventoryItems = 2171,
+ InventoryTransferInventoryItems = 2172,
+ InventoryUpdateInventoryItems = 2173,
+ CatalogCreateDraftItem = 2174,
+ CatalogCreateUploadUrls = 2175,
+ CatalogDeleteEntityItemReviews = 2176,
+ CatalogDeleteItem = 2177,
+ CatalogGetCatalogConfig = 2178,
+ CatalogGetDraftItem = 2179,
+ CatalogGetDraftItems = 2180,
+ CatalogGetEntityDraftItems = 2181,
+ CatalogGetEntityItemReview = 2182,
+ CatalogGetItem = 2183,
+ CatalogGetItemContainers = 2184,
+ CatalogGetItemModerationState = 2185,
+ CatalogGetItemPublishStatus = 2186,
+ CatalogGetItemReviews = 2187,
+ CatalogGetItemReviewSummary = 2188,
+ CatalogGetItems = 2189,
+ CatalogPublishDraftItem = 2190,
+ CatalogReportItem = 2191,
+ CatalogReportItemReview = 2192,
+ CatalogReviewItem = 2193,
+ CatalogSearchItems = 2194,
+ CatalogSetItemModerationState = 2195,
+ CatalogSubmitItemReviewVote = 2196,
+ CatalogTakedownItemReviews = 2197,
+ CatalogUpdateCatalogConfig = 2198,
+ CatalogUpdateDraftItem = 2199,
+ ExperimentationGetTreatmentAssignment = 2200,
+ GroupsAcceptGroupApplication = 2201,
+ GroupsAcceptGroupInvitation = 2202,
+ GroupsAddMembers = 2203,
+ GroupsApplyToGroup = 2204,
+ GroupsBlockEntity = 2205,
+ GroupsChangeMemberRole = 2206,
+ GroupsCreateGroup = 2207,
+ GroupsCreateRole = 2208,
+ GroupsDeleteGroup = 2209,
+ GroupsDeleteRole = 2210,
+ GroupsGetGroup = 2211,
+ GroupsInviteToGroup = 2212,
+ GroupsIsMember = 2213,
+ GroupsListGroupApplications = 2214,
+ GroupsListGroupBlocks = 2215,
+ GroupsListGroupInvitations = 2216,
+ GroupsListGroupMembers = 2217,
+ GroupsListMembership = 2218,
+ GroupsListMembershipOpportunities = 2219,
+ GroupsRemoveGroupApplication = 2220,
+ GroupsRemoveGroupInvitation = 2221,
+ GroupsRemoveMembers = 2222,
+ GroupsUnblockEntity = 2223,
+ GroupsUpdateGroup = 2224,
+ GroupsUpdateRole = 2225,
+ LocalizationGetLanguageList = 2226,
+ MultiplayerServerListBuildAliases = 2227,
+ MultiplayerServerListBuildSummariesV2 = 2228,
+ MultiplayerServerListQosServersForTitle = 2229,
+ MultiplayerServerRequestMultiplayerServer = 2230,
+ MultiplayerServerRequestPartyService = 2231,
+ ProfilesGetProfile = 2232,
+ ProfilesGetProfiles = 2233,
+ ProfilesGetTitlePlayersFromMasterPlayerAccountIds = 2234,
+ ProfilesSetProfileLanguage = 2235,
+ ProfilesSetProfilePolicy = 2236,
};
} // namespace PlayFab
\ No newline at end of file
diff --git a/Source/PlayFabServices/Source/Generated/MultiplayerServer.cpp b/Source/PlayFabServices/Source/Generated/MultiplayerServer.cpp
index 2020fec..16ffae4 100644
--- a/Source/PlayFabServices/Source/Generated/MultiplayerServer.cpp
+++ b/Source/PlayFabServices/Source/Generated/MultiplayerServer.cpp
@@ -148,5 +148,40 @@ AsyncOp MultiplayerServerAPI::RequestMultiplay
});
}
+AsyncOp MultiplayerServerAPI::RequestPartyService(
+ Entity const& entity,
+ const RequestPartyServiceRequest& request,
+ RunContext rc
+)
+{
+ const char* path{ "/Party/RequestPartyService" };
+ JsonValue requestBody{ request.ToJson() };
+
+ auto requestOp = ServicesHttpClient::MakeEntityRequest(
+ ServicesCacheId::MultiplayerServerRequestPartyService,
+ entity,
+ path,
+ requestBody,
+ std::move(rc)
+ );
+
+ return requestOp.Then([](Result result) -> Result
+ {
+ RETURN_IF_FAILED(result.hr);
+
+ auto serviceResponse = result.ExtractPayload();
+ if (serviceResponse.HttpCode >= 200 && serviceResponse.HttpCode < 300)
+ {
+ RequestPartyServiceResponse resultModel;
+ RETURN_IF_FAILED(resultModel.FromJson(serviceResponse.Data));
+ return resultModel;
+ }
+ else
+ {
+ return Result{ ServiceErrorToHR(serviceResponse.ErrorCode), std::move(serviceResponse.ErrorMessage) };
+ }
+ });
+}
+
} // namespace MultiplayerServer
} // namespace PlayFab
diff --git a/Source/PlayFabServices/Source/Generated/MultiplayerServer.h b/Source/PlayFabServices/Source/Generated/MultiplayerServer.h
index 4b7a910..7a02800 100644
--- a/Source/PlayFabServices/Source/Generated/MultiplayerServer.h
+++ b/Source/PlayFabServices/Source/Generated/MultiplayerServer.h
@@ -24,6 +24,7 @@ class MultiplayerServerAPI
static AsyncOp ListBuildSummariesV2(Entity const& entity, const ListBuildSummariesRequest& request, RunContext rc);
static AsyncOp ListQosServersForTitle(Entity const& entity, const ListQosServersForTitleRequest& request, RunContext rc);
static AsyncOp RequestMultiplayerServer(Entity const& entity, const RequestMultiplayerServerRequest& request, RunContext rc);
+ static AsyncOp RequestPartyService(Entity const& entity, const RequestPartyServiceRequest& request, RunContext rc);
};
} // namespace MultiplayerServer
diff --git a/Source/PlayFabServices/Source/Generated/MultiplayerServerTypes.cpp b/Source/PlayFabServices/Source/Generated/MultiplayerServerTypes.cpp
index 98e583e..caf3a51 100644
--- a/Source/PlayFabServices/Source/Generated/MultiplayerServerTypes.cpp
+++ b/Source/PlayFabServices/Source/Generated/MultiplayerServerTypes.cpp
@@ -1189,5 +1189,118 @@ HRESULT RequestMultiplayerServerResponse::Copy(const PFMultiplayerServerRequestM
return S_OK;
}
+JsonValue PartyInvitationConfiguration::ToJson() const
+{
+ return PartyInvitationConfiguration::ToJson(this->Model());
+}
+
+JsonValue PartyInvitationConfiguration::ToJson(const PFMultiplayerServerPartyInvitationConfiguration& input)
+{
+ JsonValue output{ rapidjson::kObjectType };
+ JsonUtils::ObjectAddMemberArray(output, "EntityKeys", input.entityKeys, input.entityKeysCount);
+ JsonUtils::ObjectAddMember(output, "Identifier", input.identifier);
+ JsonUtils::ObjectAddMember(output, "Revocability", input.revocability);
+ return output;
+}
+
+JsonValue PartyNetworkConfiguration::ToJson() const
+{
+ return PartyNetworkConfiguration::ToJson(this->Model());
+}
+
+JsonValue PartyNetworkConfiguration::ToJson(const PFMultiplayerServerPartyNetworkConfiguration& input)
+{
+ JsonValue output{ rapidjson::kObjectType };
+ JsonUtils::ObjectAddMember(output, "DirectPeerConnectivityOptions", input.directPeerConnectivityOptions);
+ JsonUtils::ObjectAddMember(output, "MaxDevices", input.maxDevices);
+ JsonUtils::ObjectAddMember(output, "MaxDevicesPerUser", input.maxDevicesPerUser);
+ JsonUtils::ObjectAddMember(output, "MaxEndpointsPerDevice", input.maxEndpointsPerDevice);
+ JsonUtils::ObjectAddMember(output, "MaxUsers", input.maxUsers);
+ JsonUtils::ObjectAddMember(output, "MaxUsersPerDevice", input.maxUsersPerDevice);
+ JsonUtils::ObjectAddMember(output, "PartyInvitationConfiguration", input.partyInvitationConfiguration);
+ return output;
+}
+
+JsonValue RequestPartyServiceRequest::ToJson() const
+{
+ return RequestPartyServiceRequest::ToJson(this->Model());
+}
+
+JsonValue RequestPartyServiceRequest::ToJson(const PFMultiplayerServerRequestPartyServiceRequest& input)
+{
+ JsonValue output{ rapidjson::kObjectType };
+ JsonUtils::ObjectAddMemberDictionary(output, "CustomTags", input.customTags, input.customTagsCount);
+ JsonUtils::ObjectAddMember(output, "NetworkConfiguration", input.networkConfiguration);
+ JsonUtils::ObjectAddMember(output, "PartyId", input.partyId);
+ JsonUtils::ObjectAddMemberArray(output, "PreferredRegions", input.preferredRegions, input.preferredRegionsCount);
+ return output;
+}
+
+HRESULT RequestPartyServiceResponse::FromJson(const JsonValue& input)
+{
+ String invitationId{};
+ RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "InvitationId", invitationId));
+ this->SetInvitationId(std::move(invitationId));
+
+ String partyId{};
+ RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "PartyId", partyId));
+ this->SetPartyId(std::move(partyId));
+
+ String serializedNetworkDescriptor{};
+ RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "SerializedNetworkDescriptor", serializedNetworkDescriptor));
+ this->SetSerializedNetworkDescriptor(std::move(serializedNetworkDescriptor));
+
+ return S_OK;
+}
+
+size_t RequestPartyServiceResponse::RequiredBufferSize() const
+{
+ return RequiredBufferSize(this->Model());
+}
+
+Result RequestPartyServiceResponse::Copy(ModelBuffer& buffer) const
+{
+ return buffer.CopyTo(&this->Model());
+}
+
+size_t RequestPartyServiceResponse::RequiredBufferSize(const PFMultiplayerServerRequestPartyServiceResponse& model)
+{
+ size_t requiredSize{ alignof(ModelType) + sizeof(ModelType) };
+ if (model.invitationId)
+ {
+ requiredSize += (std::strlen(model.invitationId) + 1);
+ }
+ if (model.partyId)
+ {
+ requiredSize += (std::strlen(model.partyId) + 1);
+ }
+ if (model.serializedNetworkDescriptor)
+ {
+ requiredSize += (std::strlen(model.serializedNetworkDescriptor) + 1);
+ }
+ return requiredSize;
+}
+
+HRESULT RequestPartyServiceResponse::Copy(const PFMultiplayerServerRequestPartyServiceResponse& input, PFMultiplayerServerRequestPartyServiceResponse& output, ModelBuffer& buffer)
+{
+ output = input;
+ {
+ auto propCopyResult = buffer.CopyTo(input.invitationId);
+ RETURN_IF_FAILED(propCopyResult.hr);
+ output.invitationId = propCopyResult.ExtractPayload();
+ }
+ {
+ auto propCopyResult = buffer.CopyTo(input.partyId);
+ RETURN_IF_FAILED(propCopyResult.hr);
+ output.partyId = propCopyResult.ExtractPayload();
+ }
+ {
+ auto propCopyResult = buffer.CopyTo(input.serializedNetworkDescriptor);
+ RETURN_IF_FAILED(propCopyResult.hr);
+ output.serializedNetworkDescriptor = propCopyResult.ExtractPayload();
+ }
+ return S_OK;
+}
+
} // namespace MultiplayerServer
} // namespace PlayFab
diff --git a/Source/PlayFabServices/Source/Generated/MultiplayerServerTypes.h b/Source/PlayFabServices/Source/Generated/MultiplayerServerTypes.h
index c1af908..1b4f363 100644
--- a/Source/PlayFabServices/Source/Generated/MultiplayerServerTypes.h
+++ b/Source/PlayFabServices/Source/Generated/MultiplayerServerTypes.h
@@ -403,6 +403,67 @@ class RequestMultiplayerServerResponse : public Wrappers::PFMultiplayerServerReq
static HRESULT Copy(const PFMultiplayerServerRequestMultiplayerServerResponse& input, PFMultiplayerServerRequestMultiplayerServerResponse& output, ModelBuffer& buffer);
};
+class PartyInvitationConfiguration : public Wrappers::PFMultiplayerServerPartyInvitationConfigurationWrapper, public InputModel
+{
+public:
+ using ModelWrapperType = typename Wrappers::PFMultiplayerServerPartyInvitationConfigurationWrapper;
+ using ModelWrapperType::ModelType;
+
+ // Constructors
+ using ModelWrapperType::ModelWrapperType;
+
+ // InputModel
+ JsonValue ToJson() const override;
+ static JsonValue ToJson(const PFMultiplayerServerPartyInvitationConfiguration& input);
+};
+
+class PartyNetworkConfiguration : public Wrappers::PFMultiplayerServerPartyNetworkConfigurationWrapper, public InputModel
+{
+public:
+ using ModelWrapperType = typename Wrappers::PFMultiplayerServerPartyNetworkConfigurationWrapper;
+ using ModelWrapperType::ModelType;
+
+ // Constructors
+ using ModelWrapperType::ModelWrapperType;
+
+ // InputModel
+ JsonValue ToJson() const override;
+ static JsonValue ToJson(const PFMultiplayerServerPartyNetworkConfiguration& input);
+};
+
+class RequestPartyServiceRequest : public Wrappers::PFMultiplayerServerRequestPartyServiceRequestWrapper, public InputModel
+{
+public:
+ using ModelWrapperType = typename Wrappers::PFMultiplayerServerRequestPartyServiceRequestWrapper;
+ using ModelWrapperType::ModelType;
+
+ // Constructors
+ using ModelWrapperType::ModelWrapperType;
+
+ // InputModel
+ JsonValue ToJson() const override;
+ static JsonValue ToJson(const PFMultiplayerServerRequestPartyServiceRequest& input);
+};
+
+class RequestPartyServiceResponse : public Wrappers::PFMultiplayerServerRequestPartyServiceResponseWrapper, public ServiceOutputModel, public ClientOutputModel
+{
+public:
+ using ModelWrapperType = typename Wrappers::PFMultiplayerServerRequestPartyServiceResponseWrapper;
+ using ModelWrapperType::ModelType;
+
+ // Constructors
+ using ModelWrapperType::ModelWrapperType;
+
+ // ServiceOutputModel
+ HRESULT FromJson(const JsonValue& input) override;
+ // ClientOutputModel
+ size_t RequiredBufferSize() const override;
+ Result Copy(ModelBuffer& buffer) const override;
+
+ static size_t RequiredBufferSize(const PFMultiplayerServerRequestPartyServiceResponse& model);
+ static HRESULT Copy(const PFMultiplayerServerRequestPartyServiceResponse& input, PFMultiplayerServerRequestPartyServiceResponse& output, ModelBuffer& buffer);
+};
+
} // namespace MultiplayerServer
// EnumRange definitions used for Enum (de)serialization
diff --git a/Source/PlayFabServices/Source/Generated/PFAccountManagement.cpp b/Source/PlayFabServices/Source/Generated/PFAccountManagement.cpp
index 3458a8a..d084768 100644
--- a/Source/PlayFabServices/Source/Generated/PFAccountManagement.cpp
+++ b/Source/PlayFabServices/Source/Generated/PFAccountManagement.cpp
@@ -2326,6 +2326,28 @@ PF_API PFAccountManagementServerLinkNintendoServiceAccountAsync(
}
#endif
+#if HC_PLATFORM == HC_PLATFORM_WIN32
+PF_API PFAccountManagementServerLinkNintendoServiceAccountSubjectAsync(
+ _In_ PFEntityHandle contextHandle,
+ _In_ const PFAccountManagementLinkNintendoServiceAccountSubjectRequest* request,
+ _In_ XAsyncBlock* async
+) noexcept
+{
+ RETURN_HR_INVALIDARG_IF_NULL(request);
+
+ SharedPtr state{ nullptr };
+ RETURN_IF_FAILED(GlobalState::Get(state));
+
+ auto provider = MakeProvider(
+ state->RunContext().DeriveOnQueue(async->queue),
+ async,
+ XASYNC_IDENTITY(PFAccountManagementServerLinkNintendoServiceAccountSubjectAsync),
+ std::bind(&AccountManagementAPI::ServerLinkNintendoServiceAccountSubject, Entity::Duplicate(contextHandle), *request, std::placeholders::_1)
+ );
+ return XAsyncProviderBase::Run(std::move(provider));
+}
+#endif
+
#if HC_PLATFORM == HC_PLATFORM_WIN32
PF_API PFAccountManagementServerLinkNintendoSwitchDeviceIdAsync(
_In_ PFEntityHandle contextHandle,
diff --git a/Source/PlayFabServices/Source/Generated/PFMultiplayerServer.cpp b/Source/PlayFabServices/Source/Generated/PFMultiplayerServer.cpp
index d9f1a1d..835e488 100644
--- a/Source/PlayFabServices/Source/Generated/PFMultiplayerServer.cpp
+++ b/Source/PlayFabServices/Source/Generated/PFMultiplayerServer.cpp
@@ -184,3 +184,49 @@ PF_API PFMultiplayerServerRequestMultiplayerServerGetResult(
return S_OK;
}
+#if 0
+PF_API PFMultiplayerServerRequestPartyServiceAsync(
+ _In_ PFEntityHandle contextHandle,
+ _In_ const PFMultiplayerServerRequestPartyServiceRequest* request,
+ _In_ XAsyncBlock* async
+) noexcept
+{
+ RETURN_HR_INVALIDARG_IF_NULL(request);
+
+ SharedPtr state{ nullptr };
+ RETURN_IF_FAILED(GlobalState::Get(state));
+
+ auto provider = MakeProvider(
+ state->RunContext().DeriveOnQueue(async->queue),
+ async,
+ XASYNC_IDENTITY(PFMultiplayerServerRequestPartyServiceAsync),
+ std::bind(&MultiplayerServerAPI::RequestPartyService, Entity::Duplicate(contextHandle), *request, std::placeholders::_1)
+ );
+ return XAsyncProviderBase::Run(std::move(provider));
+}
+
+PF_API PFMultiplayerServerRequestPartyServiceGetResultSize(
+ _In_ XAsyncBlock* async,
+ _Out_ size_t* bufferSize
+) noexcept
+{
+ return XAsyncGetResultSize(async, bufferSize);
+}
+
+PF_API PFMultiplayerServerRequestPartyServiceGetResult(
+ _In_ XAsyncBlock* async,
+ _In_ size_t bufferSize,
+ _Out_writes_bytes_to_(bufferSize, *bufferUsed) void* buffer,
+ _Outptr_ PFMultiplayerServerRequestPartyServiceResponse** result,
+ _Out_opt_ size_t* bufferUsed
+) noexcept
+{
+ RETURN_HR_INVALIDARG_IF_NULL(result);
+
+ RETURN_IF_FAILED(XAsyncGetResult(async, nullptr, bufferSize, buffer, bufferUsed));
+ *result = static_cast(buffer);
+
+ return S_OK;
+}
+#endif
+
diff --git a/Source/PlayFabServices/Source/Generated/ProfilesTypes.cpp b/Source/PlayFabServices/Source/Generated/ProfilesTypes.cpp
index c06afb3..f88c03a 100644
--- a/Source/PlayFabServices/Source/Generated/ProfilesTypes.cpp
+++ b/Source/PlayFabServices/Source/Generated/ProfilesTypes.cpp
@@ -256,8 +256,79 @@ HRESULT EntityPermissionStatement::Copy(const PFProfilesEntityPermissionStatemen
return S_OK;
}
+HRESULT EntityStatisticAttributeValue::FromJson(const JsonValue& input)
+{
+ String metadata{};
+ RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "Metadata", metadata));
+ this->SetMetadata(std::move(metadata));
+
+ String name{};
+ RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "Name", name));
+ this->SetName(std::move(name));
+
+ CStringVector scores{};
+ RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "Scores", scores));
+ this->SetScores(std::move(scores));
+
+ return S_OK;
+}
+
+size_t EntityStatisticAttributeValue::RequiredBufferSize() const
+{
+ return RequiredBufferSize(this->Model());
+}
+
+Result EntityStatisticAttributeValue::Copy(ModelBuffer& buffer) const
+{
+ return buffer.CopyTo(&this->Model());
+}
+
+size_t EntityStatisticAttributeValue::RequiredBufferSize(const PFProfilesEntityStatisticAttributeValue& model)
+{
+ size_t requiredSize{ alignof(ModelType) + sizeof(ModelType) };
+ if (model.metadata)
+ {
+ requiredSize += (std::strlen(model.metadata) + 1);
+ }
+ if (model.name)
+ {
+ requiredSize += (std::strlen(model.name) + 1);
+ }
+ requiredSize += (alignof(char*) + sizeof(char*) * model.scoresCount);
+ for (size_t i = 0; i < model.scoresCount; ++i)
+ {
+ requiredSize += (std::strlen(model.scores[i]) + 1);
+ }
+ return requiredSize;
+}
+
+HRESULT EntityStatisticAttributeValue::Copy(const PFProfilesEntityStatisticAttributeValue& input, PFProfilesEntityStatisticAttributeValue& output, ModelBuffer& buffer)
+{
+ output = input;
+ {
+ auto propCopyResult = buffer.CopyTo(input.metadata);
+ RETURN_IF_FAILED(propCopyResult.hr);
+ output.metadata = propCopyResult.ExtractPayload();
+ }
+ {
+ auto propCopyResult = buffer.CopyTo(input.name);
+ RETURN_IF_FAILED(propCopyResult.hr);
+ output.name = propCopyResult.ExtractPayload();
+ }
+ {
+ auto propCopyResult = buffer.CopyToArray(input.scores, input.scoresCount);
+ RETURN_IF_FAILED(propCopyResult.hr);
+ output.scores = propCopyResult.ExtractPayload();
+ }
+ return S_OK;
+}
+
HRESULT EntityStatisticValue::FromJson(const JsonValue& input)
{
+ ModelDictionaryEntryVector attributeStatistics{};
+ RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "AttributeStatistics", attributeStatistics));
+ this->SetAttributeStatistics(std::move(attributeStatistics));
+
String metadata{};
RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "Metadata", metadata));
this->SetMetadata(std::move(metadata));
@@ -266,6 +337,10 @@ HRESULT EntityStatisticValue::FromJson(const JsonValue& input)
RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "Name", name));
this->SetName(std::move(name));
+ CStringVector scores{};
+ RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "Scores", scores));
+ this->SetScores(std::move(scores));
+
std::optional value{};
RETURN_IF_FAILED(JsonUtils::ObjectGetMember(input, "Value", value));
this->SetValue(std::move(value));
@@ -288,6 +363,12 @@ Result EntityStatisticValue::Copy(ModelBu
size_t EntityStatisticValue::RequiredBufferSize(const PFProfilesEntityStatisticValue& model)
{
size_t requiredSize{ alignof(ModelType) + sizeof(ModelType) };
+ requiredSize += (alignof(PFProfilesEntityStatisticAttributeValueDictionaryEntry) + sizeof(PFProfilesEntityStatisticAttributeValueDictionaryEntry) * model.attributeStatisticsCount);
+ for (size_t i = 0; i < model.attributeStatisticsCount; ++i)
+ {
+ requiredSize += (std::strlen(model.attributeStatistics[i].key) + 1);
+ requiredSize += EntityStatisticAttributeValue::RequiredBufferSize(*model.attributeStatistics[i].value);
+ }
if (model.metadata)
{
requiredSize += (std::strlen(model.metadata) + 1);
@@ -296,6 +377,11 @@ size_t EntityStatisticValue::RequiredBufferSize(const PFProfilesEntityStatisticV
{
requiredSize += (std::strlen(model.name) + 1);
}
+ requiredSize += (alignof(char*) + sizeof(char*) * model.scoresCount);
+ for (size_t i = 0; i < model.scoresCount; ++i)
+ {
+ requiredSize += (std::strlen(model.scores[i]) + 1);
+ }
if (model.value)
{
requiredSize += (alignof(int32_t) + sizeof(int32_t));
@@ -306,6 +392,11 @@ size_t EntityStatisticValue::RequiredBufferSize(const PFProfilesEntityStatisticV
HRESULT EntityStatisticValue::Copy(const PFProfilesEntityStatisticValue& input, PFProfilesEntityStatisticValue& output, ModelBuffer& buffer)
{
output = input;
+ {
+ auto propCopyResult = buffer.CopyToDictionary(input.attributeStatistics, input.attributeStatisticsCount);
+ RETURN_IF_FAILED(propCopyResult.hr);
+ output.attributeStatistics = propCopyResult.ExtractPayload();
+ }
{
auto propCopyResult = buffer.CopyTo(input.metadata);
RETURN_IF_FAILED(propCopyResult.hr);
@@ -316,6 +407,11 @@ HRESULT EntityStatisticValue::Copy(const PFProfilesEntityStatisticValue& input,
RETURN_IF_FAILED(propCopyResult.hr);
output.name = propCopyResult.ExtractPayload();
}
+ {
+ auto propCopyResult = buffer.CopyToArray(input.scores, input.scoresCount);
+ RETURN_IF_FAILED(propCopyResult.hr);
+ output.scores = propCopyResult.ExtractPayload();
+ }
{
auto propCopyResult = buffer.CopyTo(input.value);
RETURN_IF_FAILED(propCopyResult.hr);
diff --git a/Source/PlayFabServices/Source/Generated/ProfilesTypes.h b/Source/PlayFabServices/Source/Generated/ProfilesTypes.h
index 5d2dad0..0e1e9d9 100644
--- a/Source/PlayFabServices/Source/Generated/ProfilesTypes.h
+++ b/Source/PlayFabServices/Source/Generated/ProfilesTypes.h
@@ -86,6 +86,26 @@ class EntityPermissionStatement : public Wrappers::PFProfilesEntityPermissionSta
static HRESULT Copy(const PFProfilesEntityPermissionStatement& input, PFProfilesEntityPermissionStatement& output, ModelBuffer& buffer);
};
+class EntityStatisticAttributeValue : public Wrappers::PFProfilesEntityStatisticAttributeValueWrapper, public ServiceOutputModel, public ClientOutputModel
+{
+public:
+ using ModelWrapperType = typename Wrappers::PFProfilesEntityStatisticAttributeValueWrapper;
+ using ModelWrapperType::ModelType;
+ using DictionaryEntryType = ModelWrapperType::DictionaryEntryType;
+
+ // Constructors
+ using ModelWrapperType::ModelWrapperType;
+
+ // ServiceOutputModel
+ HRESULT FromJson(const JsonValue& input) override;
+ // ClientOutputModel
+ size_t RequiredBufferSize() const override;
+ Result Copy(ModelBuffer& buffer) const override;
+
+ static size_t RequiredBufferSize(const PFProfilesEntityStatisticAttributeValue& model);
+ static HRESULT Copy(const PFProfilesEntityStatisticAttributeValue& input, PFProfilesEntityStatisticAttributeValue& output, ModelBuffer& buffer);
+};
+
class EntityStatisticValue : public Wrappers::PFProfilesEntityStatisticValueWrapper, public ServiceOutputModel, public ClientOutputModel
{
public:
diff --git a/Source/PlayFabSharedInternal/Include/Generated/Error.h b/Source/PlayFabSharedInternal/Include/Generated/Error.h
index 77c1915..8d9853f 100644
--- a/Source/PlayFabSharedInternal/Include/Generated/Error.h
+++ b/Source/PlayFabSharedInternal/Include/Generated/Error.h
@@ -559,6 +559,7 @@ enum class ServiceErrorCode
InvalidServiceConfiguration = 1560,
InvalidNamespaceMismatch = 1561,
LeaderboardColumnLengthMismatch = 1562,
+ InvalidStatisticScore = 1563,
MatchmakingEntityInvalid = 2001,
MatchmakingPlayerAttributesInvalid = 2002,
MatchmakingQueueNotFound = 2016,
diff --git a/Source/PlayFabSharedInternal/Include/SdkVersion.h b/Source/PlayFabSharedInternal/Include/SdkVersion.h
index 788c285..a503f5f 100644
--- a/Source/PlayFabSharedInternal/Include/SdkVersion.h
+++ b/Source/PlayFabSharedInternal/Include/SdkVersion.h
@@ -2,7 +2,7 @@
namespace PlayFab
{
-constexpr char sdkVersion[] = "2310.0.0.230922"; // format: release YYMM.release qfe#.date in YYMMDD
+constexpr char sdkVersion[] = "2310.0.1.230927"; // format: release YYMM.release qfe#.date in YYMMDD
constexpr char versionString[] = "PFCSdk-";
constexpr char userAgent[] = "PFCSdk/";
}
diff --git a/Source/PlayFabSharedInternal/Source/Generated/Error.cpp b/Source/PlayFabSharedInternal/Source/Generated/Error.cpp
index 59ff241..99b7149 100644
--- a/Source/PlayFabSharedInternal/Source/Generated/Error.cpp
+++ b/Source/PlayFabSharedInternal/Source/Generated/Error.cpp
@@ -559,6 +559,7 @@ HRESULT ServiceErrorToHR(ServiceErrorCode errorCode)
case ServiceErrorCode::InvalidServiceConfiguration: return E_PF_INVALID_SERVICE_CONFIGURATION;
case ServiceErrorCode::InvalidNamespaceMismatch: return E_PF_INVALID_NAMESPACE_MISMATCH;
case ServiceErrorCode::LeaderboardColumnLengthMismatch: return E_PF_LEADERBOARD_COLUMN_LENGTH_MISMATCH;
+ case ServiceErrorCode::InvalidStatisticScore: return E_PF_INVALID_STATISTIC_SCORE;
case ServiceErrorCode::MatchmakingEntityInvalid: return E_PF_MATCHMAKING_ENTITY_INVALID;
case ServiceErrorCode::MatchmakingPlayerAttributesInvalid: return E_PF_MATCHMAKING_PLAYER_ATTRIBUTES_INVALID;
case ServiceErrorCode::MatchmakingQueueNotFound: return E_PF_MATCHMAKING_QUEUE_NOT_FOUND;
diff --git a/Source/PlayFabSharedInternal/Source/HttpRequest.cpp b/Source/PlayFabSharedInternal/Source/HttpRequest.cpp
index 61a62d2..c70e5b9 100644
--- a/Source/PlayFabSharedInternal/Source/HttpRequest.cpp
+++ b/Source/PlayFabSharedInternal/Source/HttpRequest.cpp
@@ -113,7 +113,7 @@ HRESULT HCHttpCall::OnStarted(XAsyncBlock* async) noexcept
RETURN_IF_FAILED(PFHCHttpCallRequestSetUrl(m_callHandle, m_method.data(), m_url.data()));
RETURN_IF_FAILED(PFHCHttpCallResponseSetResponseBodyWriteFunction(m_callHandle, HCHttpCall::HCResponseBodyWrite, this));
-#if HC_PLATFORM == HC_PLATFORM_WIN32 || HC_PLATFORM == HC_PLATFORM_GDK
+#if HC_PLATFORM == HC_PLATFORM_WIN32 || HC_PLATFORM == HC_PLATFORM_GDK || HC_PLATFORM == HC_PLATFORM_NINTENDO_SWITCH
// Setup Compression level
RETURN_IF_FAILED(PFHCHttpCallRequestEnableGzipCompression(m_callHandle, m_compressionLevel));
#else
diff --git a/Test/PlayFabServices.GeneratedApiWrappers/AccountManagementOperations.cpp b/Test/PlayFabServices.GeneratedApiWrappers/AccountManagementOperations.cpp
index b873735..f656127 100644
--- a/Test/PlayFabServices.GeneratedApiWrappers/AccountManagementOperations.cpp
+++ b/Test/PlayFabServices.GeneratedApiWrappers/AccountManagementOperations.cpp
@@ -1788,6 +1788,27 @@ HRESULT ServerLinkNintendoServiceAccountOperation::OnStarted(XAsyncBlock* async)
#if HC_PLATFORM == HC_PLATFORM_WIN32
+ServerLinkNintendoServiceAccountSubjectOperation::ServerLinkNintendoServiceAccountSubjectOperation(Entity entity, RequestType request, PlayFab::RunContext rc) :
+ XAsyncOperation{ std::move(rc) },
+ m_entity{ std::move(entity) },
+ m_request{ std::move(request) }
+{
+}
+
+AsyncOp ServerLinkNintendoServiceAccountSubjectOperation::Run(Entity entity, RequestType request, PlayFab::RunContext rc) noexcept
+{
+ return RunOperation(MakeUnique(std::move(entity), std::move(request), std::move(rc)));
+}
+
+HRESULT ServerLinkNintendoServiceAccountSubjectOperation::OnStarted(XAsyncBlock* async) noexcept
+{
+ return PFAccountManagementServerLinkNintendoServiceAccountSubjectAsync(m_entity.Handle(), &m_request.Model(), async);
+}
+
+#endif
+
+#if HC_PLATFORM == HC_PLATFORM_WIN32
+
ServerLinkNintendoSwitchDeviceIdOperation::ServerLinkNintendoSwitchDeviceIdOperation(Entity entity, RequestType request, PlayFab::RunContext rc) :
XAsyncOperation{ std::move(rc) },
m_entity{ std::move(entity) },
diff --git a/Test/PlayFabServices.GeneratedApiWrappers/AccountManagementOperations.h b/Test/PlayFabServices.GeneratedApiWrappers/AccountManagementOperations.h
index 51bfc64..81637f9 100644
--- a/Test/PlayFabServices.GeneratedApiWrappers/AccountManagementOperations.h
+++ b/Test/PlayFabServices.GeneratedApiWrappers/AccountManagementOperations.h
@@ -1350,6 +1350,24 @@ class ServerLinkNintendoServiceAccountOperation : public XAsyncOperation
};
#endif
+#if HC_PLATFORM == HC_PLATFORM_WIN32
+class ServerLinkNintendoServiceAccountSubjectOperation : public XAsyncOperation
+{
+public:
+ using RequestType = Wrappers::PFAccountManagementLinkNintendoServiceAccountSubjectRequestWrapper;
+
+ ServerLinkNintendoServiceAccountSubjectOperation(Entity entity, RequestType request, PlayFab::RunContext rc);
+
+ static AsyncOp Run(Entity entity, RequestType request, PlayFab::RunContext rc) noexcept;
+
+private:
+ HRESULT OnStarted(XAsyncBlock* async) noexcept override;
+
+ Entity m_entity;
+ RequestType m_request;
+};
+#endif
+
#if HC_PLATFORM == HC_PLATFORM_WIN32
class ServerLinkNintendoSwitchDeviceIdOperation : public XAsyncOperation
{
diff --git a/Test/PlayFabServices.GeneratedApiWrappers/MultiplayerServerOperations.cpp b/Test/PlayFabServices.GeneratedApiWrappers/MultiplayerServerOperations.cpp
index c2b2928..fc0985c 100644
--- a/Test/PlayFabServices.GeneratedApiWrappers/MultiplayerServerOperations.cpp
+++ b/Test/PlayFabServices.GeneratedApiWrappers/MultiplayerServerOperations.cpp
@@ -119,5 +119,35 @@ Result RequestMultiplayerServerOp
return ResultType{ *result };
}
+#if 0
+
+RequestPartyServiceOperation::RequestPartyServiceOperation(Entity entity, RequestType request, PlayFab::RunContext rc) :
+ XAsyncOperation{ std::move(rc) },
+ m_entity{ std::move(entity) },
+ m_request{ std::move(request) }
+{
+}
+
+AsyncOp RequestPartyServiceOperation::Run(Entity entity, RequestType request, PlayFab::RunContext rc) noexcept
+{
+ return RunOperation(MakeUnique(std::move(entity), std::move(request), std::move(rc)));
+}
+
+HRESULT RequestPartyServiceOperation::OnStarted(XAsyncBlock* async) noexcept
+{
+ return PFMultiplayerServerRequestPartyServiceAsync(m_entity.Handle(), &m_request.Model(), async);
+}
+
+Result RequestPartyServiceOperation::GetResult(XAsyncBlock* async) noexcept
+{
+ size_t resultSize;
+ RETURN_IF_FAILED(PFMultiplayerServerRequestPartyServiceGetResultSize(async, &resultSize));
+ Vector resultBuffer(resultSize);
+ PFMultiplayerServerRequestPartyServiceResponse* result;
+ RETURN_IF_FAILED(PFMultiplayerServerRequestPartyServiceGetResult(async, resultBuffer.size(), resultBuffer.data(), &result, nullptr));
+ return ResultType{ *result };
+}
+#endif
+
}
}
diff --git a/Test/PlayFabServices.GeneratedApiWrappers/MultiplayerServerOperations.h b/Test/PlayFabServices.GeneratedApiWrappers/MultiplayerServerOperations.h
index 4cab465..f8f9271 100644
--- a/Test/PlayFabServices.GeneratedApiWrappers/MultiplayerServerOperations.h
+++ b/Test/PlayFabServices.GeneratedApiWrappers/MultiplayerServerOperations.h
@@ -80,5 +80,25 @@ class RequestMultiplayerServerOperation : public XAsyncOperation>
+{
+public:
+ using RequestType = Wrappers::PFMultiplayerServerRequestPartyServiceRequestWrapper;
+ using ResultType = Wrappers::PFMultiplayerServerRequestPartyServiceResponseWrapper;
+
+ RequestPartyServiceOperation(Entity entity, RequestType request, PlayFab::RunContext rc);
+
+ static AsyncOp> Run(Entity entity, RequestType request, PlayFab::RunContext rc) noexcept;
+
+private:
+ HRESULT OnStarted(XAsyncBlock* async) noexcept override;
+ Result GetResult(XAsyncBlock* async) noexcept override;
+
+ Entity m_entity;
+ RequestType m_request;
+};
+#endif
+
}
}
diff --git a/Test/PlayFabServices.GeneratedTests/AccountManagementTests.cpp b/Test/PlayFabServices.GeneratedTests/AccountManagementTests.cpp
index 189957c..d6de754 100644
--- a/Test/PlayFabServices.GeneratedTests/AccountManagementTests.cpp
+++ b/Test/PlayFabServices.GeneratedTests/AccountManagementTests.cpp
@@ -206,6 +206,9 @@ void AccountManagementTests::AddTests()
#if HC_PLATFORM == HC_PLATFORM_WIN32
AddTest("TestServerLinkNintendoServiceAccount", &AccountManagementTests::TestServerLinkNintendoServiceAccount);
#endif
+#if HC_PLATFORM == HC_PLATFORM_WIN32
+ AddTest("TestServerLinkNintendoServiceAccountSubject", &AccountManagementTests::TestServerLinkNintendoServiceAccountSubject);
+#endif
#if HC_PLATFORM == HC_PLATFORM_WIN32
AddTest("TestServerLinkNintendoSwitchDeviceId", &AccountManagementTests::TestServerLinkNintendoSwitchDeviceId);
#endif
diff --git a/Test/PlayFabServices.GeneratedTests/AccountManagementTests.h b/Test/PlayFabServices.GeneratedTests/AccountManagementTests.h
index 6079aa1..c281a11 100644
--- a/Test/PlayFabServices.GeneratedTests/AccountManagementTests.h
+++ b/Test/PlayFabServices.GeneratedTests/AccountManagementTests.h
@@ -220,6 +220,9 @@ class AccountManagementTests : public ServicesTestClass
#if HC_PLATFORM == HC_PLATFORM_WIN32
void TestServerLinkNintendoServiceAccount(TestContext& testContext);
#endif
+#if HC_PLATFORM == HC_PLATFORM_WIN32
+ void TestServerLinkNintendoServiceAccountSubject(TestContext& testContext);
+#endif
#if HC_PLATFORM == HC_PLATFORM_WIN32
void TestServerLinkNintendoSwitchDeviceId(TestContext& testContext);
#endif
diff --git a/Test/PlayFabServices.GeneratedTests/AccountManagementTestsImpl.stubs b/Test/PlayFabServices.GeneratedTests/AccountManagementTestsImpl.stubs
index b0419b6..2f3694e 100644
--- a/Test/PlayFabServices.GeneratedTests/AccountManagementTestsImpl.stubs
+++ b/Test/PlayFabServices.GeneratedTests/AccountManagementTestsImpl.stubs
@@ -503,6 +503,13 @@ void AccountManagementTests::TestServerLinkNintendoServiceAccount(TestContext& t
}
#endif
+#if HC_PLATFORM == HC_PLATFORM_WIN32
+void AccountManagementTests::TestServerLinkNintendoServiceAccountSubject(TestContext& tc)
+{
+ tc.Skip();
+}
+#endif
+
#if HC_PLATFORM == HC_PLATFORM_WIN32
void AccountManagementTests::TestServerLinkNintendoSwitchDeviceId(TestContext& tc)
{
diff --git a/Test/PlayFabServices.GeneratedTests/MultiplayerServerTests.cpp b/Test/PlayFabServices.GeneratedTests/MultiplayerServerTests.cpp
index 9771258..45ad107 100644
--- a/Test/PlayFabServices.GeneratedTests/MultiplayerServerTests.cpp
+++ b/Test/PlayFabServices.GeneratedTests/MultiplayerServerTests.cpp
@@ -12,6 +12,9 @@ void MultiplayerServerTests::AddTests()
AddTest("TestListBuildSummariesV2", &MultiplayerServerTests::TestListBuildSummariesV2);
AddTest("TestListQosServersForTitle", &MultiplayerServerTests::TestListQosServersForTitle);
AddTest("TestRequestMultiplayerServer", &MultiplayerServerTests::TestRequestMultiplayerServer);
+#if 0
+ AddTest("TestRequestPartyService", &MultiplayerServerTests::TestRequestPartyService);
+#endif
}
diff --git a/Test/PlayFabServices.GeneratedTests/MultiplayerServerTests.h b/Test/PlayFabServices.GeneratedTests/MultiplayerServerTests.h
index cbf6aed..00f4276 100644
--- a/Test/PlayFabServices.GeneratedTests/MultiplayerServerTests.h
+++ b/Test/PlayFabServices.GeneratedTests/MultiplayerServerTests.h
@@ -26,6 +26,9 @@ class MultiplayerServerTests : public ServicesTestClass
void TestListBuildSummariesV2(TestContext& testContext);
void TestListQosServersForTitle(TestContext& testContext);
void TestRequestMultiplayerServer(TestContext& testContext);
+#if 0
+ void TestRequestPartyService(TestContext& testContext);
+#endif
};
diff --git a/Test/PlayFabServices.GeneratedTests/MultiplayerServerTestsImpl.stubs b/Test/PlayFabServices.GeneratedTests/MultiplayerServerTestsImpl.stubs
index 444b4b1..a789bc8 100644
--- a/Test/PlayFabServices.GeneratedTests/MultiplayerServerTestsImpl.stubs
+++ b/Test/PlayFabServices.GeneratedTests/MultiplayerServerTestsImpl.stubs
@@ -37,6 +37,13 @@ void MultiplayerServerTests::TestRequestMultiplayerServer(TestContext& tc)
tc.Skip();
}
+#if 0
+void MultiplayerServerTests::TestRequestPartyService(TestContext& tc)
+{
+ tc.Skip();
+}
+#endif
+
}
}
diff --git a/Test/PlayFabServicesTestApp/Tests/Services/AccountManagementTestsImpl.cpp b/Test/PlayFabServicesTestApp/Tests/Services/AccountManagementTestsImpl.cpp
index d18147a..e1f94d6 100644
--- a/Test/PlayFabServicesTestApp/Tests/Services/AccountManagementTestsImpl.cpp
+++ b/Test/PlayFabServicesTestApp/Tests/Services/AccountManagementTestsImpl.cpp
@@ -1402,6 +1402,30 @@ void AccountManagementTests::TestServerLinkNintendoServiceAccount(TestContext& t
}
#endif
+#if HC_PLATFORM == HC_PLATFORM_WIN32
+void AccountManagementTests::TestServerLinkNintendoServiceAccountSubject(TestContext& tc)
+{
+ ServerLinkNintendoServiceAccountSubjectOperation::RequestType request;
+ request.SetSubject("testSubject");
+ request.SetPlayFabId(DefaultTitlePlayerId());
+ request.SetForceLink(true);
+
+ ServerLinkNintendoServiceAccountSubjectOperation::Run(TitleEntity(), request, RunContext()).Then([&](Result result) -> AsyncOp
+ {
+ RETURN_IF_FAILED_PLAYFAB(result);
+
+ ServerUnlinkNintendoServiceAccountOperation::RequestType request;
+ request.SetPlayFabId(DefaultTitlePlayerId());
+
+ return ServerUnlinkNintendoServiceAccountOperation::Run(TitleEntity(), request, RunContext());
+ })
+ .Finally([&](Result result)
+ {
+ tc.EndTest(std::move(result));
+ });
+}
+#endif
+
#if HC_PLATFORM == HC_PLATFORM_WIN32
void AccountManagementTests::TestServerLinkNintendoSwitchDeviceId(TestContext& tc)
{
@@ -1628,19 +1652,8 @@ void AccountManagementTests::TestServerSendEmailFromTemplate(TestContext& tc)
#if HC_PLATFORM == HC_PLATFORM_WIN32
void AccountManagementTests::TestServerUnlinkNintendoServiceAccount(TestContext& tc)
{
- ServerUnlinkNintendoServiceAccountOperation::RequestType request;
- request.SetPlayFabId(DefaultTitlePlayerId());
-
- ServerUnlinkNintendoServiceAccountOperation::Run(TitleEntity(), request, RunContext()).Then([&](Result result) -> Result
- {
- tc.AssertEqual(E_PF_ACCOUNT_NOT_LINKED, result.hr, "errorName");
-
- return S_OK;
- })
- .Finally([&](Result result)
- {
- tc.EndTest(std::move(result));
- });
+ // Covered by TestServerLinkNintendoServiceAccountSubject
+ tc.EndTest(S_OK);
}
#endif
diff --git a/Test/PlayFabServicesTestApp/Tests/Services/SegmentsTestsImpl.cpp b/Test/PlayFabServicesTestApp/Tests/Services/SegmentsTestsImpl.cpp
index a5b8174..b96cf35 100644
--- a/Test/PlayFabServicesTestApp/Tests/Services/SegmentsTestsImpl.cpp
+++ b/Test/PlayFabServicesTestApp/Tests/Services/SegmentsTestsImpl.cpp
@@ -1,6 +1,7 @@
#include "TestAppPch.h"
#include "SegmentsTests.h"
#include "SegmentsOperations.h"
+#include "Platform/PlatformUtils.h"
namespace PlayFab
{
@@ -74,9 +75,6 @@ void SegmentsTests::TestClientGetPlayerTags(TestContext& tc)
#if HC_PLATFORM == HC_PLATFORM_WIN32
void SegmentsTests::TestServerAddPlayerTag(TestContext& tc)
{
- // Skipping test since it's not stable at this point. ADO Bug: 46466089
- tc.Skip();
-#if 0
ServerAddPlayerTagOperation::RequestType request;
request.SetPlayFabId(DefaultTitlePlayerId());
request.SetTagName(testTag);
@@ -86,6 +84,9 @@ void SegmentsTests::TestServerAddPlayerTag(TestContext& tc)
ServerGetPlayerTagsOperation::RequestType request;
request.SetPlayFabId(DefaultTitlePlayerId());
+ // Delay before getting player tags to let them load in fully, otherwise it may return no tags.
+ Platform::Sleep(5000);
+
return ServerGetPlayerTagsOperation::Run(TitleEntity(), request, RunContext());
})
.Then([&](Result result) -> AsyncOp
@@ -114,7 +115,6 @@ void SegmentsTests::TestServerAddPlayerTag(TestContext& tc)
{
tc.EndTest(std::move(result));
});
-#endif
}
#endif