Fluxograma: o processo de matchmaking do SmartMatch
O fluxograma a seguir ilustra o processo de matchmaking do SmartMatch.
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. 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. 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 no tópico Tarefas de multiplayer.
A resposta do método de criação do tíquete de partida é um objeto 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.
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âmetroticketAttributesJson do método 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 com o nome de propriedadematchAttrs.
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.
Voltar ao início deste tópico.
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. Durante a atividade de partida, as seguintes alterações são feitas nos objetos JSON da sessão.-
Campo
/servers/matchmaking/properties/system/statusdefinido comofound -
Campo
/servers/matchmaking/properties/system/targetSessionRefdefinido como a sessão de destino -
Campo
/members/{index}/properties/custom/matchAttrsde 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
ticketAttributesdo tíquete de partida para o campo/members/{index}/constants/custom/matchmakingResult/ticketAttrs
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.Reutilizando a sessão de jogo como sessão de tíquete de partida
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.preserveSession definido como 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.
Excluindo o tíquete de partida
Para excluir o tíquete de partida, o título chama XblMatchmakingDeleteMatchTicketAsync. Excluir o tíquete:- Interrompe o matchmaking para os jogadores da sessão de tíquete.
-
Atualiza o campo
/servers/matchmaking/properties/system/statusda sessão de tíquete paracanceled.
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.-
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 valoresgsiSetId,gameVariantIdemaxAllowedPlayersno objetotargetSessionConstants/custom/gameServerPlatform. - Todos os outros jogadores do grupo ingressam na sessão de tíquete.
-
Todos os membros do grupo baixam os valores
measurementServerAddressesdo objeto/constants/systemda 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
measurementServerAddressesda sessão usando o método XblMultiplayerSessionConstantsSetMeasurementServerAddressesJson e XblMultiplayerSessionConstants::MeasurementServerAddressesJson. -
O batedor chama 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
Se XblMatchTicketDetailsResponseMUSTao hopper, para impedir a combinação com jogadores que tenham constantes incompatíveis.::PreserveSessionestiver definido comoNever, 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íquetespecial. Se XblMatchTicketDetailsResponse::PreserveSessionestiver definido comoAlways, as medições de servidor não serão usadas. Em vez disso, o serviço de matchmaking copia o valor/properties/system/matchmaking/serverConnectionStringda sessão para a representação interna do tíquete como uma coleçãoserverMeasurementsde tamanho 1 com latência zero. - 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.
-
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. - 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.
- Todos os jogadores jogam.
