2021-06-15

Pragma Engine Heads up! We’re landing the big Pragma package rename and several deprecations in version 0.0.23. Not to fear; a Pragma engineer will help you with this migration. We will schedule time to help you with this.


Features #

  • Converted match making strategy into plugin to provide greater configuration support and extensibility
  • Improved error messages when authenticating Discord Unverified users
  • Added support for stackable item grants to match end payload
  • Unity SDK
    • New yield-able Promise/Future interface for RPCs. No more callback hell!
  • Unity/C# SDKs
    • Raw services can now be accessed directly from Session.GetService()
    • [Protocol] logs now print with more info e.g. [Game WebSocket]
    • Added MatchCapacity and MatchLifecycle Raw services.
    • Fixed128s now print as UUID strings in logs instead of msb/lsb json objects.

Improvements #

Pragma Package Rename!

  • Old convention:
    • Inconsistent file names and object locations
    • Frequently repeat names in multiple places such as:
      • pragma.lobby.lobbyServicePB.proto
      • pragma.lobby.CreateAndJoinLobbyV1Request
      • Note lobby in package, file name, and method name.
    • Inconsistent location
  • New Standard:
    • PingRpc.proto
      • Eg. PingRpc.PingV1Request
      • rpcs go here
      • Includes factored out / shared types
      • It’s okay to reference content protos
    • PingRpcExt.proto (java separate files mode)
      • PingRpcExt.ExtPingRequest
      • use Ext on the front of the name
    • PingContent.proto
      • content data goes here
    • PingContentExt.proto
      • PingContentExt.ExtSomePingContentDataType
    • Ping.proto
      • Live data related protos go here (eg. custom player data types, inventory types)
    • Proto package namespacing should match the service namespacing
      • Eg. pragma.ping
      • No group services into subpackages
        • Except for example
        • The ‘match’ subpackage will be flattened
    • Preserve (or refactor) current pragma.core
      • Eg. types.proto is good as-is

Integration Notes #

Pragma Package Rename

  • any protos using gg.pragma.core.Fixed128 type should use import "pragma/types.proto";
  • and replace message types from gg.pragma.core.Fixed128 example_proto = 3; to Fixed128 example_proto = 3;
  • the folder structure no longer is using /gg/pragma/*. All files should be moved to a /pragma namespace/folder instead
  • change all imports from using gg.pragma.* to use pragma instead
  • Will need to close the Intellij IDE, delete the maven .m2 repo cache for /gg/pragma, run a make clean build and restart the IDE and reload Maven Projects
  • gg.pragma.game, gg.pragma.core, gg.pragma.social, gg.pragma.protobuf and gg.pragma have all been combined into pragma
  • pragma.match.lifecycle has been combined into pragma.matchlifecycle
  • pragma.match.capacity has been combined into pragma.matchcapacity
  • Folder structures match package structure much more closely
  • Unity SDK replaces Pragma.Core, Pragma.Game, Pragma.Social with Pragma
  • Unreal4 SDK replaces EPragma_Core_* with EPragma_*

Deprecation #

Pragma Engine - REMOVED in 0.0.23:

  • Inventory.upgradeItemV1
    • Use Inventory.updateItemV2
  • Inventory.updateItemV1
    • Use Inventory.updateItemV2
  • Inventory.storePurchaseV2
    • Use Inventory.storePurchaseV3
  • PlayerMatchEnd.stackable_updates
    • Use item_updates
  • MatchEndPlayerData.instancedGrants
    • Now included in Inventory.ItemGrants
  • MatchLifeCycleServicePB.MatchFoundV1Notification
    • Should already be using MatchLifeCycleRpc.MatchConnectionDetailsV1Notification