Pragma Engine 0.0.87

October 11th, 2022

Features #

Parties now remain active when a party leader leaves. #

Description: Parties are no longer disbanded when a leader leaves the party or is disconnected from Pragma Engine. When a leader leaves a party, one of the remaining party members is granted party leadership.

Related note: See integration note about party disbandment.

Game clients can now retrieve match connection details using the new matchConnectionDetailsV1 endpoint. #

Description: Clients can now access connection details ad-hoc for an existing match by calling MatchLifecycleService.matchConnectionDetailsV1. This returns connection details using the MatchDetails object, which is also used by MatchReconnectV1Notification.

Details: The SDKs have been updated with the following methods on the Party service:

void UPragmaPartyService::MatchConnectionDetailsV1(const FMatchConnectionDetailsDelegate& OnComplete)
TFuture<TPragmaResult<FPragma_MatchLifecycle_MatchDetails>> UPragmaPartyService::MatchConnectionDetailsV1()
bool UPragmaPartyService::CanGetMatchConnectionDetailsV1() const
bool UPragmaPartyService::CanGetMatchConnectionDetailsV1(FPragmaError& OutError) const
public void MatchConnectionDetailsV1(MatchConnectionDetailsDelegate onComplete)
public Future<MatchDetails> MatchConnectionDetailsV1()
public bool CanGetMatchConnectionDetailsV1()
public bool CanGetMatchConnectionDetailsV1(out Error? error)

New player session endpoint for linking additional accounts. #

Description: Logged-in players can now link a new, additional account by passing a provider ID and a provider token to the new linkIdentityProviderAccountV2 endpoint.

Deprecations #

Use linkIdentityProviderAccountServiceV1 instead of linkIdentityProviderAccountV1. #

Description: linkIdentityProviderAccountV1 is being renamed to conform to our current naming conventions. Replace all uses of it with linkIdentityProviderAccountServiceV1.

originalreplacementremoval release
linkIdentityProviderAccountV1linkIdentityProviderAccountServiceV10.0.88

Partner Game Tokens will now require a gameShardId. #

Description: In Pragma Engine 0.0.88, Partner Game Tokens will only be able to communicate with the specific game shard they are assigned to instead of all game shards belonging to a game title. Upon updating to Pragma Engine 0.0.88, regenerate your Partner Game Tokens for each of your game shards. You can do so via the Game Operator Portal (recommended) or by using the pragma-engine CLI.

  • Game Operator Portal instructions:
    • Log into the Game Portal and navigate to the Game Server Management page.
    • Select a game shard from the dropdown, then create tokens. This creates both Social and Game partner tokens, but only the game tokens need to be updated. Updating the social tokens is optional.
  • pragma-engine CLI instructions:
    • Build the latest jar via make build
    • To generate new tokens, run
    java -jar ./pragma-engine.jar crypto remoteServiceToken --type game --game-shard-id "{{gameShardId}}" --expiration-hours 876000 --key-base64 "{{base64EncodedJwtPrivateKey}}"
    
    • Replace {{gameShardId}} and {{base64EncodedJwtPrivateKey}} with the appropriate values.

Update usages of DeletePlayerInventoryV2 to DeletePlayerInventoryV3. #

Description: The RPCs for deleting player inventories now additionally remove all fulfillments. Update any usages of DeletePlayerInventoryV2 to DeletePlayerInventoryV3 by release 0.0.88.

originalreplacementremoval release
Raw Wrapper: PragmaInventoryServiceRaw.DeletePlayerInventoryV2()Raw Wrapper: PragmaInventoryServiceRaw.DeletePlayerInventoryV3()0.0.88
Rich Wrapper: PragmaInventoryService.DeletePlayerInventoryV2()Rich Wrapper: PragmaInventoryService.DeletePlayerInventory()0.0.88
originalreplacementremoval release
Raw Wrapper: InventoryServiceRaw.DeletePlayerInventoryV2()Raw Wrapper: InventoryServiceRaw.DeletePlayerInventoryV3()0.0.88
Rich Wrapper: InventoryService.DeletePlayerInventoryV2()Rich Wrapper: InventoryService.DeletePlayerInventory()0.0.88

Integrations #

Remove references to the expirationDays config value. #

Description: The TokenSignerConfig value expirationDays has been removed, and should be taken out of any config files.

Integration step: Find and remove any references to expirationDays in config files.

Use GameDataRPC.GetLoginDataV2 instead of GameDataRPC.GetLoginDataV1. #

Description: GameDataRPC.GetLoginDataV1 has been removed. GetLoginDataV2 brings necessary cleanup along with naming that more correctly aligns with inventory’s limited grant tracking IDs as a part of the LoginData payload. Note that this change only applies to GameDataRPC.GetLoginData, as InventoryRpc.GetLoginData has not been updated and should remain at V1.

Integration step: Update all usages of GameDataRpc.GetLoginDataV1 to GameDataRpc.GetLoginDataV2.

originalreplacement
PragmaGameDataServiceRaw.GetLoginDataV1PragmaGameDataServiceRaw.GetLoginDataV2
originalreplacement
GameData.Raw.GetLoginDataGameData.Raw.GetLoginDataV2
originalreplacement
GetLoginDataV1RequestGetLoginDataV2Request

Update the config sections for TokenValidatorNodeService to the TokenDecoderNodeService. #

Description: The TokenValidatorNodeService has been renamed to the TokenDecoderNodeService, due to the service no longer performing token validation and only performing token decoding. If you’ve used the TokenValidatorNodeService directly in your code, update any references to the new TokenDecoderNodeService. Note that the service’s Test Factory tokenValidatorConfig was also renamed to tokenDecoderConfig.

Integration step: Update the config sections for TokenValidatorNodeService to the TokenDecoderNodeService.

OriginalReplacement
game:
serviceConfigs:
  TokenValidatorConfig:
    jwtPublicKey: <some-public-key>
...
social:
serviceConfigs:
  TokenValidatorConfig:
    jwtPublicKey: <some-public-key>
game:
serviceConfigs:
  TokenDecoderConfig:
    jwtPublicKey: <some-public-key>
...
social:
serviceConfigs:
  TokenDecoderConfig:
    jwtPublicKey: <some-public-key>

If your game implementation relies on party disbandment upon a party leader leaving, manually replicate the behavior using the onRemovePlayer plugin to retain functionality. #

Description: With the new feature that keeps parties active when a party leader leaves, existing game logic may need to be refactored to account for the new expected behavior.

Integration step: If your game implementation relies on a party disbanding when a leader leaves the party, you can retain the existing flow by manually simulating this behavior using the onRemovePlayer plugin.

Related note: See feature note about party disbandment.

If you’re using the listed Test Factory helpers in the AccountTestFactory, replace them with the provided helpers. #

Description: We’ve removed/renamed several Test Factory helpers to eliminate duplication.

Integration steps: Replace the following helpers in AccountTestFactory with their updated versions:

originalreplacement
pragmaGameToken()gameToken()
pragmaSocialToken()socialToken()
pragmaEmailToken()emailToken()

Bugs and Fixes #

  • Improved match reconnect reliability in the case where players disconnect and reconnect to the same match multiple times.

  • Invalid or improperly-used tokens now report DEBUG server logs. Examples are tokens missing Authorization headers, corrupted tokens, or tokens being used for the wrong session or backend type.

Docs #

  • [Moved SDK Guides] The SDKs & Tools guides have been moved to the new Setup Guides section in Introduction.

  • [Updated Concepts Guide] Added section on Player Login Using Existing Sessions on the Login and Session page in Accounts.

  • [Updated Concepts Guide] Added section on Connection Details to the Game Server Management page in Game Flow.