- Dispositivo - Uma instância distinta do jogo em execução em um dispositivo físico. Um dispositivo local existe sempre que a API está sendo usada.
- Usuário - Um jogador individual conectado ou, mais precisamente, uma entidade
title_player_accountdo PlayFab que o jogo fornece ao PlayFab Party para fins de autenticação e identificação. Um ou mais usuários são associados a um determinado dispositivo. - Rede - Um conjunto protegido de um ou mais dispositivos e seus usuários autorizados que o jogo cria para trocar comunicação de chat ou de dados. Uma rede normalmente corresponde ao conceito de sessão multijogador ou de grupo de chat de um jogo.
- Ponto de extremidade - Uma abstração para enviar e receber dados dentro de uma rede. Um ponto de extremidade pode representar um dispositivo, um usuário ou qualquer conceito específico do jogo desejado.
- Controle de chat - Uma representação de um usuário especificamente para configurar, originar e direcionar o chat de voz e de texto em uma ou mais redes.
Relações entre objetos
Como uma hierarquia conceitual simplificada, as redes contêm dispositivos, que, por sua vez, contêm usuários, pontos de extremidade opcionais e controles de chat opcionais. Por exemplo:

- Obviamente, o Dispositivo C não poderia criar o Ponto de extremidade 4 na Rede 1, nem ver os Pontos de extremidade 1 a 3.
- O Dispositivo C não saberia da existência do Dispositivo A nem de seus dois controles de chat que estão apenas na Rede 1.
- Da mesma forma, o Dispositivo A não veria o Dispositivo C nem seu controle de chat que está apenas na Rede 2.
Os jogos não precisam se conectar a mais de uma rede simultaneamente para usar o PlayFab Party com êxito. Você pode saber mais sobre se e como usar várias redes em um tópico avançado posterior.
Atributos comuns dos objetos
Todos os objetos têm tempos de vida bem definidos. Uma instância de jogo local cria e destrói cada objeto diretamente ou por meio de mecanismos de notificação padronizados que só são sinalizados durante uma janela de tempo escolhida pelo jogo. O trabalho com notificações é descrito com mais detalhes em um tópico posterior. Todos os objetos da API do PlayFab Party também dão suporte ao conceito de contexto personalizado, que é simplesmente uma forma de armazenar um ponteiro ou valor de “atalho” opcional, somente local, com o objeto. Os contextos personalizados facilitam ir dos objetos do PlayFab Party de volta aos objetos privados correspondentes do seu jogo na memória (se houver), sem precisar realizar uma pesquisa ineficiente. Esses valores não são transmitidos remotamente, pois os valores de ponteiro só têm significado para a instância de jogo local. Por fim, todos os objetos acima, exceto a rede, têm um subobjeto “Local” especializado que contém métodos e propriedades disponíveis apenas para o dispositivo local que é dono do objeto. Por exemplo, há um objeto basePartyEndpoint usado para representar qualquer ponto de extremidade local ou remoto, e um objeto mais específico PartyLocalEndpoint que pode ser recuperado por meio de PartyEndpoint::GetLocal() somente se esse ponto de extremidade tiver sido de fato criado pelo dispositivo local. É aqui que o método PartyLocalEndpoint::SendMessage() para transmitir dados de jogo é exposto, pois não faria sentido um dispositivo poder, de alguma forma, transmitir dados a partir dos pontos de extremidade de origem de outro dispositivo remoto.
Ao usar a interface C++ do PlayFab Party (recomendada), os objetos são expostos como instâncias de classes C++. Ao usar a interface C simples, os objetos são representados por valores de identificador.
As funções de todos os principais objetos em mais detalhes
- Gerenciador (
PartyManager) - Rede (
PartyNetwork) - Dispositivo (
PartyDeviceePartyLocalDevice) - Usuário (IDs de entidade de usuário e
PartyLocalUser) - Ponto de extremidade (
PartyEndpointePartyLocalEndpoint) - Controle de chat (
PartyChatControlePartyLocalChatControl) - Alteração de estado (
PartyStateChange)
Gerenciador
Além dos objetos resumidos anteriormente, a API do PlayFab Party também expõe um objeto singleton de nível superior,PartyManager.
Esse objeto utilitário/organizacional é usado principalmente como ponto de partida para começar a trabalhar com os outros objetos. É no Gerenciador que novas redes e usuários locais são criados inicialmente, por exemplo. Todas as conclusões de operações assíncronas e notificações também são centralizadas aqui. Fundamentalmente, é no gerenciador que a própria biblioteca do PlayFab Party é inicializada antes do uso e limpa quando não é mais necessária.
Rede
Um objetoPartyNetwork representa um conjunto protegido de dispositivos participantes, seus usuários autorizados e quaisquer pontos de extremidade ou controles de chat correspondentes. As redes são criadas inicialmente vazias, mas os dispositivos se conectam a elas e autenticam pelo menos um usuário local na rede. As redes que não têm nenhum usuário autenticado são destruídas automaticamente após um tempo limite.
Para que seja possível se conectar a elas, as redes são referenciadas usando descritores de rede. Os descritores de rede são estruturas binárias em grande parte opacas que contêm as informações de que o PlayFab Party precisa internamente para identificar e localizar a rede. A API fornece métodos para serializar as estruturas em cadeias de caracteres adequadas para serviços Web e vice-versa, para que possam ser trocadas com outros dispositivos usando mecanismos comuns de convite de plataformas sociais, o PlayFab Matchmaking ou outros mecanismos externos de encontro fora do escopo do próprio PlayFab Party.
O descritor de rede de uma rede pode mudar em circunstâncias raras. Os jogos devem estar preparados para receber notificações dessas alterações e, em seguida, atualizar ou anunciar novamente o novo descritor de rede de uma rede existente, a fim de evitar problemas com a conexão de dispositivos adicionais.
PartyNetwork incluem autenticar usuários locais na rede, conectar e enumerar controles de chat, criar e enumerar pontos de extremidade ou obter informações de desempenho de toda a rede.
Dispositivo
O objetoPartyDevice representa uma instância distinta do jogo e do código da biblioteca do PlayFab Party em execução em um dispositivo físico. A maioria das operações não é realizada nos próprios objetos PartyDevice; em vez disso, eles são um mecanismo organizacional para definir quais pontos de extremidade ou controles de chat pertencem a essa instância do jogo, especialmente em plataformas e jogos que dão suporte a mais de um usuário local simultaneamente. O PlayFab Party usa esse conhecimento das relações para otimizar a transmissão de dados de jogo e de chat, enviando, por exemplo, apenas uma cópia de uma mensagem mesmo que vários destinos no dispositivo precisem recebê-la.
Os objetos PartyDevice remotos são “subprodutos” da conexão a uma rede e da autenticação de um usuário nessa rede. Eles só são criados quando usuários remotos válidos e autenticados associados ao dispositivo estão participando de uma rede à qual o dispositivo local também está conectado. Da mesma forma, eles são destruídos quando isso deixa de ser verdade.
Por outro lado, o subobjeto especializado PartyLocalDevice está sempre disponível para ser referenciado pela instância de jogo local enquanto o PlayFab Party estiver inicializado. Ele nunca é criado ou destruído explicitamente.
Usuário
Um usuário do PlayFab Party é um jogador humano exclusivo para o qual o jogo realiza um Login de jogador do PlayFab para obter uma ID de entidadetitle_player_account e um token.
Os usuários remotos são identificados na API do PlayFab Party apenas pela cadeia de caracteres da ID de entidade associada aos controles de chat e, opcionalmente, aos pontos de extremidade. Eles não são representados por um objeto dedicado. Isso ocorre porque o PlayFab Party não tem funcionalidades que interajam de forma significativa com usuários arbitrários, exceto para identificação bruta e como um rótulo associado a esses outros objetos.
Por outro lado, para os usuários locais, há objetos PartyLocalUser explícitos, pois os jogos são responsáveis pelo gerenciamento do tempo de vida deles no PlayFab Party. O jogo normalmente criará um PartyLocalUser quando tiver conectado com êxito esse jogador do PlayFab usando o método de login aplicável e destruirá o PartyLocalUser conforme apropriado quando esse usuário se desconectar. Em plataformas e jogos que dão suporte a vários jogadores locais conectados, objetos PartyLocalUser adicionais devem ser criados para cada jogador.
Os objetos PartyLocalUser também são importantes porque são a base de toda a autenticação. Um usuário local válido deve existir para criar uma nova rede ou para se autenticar em uma.
A autorização de usuários é descrita com mais detalhes no tópico sobre Convites e o modelo de segurança.
Quase todas as operações exigem que um PartyLocalUser seja fornecido ou esteja presente, embora pouquíssimas operações sejam realizadas nos próprios objetos PartyLocalUser.
Os objetos PartyLocalUser são criados usando o objeto PartyManager. Eles só podem ser destruídos explicitamente por seus criadores. Embora não tenham representação direta como objeto nos dispositivos remotos, os controles de chat e os pontos de extremidade associados a eles serão destruídos se o dispositivo proprietário remover o PartyLocalUser ou se desconectar da rede, de forma normal ou não.
Ponto de extremidade
Os objetosPartyEndpoint são opcionais, mas são o núcleo da comunicação de dados do PlayFab Party para os jogos que os utilizam. Assim como os soquetes de rede típicos, os pontos de extremidade são um mecanismo de endereçamento abstrato para originar ou direcionar mensagens de dados dentro de uma rede. Eles podem representar um dispositivo, um usuário individual ou qualquer conceito arbitrário definido pelo jogo (por exemplo, uma unidade de tanque) que você queira identificar de forma exclusiva para enviar e receber mensagens.
O subobjeto especializado PartyLocalEndpoint destina-se aos pontos de extremidade criados na rede pela instância de jogo local. É nele que reside a maior parte da funcionalidade dos pontos de extremidade. Seu método PartyLocalEndpoint::SendMessage() transmite cargas de dados de jogo do PartyLocalEndpoint para um ou mais outros objetos PartyEndpoint na mesma rede. Ele fornece várias opções para selecionar a melhor forma de lidar com a perda de pacotes na Internet (por exemplo, garantir a entrega e/ou a ordenação), para controlar o equilíbrio entre baixa latência e a combinação de várias mensagens do mesmo ponto de extremidade local ou de outros para reduzir o uso de largura de banda, e para reagir quando a qualidade da conexão não for suficiente para suportar a taxa em que o jogo está enviando.
Além de ser uma origem ou um destino de mensagens de dados, cada objeto PartyEndpoint também recebe do PlayFab Party um identificador exclusivo de ponto de extremidade de 16 bits, que permite referenciar o ponto de extremidade específico em cargas de mensagens enviadas para ou de objetos PartyEndpoint separados na rede. Isso oferece uma forma conveniente de evitar a sobrecarga de enviar uma cadeia de caracteres completa e maior de ID de entidade de usuário ou outro identificador que ele possa representar, por exemplo, sem precisar criar sua própria negociação de acordo de identidade ponto a ponto.
Os objetos PartyLocalEndpoint são criados usando o objeto PartyNetwork que os contém. Isso faz com que objetos PartyEndpoint correspondentes sejam criados nos dispositivos remotos. Um ponto de extremidade pode ser destruído explicitamente por seu criador ou será destruído implicitamente quando o dispositivo proprietário se desconectar da rede ou quando o objeto PartyLocalUser associado (se algum tiver sido especificado) for removido da rede.
Controle de chat
Os objetosPartyChatControl são o mecanismo para usar os recursos opcionais de comunicação por chat do PlayFab Party. Eles representam os dispositivos de entrada/saída de áudio, as preferências e as políticas de comunicação associados a um determinado usuário.
O subobjeto especializado PartyLocalChatControl também está disponível para os controles de chat criados pela instância de jogo local. É nele que você configura as permissões que permitem a comunicação por chat de ou para objetos PartyChatControl remotos, por exemplo, para escolher entre chat de toda a rede ou apenas da equipe, ou para aplicar restrições de política da plataforma. Os controles de chat locais são usados para enviar texto de chat, sintetizar texto em fala, solicitar transcrições e traduções de fluxos de voz, silenciar e muito mais.
Os objetos PartyLocalChatControl precisam estar conectados a uma rede antes de serem criados como objetos PartyChatControl nos dispositivos remotos dessa mesma rede. Um dispositivo sempre verá apenas um único objeto PartyChatControl representativo criado, mesmo quando esse dispositivo e o controle de chat estiverem conectados a mais de uma rede em comum. Isso ajuda a evitar duplicação ou interrupção desnecessária das mensagens de chat de áudio e de texto.
Os objetos PartyLocalChatControl são criados usando o objeto PartyLocalDevice que os contém. Um controle de chat pode ser destruído explicitamente por seu criador ou será destruído implicitamente quando o dispositivo proprietário se desconectar da rede ou quando o objeto PartyLocalUser associado for removido da rede.
Alteração de estado
As estruturasPartyStateChange são usadas para informar o jogo sobre todas as conclusões de operações assíncronas, mensagens recebidas, notificações de atualização e outros eventos relacionados à API.
Para simplificar o trabalho com interações complexas entre várias máquinas pela Internet com tempos imprevisíveis, o PlayFab Party garante que não modificará nenhum estado relatado pela API, exceto como resultado de uma chamada explícita do jogo. Mas, como você ainda precisa de uma forma de saber sobre operações iniciadas remotamente ou ocorrências não planejadas que modificam o estado local, o PlayFab Party e o jogo cooperam por meio de um par especial de métodos, PartyManager::StartProcessingStateChanges() e PartyManager::FinishProcessingStateChanges(). Eles são chamados em um ponto do loop de trabalho do jogo em que seja conveniente lidar com essas atualizações. Os novos eventos são relatados por PartyManager::StartProcessingStateChanges() como uma matriz de zero ou mais estruturas PartyStateChange. Depois que o jogo tiver tratado as alterações de estado, a matriz é devolvida usando PartyManager::FinishProcessingStateChanges().
A estrutura PartyStateChange não é um objeto completo por si só. É um cabeçalho base que deve ser convertido em uma estrutura mais detalhada que contém informações sobre o tipo específico de conclusão ou notificação, ponteiros para os objetos relevantes e quaisquer informações de erro.
O trabalho com alterações de estado é descrito em detalhes em um tópico posterior.
Próximas etapas
- Saiba mais sobre os convites do PlayFab Party e o modelo de segurança
- Saiba como o PlayFab Party interage com seus fluxos de descoberta
- Saiba mais sobre a comunicação por chat do PlayFab Party
- Veja como trabalhar com operações assíncronas e notificações no PlayFab Party
