Using SmartMatch matchmaking
This topic describes how to use SmartMatch to match players in a multiplayer game.
Flow chart: the SmartMatch matchmaking process
Creating a match ticket session and a match ticket
Setting matchmaking attributes on the session and players
Making the match
Maintaining the match ticket
Reusing the game session as a match ticket session
Deleting the match ticket
Performing matchmaking for games by using Xbox Compute
See also
Flow chart: the SmartMatch matchmaking process
The following flow chart illustrates the SmartMatch matchmaking process.
Return to the top of this topic.
Creating a match ticket session and a match ticket
Before the matchmaking process begins, a matchmaking "scout" sets up a match ticket session to represent the group of people who want to enter matchmaking together. All the players in this group join the session by using XblMultiplayerSessionJoin.
After the ticket session has been created and populated with players, the title submits the session to the matchmaking service by using XblMatchmakingCreateMatchTicketAsync.
This method creates a match ticket that represents the ticket session, and then updates the /servers/matchmaking/properties/system/status
field in the ticket session to searching
.
For more information, see the Create a match ticket section in the Multiplayer tasks topic.
The response from the match ticket creation method is an XblCreateMatchTicketResponse object. The response contains the match ticket ID. It's a GUID that can be used to cancel matchmaking by deleting the ticket. The response also contains an average wait time for the hopper, which can be used to set player expectations.
Return to the top of this topic.
Setting matchmaking attributes on the session and players
When submitting a session to matchmaking, the title can set attributes that the matchmaking service uses to group the session with other sessions. The title can specify attributes at the ticket level or at the per-member level.
Setting matchmaking attributes at the match ticket level
The title submits attributes at the match ticket level in the ticketAttributesJson
parameter of the XblMatchmakingCreateMatchTicketAsync method.
Attributes that are specified at the ticket level override the same attributes that are specified at the per-member level.
Setting matchmaking attributes at the per-member level
The title specifies per-member attributes on each member within the match ticket session.
These attributes are set by calling XblMultiplayerSessionCurrentUserSetCustomPropertyJson by using a property name of matchAttrs
.
This call places the attributes in the /members/{index}/properties/custom/matchAttrs
field on each player within the ticket session.
The matchmaking process "flattens" per-member, each into a single ticket-level attribute, based on the flatten
method that was specified for that attribute in the Xbox services configuration for the hopper.
This is configured in Partner Center.
Return to the top of this topic.
Making the match
With the ticket session and the match ticket set up, the matchmaking service matches the represented ticket session with other ticket sessions that represent other groups, and then creates or identifies a match target session. The service also creates reservations for the matched players in the target session, and then marks the ticket sessions as matched. Multiplayer Session Directory (MPSD) notifies the title of this change to the ticket session.
The title must then take steps to initialize the target session to confirm that enough players are present. The title performs Quality of Service (QoS) checks to ensure that the players can successfully connect to one another. If initialization or QoS fails, the title marks the ticket session for resubmission to matchmaking so that another group can be found. For more information, see Target session initialization and QoS.
During match activity, the following changes are made to the JSON objects for the session.
/servers/matchmaking/properties/system/status
field set tofound
/servers/matchmaking/properties/system/targetSessionRef
field set to the target session/members/{index}/properties/custom/matchAttrs
field for each ticket session copied to the/members/{index}/constants/custom/matchmakingResult/playerAttrs
fieldFor each player, ticket attributes copied from the
ticketAttributes
field in the match ticket to the/members/{index}/constants/custom/matchmakingResult/ticketAttrs
field
Return to the top of this topic.
Maintaining the match ticket
The matchmaking service uses a snapshot of the ticket session at the time when the match ticket is created for the session. As a result, if any players join or leave the ticket session, the title must use the matchmaking service to delete and then re-create the match ticket.
Return to the top of this topic.
Reusing the game session as a match ticket session
Important
Two sessions with preserveSession
set to Always
can't match with each other because they can't be combined. The matchmaking flow that's used by the title should take this into consideration.
A title can reuse an existing game session as a match ticket session to find more players to join a game that's already in progress.
To enable this, the title must create the match ticket by calling XblMatchmakingCreateMatchTicketAsync with the preserveSession
parameter set to XblPreserveSessionMode::Always
.
The matchmaking service then ensures that the existing session that's used for the ticket is preserved throughout the matchmaking process and becomes the resulting target session.
Return to the top of this topic.
Deleting the match ticket
To delete the match ticket, the title calls XblMatchmakingDeleteMatchTicketAsync. Deleting the ticket:
Stops matchmaking for the players in the ticket session.
Updates the
/servers/matchmaking/properties/system/status
field in the ticket session tocanceled
.
Return to the top of this topic.
Performing matchmaking for games by using Xbox Compute
Following are the high-level steps that take place to get a player matchmade into an Xbox Compute-based game. A similar flow should apply to games that are hosted by third parties.
The scout creates a ticket session to represent the group. This session contains a list of potential datacenters that are located in the session configuration in
/constants/system/measurementServerAddresses
. It comes from either the session template if the datacenter list is static or from the client writing it up at session creation after first getting it from Xbox Compute. This session also contains thegsiSetId
,gameVariantId
, andmaxAllowedPlayers
values in thetargetSessionConstants/custom/gameServerPlatform
object.All other players in the group join the ticket session.
All members of the group download the
measurementServerAddresses
values from the/constants/system
object for the ticket session, ping them by using the platform API, and then upload an ordered list of preferred datacenters to the session as defined in/members/{index}/properties/system/serverMeasurements
.Note
The title can set and retrieve the
measurementServerAddresses
values from the session by using the XblMultiplayerSessionConstantsSetMeasurementServerAddressesJson method and XblMultiplayerSessionConstants::MeasurementServerAddressesJson
.The scout calls XblMatchmakingCreateMatchTicketAsync, passing in a reference to the ticket session.
Note
If ticket session objects have mismatched constants, the create ticket method might not succeed. This can be avoided by adding a
MUST
rule to the hopper, to prevent matching with players who have mismatched constants.If XblMatchTicketDetailsResponse
::PreserveSession
is set toNever
, the matchmaking service copies the server measurements from each member into the internal representation of the ticket. It flattens the server measurements of the members of the ticket into a single server measurements collection for the ticket that's stored in the internal representation of the ticket as aspecial
ticket attribute.If XblMatchTicketDetailsResponse
::PreserveSession
is set toAlways
, the server measurements aren't used. The matchmaking service instead copies the/properties/system/matchmaking/serverConnectionString
value for the session into the internal representation of the ticket as aserverMeasurements
collection of size 1 with latency zero.The matchmaking service matches the ticket session with others, representing other groups and taking the server measurement collections into account. The service tries to match the group with other groups that have the same highly preferred datacenters.
After a matched group has been found, the matchmaking service creates or identifies a target session and adds all the players from the ticket sessions that are matched together. The service writes the final flattened server measurements for the matched group into
/properties/system/serverConnectionStringCandidates
. It writes the originally submitted server measurements for each newly added member in the target session to/members/{index}/constants/system/matchmakingResult/serverMeasurements
.All players perform initialization on the target session as previously mentioned. However, because the players will be connecting to Xbox Compute, they don't perform QoS with one another to confirm connectivity.
All players play.
Return to the top of this topic.