> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Usando o matchmaking SmartMatch

> Use o matchmaking SmartMatch do XBOX para criar sessões de tíquete de partida, definir atributos de jogadores, gerenciar a QoS e reutilizar sessões de jogo no seu título multiplayer.

<a id="top" />

Este tópico descreve como usar o SmartMatch para combinar jogadores em um jogo multiplayer.

[Fluxograma: o processo de matchmaking do SmartMatch](#flow-chart-smartmatch-matchmaking-process)
[Criando uma sessão de tíquete de partida e um tíquete de partida](#creating-a-match-ticket-session-and-a-match-ticket)
[Definindo atributos de matchmaking na sessão e nos jogadores](#setting-matchmaking-attributes-on-the-session-and-players)
[Formando a partida](#making-the-match)
[Mantendo o tíquete de partida](#maintaining-the-match-ticket)
[Reutilizando a sessão de jogo como sessão de tíquete de partida](#reusing-the-game-session-as-a-match-ticket-session)
[Excluindo o tíquete de partida](#deleting-the-match-ticket)
[Realizando o matchmaking para jogos usando o XBOX Compute](#performing-matchmaking-for-games-using-xbox-live-compute)
[Confira também](#see-also)

<a id="flow-chart-smartmatch-matchmaking-process" />

## Fluxograma: o processo de matchmaking do SmartMatch

O fluxograma a seguir ilustra o processo de matchmaking do SmartMatch.

<img src="https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Multiplayer_2015_SmartMatch_Matchmaking.png?fit=max&auto=format&n=gzrdvT5kpqAXKEQt&q=85&s=2754663723a8fc3a3214f997266f015c" alt="Imagem de um fluxograma de matchmaking que ilustra o processo de matchmaking do SmartMatch" width="1133" height="1064" data-path="images/gdk/services/Multiplayer_2015_SmartMatch_Matchmaking.png" />

[Voltar ao início deste tópico.](#top)

<a id="creating-a-match-ticket-session-and-a-match-ticket" />

## Criando uma sessão de tíquete de partida e um tíquete de partida

Antes de o processo de matchmaking começar, um "batedor" de matchmaking configura uma sessão de tíquete de partida para representar o grupo de pessoas que desejam entrar juntas no matchmaking.
Todos os jogadores desse grupo ingressam na sessão usando [XblMultiplayerSessionJoin](/pt-BR/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionjoin).

Depois que a sessão de tíquete é criada e preenchida com jogadores, o título envia a sessão ao serviço de matchmaking usando [XblMatchmakingCreateMatchTicketAsync](/pt-BR/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync).
Esse método cria um tíquete de partida que representa a sessão de tíquete e, em seguida, atualiza o campo `/servers/matchmaking/properties/system/status` da sessão de tíquete para `searching`.
Para obter mais informações, consulte a seção [Criar um tíquete de partida](/pt-BR/services/xbox-services/multiplayer/mpsd/how-to/live-mpsd-how-tos#camt) no tópico Tarefas de multiplayer.

A resposta do método de criação do tíquete de partida é um objeto [XblCreateMatchTicketResponse](/pt-BR/reference/live/xsapi-c/matchmaking_c/structs/xblcreatematchticketresponse).
A resposta contém o ID do tíquete de partida. É um GUID que pode ser usado para cancelar o matchmaking excluindo o tíquete.
A resposta também contém um tempo médio de espera do hopper, que pode ser usado para definir as expectativas dos jogadores.

[Voltar ao início deste tópico.](#top)

<a id="setting-matchmaking-attributes-on-the-session-and-players" />

## Definindo atributos de matchmaking na sessão e nos jogadores

Ao enviar uma sessão ao matchmaking, o título pode definir atributos que o serviço de matchmaking usa para agrupar a sessão com outras sessões.
O título pode especificar atributos no nível do tíquete ou no nível de cada membro.

### Definindo atributos de matchmaking no nível do tíquete de partida

O título envia atributos no nível do tíquete de partida no parâmetro `ticketAttributesJson` do método [XblMatchmakingCreateMatchTicketAsync](/pt-BR/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync).
Os atributos especificados no nível do tíquete substituem os mesmos atributos especificados no nível de cada membro.

### Definindo atributos de matchmaking no nível de cada membro

O título especifica atributos por membro em cada membro da sessão de tíquete de partida.
Esses atributos são definidos chamando [XblMultiplayerSessionCurrentUserSetCustomPropertyJson](/pt-BR/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessioncurrentusersetcustompropertyjson) com o nome de propriedade `matchAttrs`.
Essa chamada coloca os atributos no campo `/members/{index}/properties/custom/matchAttrs` de cada jogador da sessão de tíquete.

O processo de matchmaking "achata" os atributos por membro, cada um em um único atributo no nível do tíquete, com base no método `flatten` especificado para esse atributo na configuração dos serviços do XBOX do hopper.
Isso é configurado no [Partner Center](https://partner.microsoft.com/dashboard).

[Voltar ao início deste tópico.](#top)

<a id="making-the-match" />

## Formando a partida

Com a sessão de tíquete e o tíquete de partida configurados, o serviço de matchmaking combina a sessão de tíquete representada com outras sessões de tíquete que representam outros grupos e, em seguida, cria ou identifica uma sessão de destino da partida.
O serviço também cria reservas para os jogadores combinados na sessão de destino e, em seguida, marca as sessões de tíquete como combinadas.
O Multiplayer Session Directory (MPSD) notifica o título sobre essa alteração na sessão de tíquete.

Em seguida, o título deve tomar medidas para inicializar a sessão de destino e confirmar que há jogadores suficientes presentes. O título realiza verificações de qualidade de serviço (QoS) para garantir que os jogadores consigam se conectar uns aos outros.
Se a inicialização ou a QoS falhar, o título marca a sessão de tíquete para reenvio ao matchmaking, para que outro grupo possa ser encontrado.
Para obter mais informações, consulte [Inicialização da sessão de destino e QoS](/pt-BR/services/xbox-services/multiplayer/matchmaking/concepts/live-matchmaking-target-session).

Durante a atividade de partida, as seguintes alterações são feitas nos objetos JSON da sessão.

* Campo `/servers/matchmaking/properties/system/status` definido como `found`

* Campo `/servers/matchmaking/properties/system/targetSessionRef` definido como a sessão de destino

* Campo `/members/{index}/properties/custom/matchAttrs` de cada sessão de tíquete copiado para o campo `/members/{index}/constants/custom/matchmakingResult/playerAttrs`

* Para cada jogador, atributos do tíquete copiados do campo `ticketAttributes` do tíquete de partida para o campo `/members/{index}/constants/custom/matchmakingResult/ticketAttrs`

[Voltar ao início deste tópico.](#top)

<a id="maintaining-the-match-ticket" />

## Mantendo o tíquete de partida

O serviço de matchmaking usa um instantâneo da sessão de tíquete no momento em que o tíquete de partida é criado para a sessão.
Como resultado, se algum jogador entrar ou sair da sessão de tíquete, o título deverá usar o serviço de matchmaking para excluir e depois recriar o tíquete de partida.

[Voltar ao início deste tópico.](#top)

<a id="reusing-the-game-session-as-a-match-ticket-session" />

## Reutilizando a sessão de jogo como sessão de tíquete de partida

<Info>Duas sessões com `preserveSession` definido como `Always` não podem ser combinadas entre si, porque não podem ser mescladas. O fluxo de matchmaking usado pelo título deve levar isso em consideração.</Info>

Um título pode reutilizar uma sessão de jogo existente como sessão de tíquete de partida para encontrar mais jogadores para ingressar em um jogo que já está em andamento.
Para habilitar isso, o título deve criar o tíquete de partida chamando [XblMatchmakingCreateMatchTicketAsync](/pt-BR/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync) com o parâmetro `preserveSession` definido como [XblPreserveSessionMode](/pt-BR/reference/live/xsapi-c/matchmaking_c/enums/xblpreservesessionmode)`::Always`.
Em seguida, o serviço de matchmaking garante que a sessão existente usada para o tíquete seja preservada durante todo o processo de matchmaking e se torne a sessão de destino resultante.

[Voltar ao início deste tópico.](#top)

<a id="deleting-the-match-ticket" />

## Excluindo o tíquete de partida

Para excluir o tíquete de partida, o título chama [XblMatchmakingDeleteMatchTicketAsync](/pt-BR/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingdeletematchticketasync).
Excluir o tíquete:

1. Interrompe o matchmaking para os jogadores da sessão de tíquete.

2. Atualiza o campo `/servers/matchmaking/properties/system/status` da sessão de tíquete para `canceled`.

[Voltar ao início deste tópico.](#top)

<a id="performing-matchmaking-for-games-using-xbox-live-compute" />

## Realizando o matchmaking para jogos usando o XBOX Compute

A seguir estão as etapas de alto nível realizadas para que um jogador seja combinado em um jogo baseado no XBOX Compute.
Um fluxo semelhante deve se aplicar a jogos hospedados por terceiros.

1. O batedor cria uma sessão de tíquete para representar o grupo. Essa sessão contém uma lista de possíveis datacenters que ficam na configuração da sessão em `/constants/system/measurementServerAddresses`. Ela vem do modelo de sessão, se a lista de datacenters for estática, ou do cliente que a grava na criação da sessão depois de obtê-la primeiro do XBOX Compute. Essa sessão também contém os valores `gsiSetId`, `gameVariantId` e `maxAllowedPlayers` no objeto `targetSessionConstants/custom/gameServerPlatform`.

2. Todos os outros jogadores do grupo ingressam na sessão de tíquete.

3. Todos os membros do grupo baixam os valores `measurementServerAddresses` do objeto `/constants/system` da sessão de tíquete, fazem ping neles usando a API da plataforma e, em seguida, carregam na sessão uma lista ordenada de datacenters preferidos, conforme definido em `/members/{index}/properties/system/serverMeasurements`.

   > \[!NOTE]
   > O título pode definir e recuperar os valores `measurementServerAddresses` da sessão usando o método [XblMultiplayerSessionConstantsSetMeasurementServerAddressesJson](/pt-BR/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionconstantssetmeasurementserveraddressesjson) e [XblMultiplayerSessionConstants](/pt-BR/reference/live/xsapi-c/multiplayer_c/structs/xblmultiplayersessionconstants)`::MeasurementServerAddressesJson`.

4. O batedor chama [XblMatchmakingCreateMatchTicketAsync](/pt-BR/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync), passando uma referência à sessão de tíquete.

   > \[!NOTE]
   > Se os objetos da sessão de tíquete tiverem constantes incompatíveis, o método de criação do tíquete poderá não ter êxito. Isso pode ser evitado adicionando uma regra `MUST` ao hopper, para impedir a combinação com jogadores que tenham constantes incompatíveis.

   Se [XblMatchTicketDetailsResponse](/pt-BR/reference/live/xsapi-c/matchmaking_c/structs/xblmatchticketdetailsresponse)`::PreserveSession` estiver definido como `Never`, o serviço de matchmaking copiará as medições de servidor de cada membro para a representação interna do tíquete.
   Ele achata as medições de servidor dos membros do tíquete em uma única coleção de medições de servidor para o tíquete, que é armazenada na representação interna do tíquete como um atributo de tíquete `special`.

   Se [XblMatchTicketDetailsResponse](/pt-BR/reference/live/xsapi-c/matchmaking_c/structs/xblmatchticketdetailsresponse)`::PreserveSession` estiver definido como `Always`, as medições de servidor não serão usadas.
   Em vez disso, o serviço de matchmaking copia o valor `/properties/system/matchmaking/serverConnectionString` da sessão para a representação interna do tíquete como uma coleção `serverMeasurements` de tamanho 1 com latência zero.

5. O serviço de matchmaking combina a sessão de tíquete com outras, que representam outros grupos, levando em conta as coleções de medições de servidor. O serviço tenta combinar o grupo com outros grupos que tenham os mesmos datacenters altamente preferidos.

6. Depois que um grupo combinado é encontrado, o serviço de matchmaking cria ou identifica uma sessão de destino e adiciona todos os jogadores das sessões de tíquete combinadas. O serviço grava as medições de servidor achatadas finais do grupo combinado em `/properties/system/serverConnectionStringCandidates`. Ele grava as medições de servidor enviadas originalmente por cada membro recém-adicionado à sessão de destino em `/members/{index}/constants/system/matchmakingResult/serverMeasurements`.

7. Todos os jogadores realizam a inicialização na sessão de destino, conforme mencionado anteriormente. No entanto, como os jogadores se conectarão ao XBOX Compute, eles não realizam QoS entre si para confirmar a conectividade.

8. Todos os jogadores jogam.

[Voltar ao início deste tópico.](#top)

<a id="see-also" />

## Confira também

[Visão geral do matchmaking](/pt-BR/services/xbox-services/multiplayer/matchmaking/live-matchmaking-overview)


## Related topics

- [Matchmaking SmartMatch](/pt-BR/services/xbox-services/multiplayer/matchmaking/live-matchmaking-nav.md)
- [Jogando usando o matchmaking SmartMatch (fluxograma)](/pt-BR/services/xbox-services/multiplayer/mpm/concepts/flowcharts/live-mpm-play-with-smartmatch-matchmaking.md)
- [Matchmaking multiplayer com SmartMatch e MPM](/pt-BR/services/xbox-services/multiplayer/mpm/how-to/live-play-multiplayer-with-matchmaking.md)
- [Conceitos de matchmaking](/pt-BR/services/xbox-services/multiplayer/matchmaking/concepts/live-matchmaking-concepts-nav.md)
- [Conceitos](/pt-BR/services/xbox-services/multiplayer/matchmaking/concepts/index.md)
