Principais recursos
Os principais recursos da API do Multiplayer Manager são os seguintes.- Gerenciamento de sessões e matchmaking dos serviços do XBOX simplificados
- Modelo de programação baseado em estado e em eventos
- Garante as práticas recomendadas dos serviços do XBOX, além de estar em conformidade com os XRs de Multiplayer
- Implementa os fluxogramas do Multiplayer 2015
- Sessões grandes do MPSD (mais de 100 membros) não são compatíveis.
- Destina-se apenas a designs multiplayer hospedados por pares. Títulos com servidores dedicados devem usar o serviço Multiplayer Activity ou as APIs do serviço Multiplayer e chamadas de serviço para serviço (tópico sob NDA).
Para passar na certificação, seu jogo ainda precisa implementar os eventos obrigatórios para o multiplayer online.
Visão geral
O Multiplayer Manager se baseia nos principais conceitos a seguir.- Sessão de lobby: uma sessão persistente usada para gerenciar os usuários locais do dispositivo e os amigos convidados que desejam jogar juntos. O grupo pode jogar o jogo; por exemplo, várias rodadas, mapas e níveis. A sessão de lobby acompanha esse grupo principal de amigos (incluindo os jogadores locais do dispositivo). Normalmente, esse grupo é formado enquanto o host navega pelos menus e conversa com os membros do grupo para decidir qual modo de jogo desejam jogar.
- Sessão de jogo: acompanha os jogadores que estão jogando uma instância específica do jogo. Por exemplo, uma corrida, um mapa ou um nível. Você pode criar uma nova sessão de jogo por meio de XblMultiplayerManagerJoinGameFromLobby que inclua os membros da sessão de lobby. Quando um membro aceita um convite, ele é adicionado ao lobby e à sessão de jogo (se houver espaço). Jogadores adicionais podem ser adicionados à sessão de jogo se o matchmaking estiver habilitado, mas esses jogadores adicionais não são adicionados à sessão de lobby. Isso significa que, quando o jogo termina, os jogadores da sessão de lobby continuam juntos, enquanto os jogadores extras do matchmaking não.
- XblMultiplayerManagerMember: representa um usuário individual conectado em um dispositivo local ou remoto.
- XblMultiplayerManagerDoWork: garante que as atualizações adequadas do estado do jogo sejam mantidas entre o título e o serviço Multiplayer dos serviços do XBOX. Para garantir o melhor desempenho, XblMultiplayerManagerDoWork deve ser chamado com frequência, por exemplo, uma vez por quadro. XblMultiplayerManagerDoWork fornece uma matriz de eventos de retorno de chamada XblMultiplayerEvent para o jogo tratar.
Máquina de estado
A chamada de XblMultiplayerManagerDoWork é necessária para garantir que seu estado seja mantido atualizado. Para que o Multiplayer Manager faça seu trabalho, você deve chamar o método XblMultiplayerManagerDoWork regularmente. A maneira mais confiável de fazer isso é chamá-lo pelo menos uma vez por quadro. XblMultiplayerManagerDoWork retorna rapidamente quando não há trabalho a ser feito, portanto não há motivo para se preocupar em chamá-lo com muita frequência.Threading
Nenhum dos objetos retornados pela API do Multiplayer Manager deve ser considerado thread-safe. No entanto, ela oferece controle para fazer a sincronização de threads se você a estiver chamando de vários threads. A biblioteca tem proteção interna contra multithreading. No entanto, você ainda precisa implementar seu próprio bloqueio se precisar que um thread acesse quaisquer valores; por exemplo, percorrer a lista de membros enquanto outro thread pode estar invocando XblMultiplayerManagerDoWork.Atualização do modelo baseado em estado
O Multiplayer Manager mantém um modelo baseado em estado que atualiza as sessões em segundo plano à medida que os jogadores entram, saem ou quando as sessões são atualizadas. Para ajudar a evitar problemas de sincronização de threads entre o thread da interface do usuário e o thread do jogo, o Multiplayer Manager não atualiza o estado das sessões visível para o aplicativo até que você chame o método XblMultiplayerManagerDoWork. Tradicionalmente, você receberia notificações sobre eventos, como alterações de sessão, em um thread em segundo plano e, em seguida, teria que sincronizá-las com um thread da interface do usuário para exibir essas alterações. Com o Multiplayer Manager, esse trabalho de bastidores é feito para você. Você pode chamar XblMultiplayerManagerDoWork no thread principal no momento que escolher para obter o instantâneo mais recente do estado que o Multiplayer Manager está armazenando em buffer para você nos bastidores.Eventos e notificações
O Multiplayer Manager define um conjunto de eventos significativos (consulte XblMultiplayerEvent) e notifica o título por meio do método XblMultiplayerManagerDoWork quando eles ocorrem. Por exemplo, os eventos incluem jogadores remotos entrando ou saindo, propriedades de membros mudando ou o estado da sessão mudando. Todas as APIs do Multiplayer Manager são assíncronas. O método XblMultiplayerManagerDoWork retorna uma lista de eventos quando essas operações assíncronas são concluídas. Seu título deve tratar esses eventos da maneira adequada à sua situação. Para obter mais detalhes, consulte a documentação da classe XblMultiplayerEvent. Cada XblMultiplayerEvent retornado inclui umEventArgsHandle, que você deve usar para obter os args apropriados para o tipo de evento.
Por exemplo, se o XblMultiplayerEventType for MemberJoined, você poderia chamar XblMultiplayerEventArgsMembersCount e XblMultiplayerEventArgsMembers.
O exemplo a seguir demonstra o uso de XblMultiplayerManagerDoWork para tratar eventos.
API C simples
- XblMultiplayerEvent
- XblMultiplayerEventArgsMembers
- XblMultiplayerEventArgsMembersCount
- XblMultiplayerEventArgsPropertiesJson
- XblMultiplayerEventType
- XblMultiplayerManagerDoWork
- XblMultiplayerManagerMember
Cenários
Esta seção aborda cenários comuns e as APIs que você chamaria em cada cenário. Também são fornecidas algumas informações sobre o que o Multiplayer Manager faz nos bastidores.- Habilitar jogos multiplayer com amigos usando o Multiplayer Manager
- Encontrando um jogo multiplayer usando o SmartMatch com o Multiplayer Manager
- Enviando convites de jogo usando o Multiplayer Manager
- Tratando a ativação de protocolo para iniciar um jogo usando o Multiplayer Manager
O que o Multiplayer Manager não faz
O Multiplayer Manager facilita muito a implementação de cenários multiplayer e abstrai alguns dos dados para você. No entanto, o Multiplayer Manager não trata o seguinte:- Jogos em servidores online persistentes, como jogos multiplayer massivos online (MMO), ou outros tipos de jogos que exigem sessões grandes (mais de 100 jogadores em uma sessão)
- Gerenciamento de sessões de servidor para servidor
- Limitação de chamadas do MPSD para respeitar a limitação de taxa refinada
- Mistura das APIs do serviço Multiplayer com as APIs do Multiplayer Manager
O Multiplayer Manager não está restrito a nenhuma tecnologia de rede específica e deve funcionar com qualquer camada de comunicação de rede.
Recursos
Para obter um exemplo funcional da API, consulte o exemplo NetRumble. Para obter a documentação da API, consulte multiplayer_manager_c. Você também pode consultar o arquivo de cabeçalhomultiplayer_manager_c.h.
Se você tiver dúvidas, comentários ou problemas ao usar o Multiplayer Manager, entre em contato com seu gerente de contas de desenvolvedor (DAM) ou publique um tópico de suporte nos fóruns em https://forums.xboxlive.com.