Integre a funcionalidade do cliente de jogos do Amazon GameLift Servers
Integre a funcionalidade de hospedagem de jogos do Amazon GameLift Servers em qualquer componente da solução que precise se comunicar com o serviço do Amazon GameLift Servers, como para obter informações sobre a sessão do jogo ou criar novas sessões de jogo. Na maioria dos casos, essa funcionalidade é incorporada ao componente de serviço de backend. Adicione funcionalidade para tarefas principais, incluindo:
-
Solicite informações e status das sessões de jogo ativas.
-
Reserve um slot para um jogador em uma sessão de jogo existente.
-
Cria uma sessão de jogo para um grupo de jogadores.
-
Solicitar criação de partidas para um ou mais jogadores.
-
Forneça dados atualizados para sessões de jogo existentes.
Consulte Interações entre cliente/servidor do jogo com o Amazon GameLift Servers para obter mais detalhes sobre como os componentes de hospedagem de jogos interagem por meio dos Amazon GameLift Servers SDKs.
Configure a Amazon GameLift Servers API.
Adicione o AWS SDK para C++ com o Amazon GameLift Servers a um projeto.
Adicione código para inicializar um cliente Amazon GameLift Servers e armazenar as principais configurações. Esse código deve ser executado antes de qualquer código dependente do Amazon GameLift Servers.
-
Defina uma configuração de cliente. Use a configuração padrão do cliente ou crie um objeto de configuração do cliente personalizado. Para obter mais informações, consulte AWS::Client::ClientConfiguration
(C++) ou AmazonGameLiftConfig (C#). A configuração do cliente especifica uma região de destino e um endpoint a serem usados ao entrar em contato com o Amazon GameLift Servers. A região identifica o conjunto de recursos implantados (frotas, filas e marcador de jogos) a serem usados. A configuração do cliente padrão define a localização na região Leste dos EUA (Norte da Virgínia). Para usar qualquer outra Região, crie uma configuração personalizada.
-
Inicialize um cliente do Amazon GameLift Servers. Use Aws::GameLift::GameLiftClient()
(C++) ou AmazonGameLiftClient() (C#) com uma configuração de cliente padrão ou uma configuração de cliente personalizada. -
Se você estiver utilizando sessões de jogadores, use um mecanismo para gerar um identificador exclusivo para cada jogador. Para obter mais informações, consulte Gerar IDs de jogador.
-
Colete e armazene informações a seguir:
-
Frota de destino – Se você estiver criando sessões de jogo manualmente em uma frota específica, forneça um ID de frota ou alias que aponte para a frota de destino. Para uma frota multilocal, especifique o identificador da frota e um local. Como melhor prática, use os aliases de frota para poder trocar jogadores de uma frota para outra sem precisar atualizar o serviço de backend.
-
Fila de destino – Para jogos que usam filas de várias frotas para colocar novas sessões de jogo, especifique o nome da fila a ser usada.
-
Credenciais da AWS – Todas as chamadas para a Conta da AWS devem fornecer credenciais para a Amazon GameLift Servers que hospeda o jogo. Você pode adquirir essas credenciais criando um usuário jogador, conforme descrito em Configurar o acesso programático para o jogo. Dependendo de como você gerencia o acesso do usuário player, faça o seguinte:
-
Caso use uma função para gerenciar as permissões de usuário do jogador, adicione um código para assumir a função antes de chamar uma API do Amazon GameLift Servers. A solicitação para assumir a função retorna um conjunto de credenciais de segurança temporárias. Para obter mais informações, consulte Mudar para um perfil do IAM (API da AWS) no Guia do usuário do IAM.
-
Caso tenha credenciais de segurança de longo prazo, configure seu código para localizar e use as credenciais armazenadas. Consulte Autenticar usando credenciais de longo prazo no Guia de Referência de Ferramentas e SDKs da AWS. Para obter informações sobre como armazenar credenciais, consulte as referências de API da AWS para (C++)
e (.NET). -
Caso tenha credenciais de segurança temporárias, adicione código para atualizar regularmente as credenciais usando o AWS Security Token Service (AWS STS), conforme descrito em Usar credenciais de segurança temporárias com os SDKs da AWS no Guia do usuário do IAM. O código deve solicitar novas credenciais antes que as antigas expirem.
-
-
Obter sessões de jogos ativas
Adicione o código para descobrir as sessões de jogos disponíveis e gerenciar as configurações de sessões de jogos e metadados.
Procure sessões de jogos ativas
Use SearchGameSessions para obter informações sobre uma sessão de jogo específica, todas as sessões ativas ou sessões que atendam a um conjunto de critérios de pesquisa. Essa chamada retorna um objeto GameSession para cada sessão de jogo ativa correspondente à solicitação de pesquisa. Esse objeto contém o nome DNS, o endereço IP e a porta que um cliente de jogo precisa para se conectar à sessão do jogo.
Use critérios de pesquisa para obter uma lista filtrada de sessões de jogos ativas para jogadores ingressarem. Por exemplo, você pode filtrar sessões da seguinte maneira:
-
Exclua sessões de jogos que sejam completas:
CurrentPlayerSessionCount = MaximumPlayerSessionCount. -
Escolha sessões de jogos no tempo em que a sessão esteve em execução: avalie
CreationTime. -
Encontre sessões de jogos baseadas em uma propriedade personalizada do jogo:
gameSessionProperties.gameMode = "brawl".
Gerenciar dados de sessões de jogos
Use qualquer uma das operações a seguir para recuperar ou atualizar as informações sobre a sessão do jogo.
-
DescribeGameSessionDetails() – Obtenha o status de proteção da sessão de jogo, além das informações sobre ela.
-
UpdateGameSession() – Altere os metadados e as configurações de uma sessão de jogo conforme necessário.
-
GetGameSessionLogUrl – Acesse os logs armazenados da sessão de jogo.
Criar sessões de jogos
Adicione um código para iniciar novas sessões de jogos nas frotas implantadas e disponibilizá-las para jogadores. Existem duas opções para criar sessões de jogo, dependendo de como sua solução de hospedagem de jogo gerencia colocações de sessões de jogo.
Crie uma sessão de jogo com uma fila com vários locais
Use StartGameSessionPlacement a fim de colocar uma solicitação para uma nova sessão de jogo em uma fila. Para usar essa operação, crie uma fila. Isso determina onde o Amazon GameLift Servers coloca a nova sessão de jogo. Para obter informações mais sobre filas e como usá-las, consulte Faz correspondência com posicionamento de sessões de jogo.
Ao criar uma colocação de sessão do jogo, especifique o nome da fila a ser usada, um nome da sessão do jogo, um número máximo de jogadores simultâneos e um conjunto opcional de propriedades do jogo. Opcionalmente, também é possível fornecer uma lista de jogadores para ingressar automaticamente na sessão do jogo. Caso inclua dados de latência do jogador para Regiões relevantes, o Amazon GameLift Servers usará essas informações para colocar a nova sessão do jogo em uma frota que proporcione a experiência em jogabilidade ideal para os jogadores.
Para obter medições precisas de latência, use os sinalizadores de ping UDP do Amazon GameLift Servers. Esses endpoints permitem medir a latência real da rede UDP entre dispositivos de jogadores e possíveis locais de hospedagem, resultando em decisões de posicionamento mais precisas do que o uso de pings ICMP. Para obter mais informações sobre o uso de sinalizadores de ping UDP para medir a latência, consulte Sinalizadores de ping UDP.
A colocação da sessão do jogo é um processo assíncrono. Após ter feito uma solicitação, você poderá deixar que ela seja bem-sucedida ou expire. Você também pode cancelar a solicitação a qualquer momento usando StopGameSessionPlacement. Para verificar o status da solicitação de colocação, chame DescribeGameSessionPlacement.
Crie uma sessão do jogo em uma frota específica
Use CreateGameSession para criar uma nova sessão em uma frota especificada. Essa operação síncrona pode ser bem-sucedida ou falhar, dependendo dos recursos que a frota tem à disposição para hospedar uma nova sessão do jogo. Após o Amazon GameLift Servers criar a nova sessão de jogo e retornar um objeto de GameSession, você poderá juntar jogadores a ela.
Ao usar esta operação, forneça um ID de frota ou alias, um nome de sessão e um número máximo de jogadores simultâneos para o jogo. Você também pode incluir um conjunto de propriedades do jogo. As propriedades do jogo são definidas em uma matriz de pares de chave-valor.
Caso use o atributo de proteção de recursos do Amazon GameLift Servers para limitar o número de sessões de jogo que um jogador pode criar, forneça o ID do jogador do criador da sessão de jogo.
Adicionar um jogador a uma sessão de jogo
Adicione código para reservar um slot de jogador em uma sessão de jogo ativa e conecte clientes de jogos a sessões de jogos. Essa ação está disponível se seu jogo usa sessões de jogadores com IDs de jogador exclusivos. Para obter mais informações sobre sessões de jogadores, consulte Amazon GameLift Servers e a experiência do jogador.
-
Reserve um slot de jogador em uma sessão de jogo
Para reservar um slot de jogador, crie uma sessão de jogador para a sessão de jogo. Há duas maneiras de fazer isso:
-
Se você usa StartGameSessionPlacement ou StartMatchmaking para criar uma sessão de jogo, você pode incluir um ou mais jogadores na solicitação para criar sessões de jogadores para eles na nova sessão de jogo.
-
Para adicionar jogadores a uma sessão de jogo existente, chame CreatePlayerSession ou CreatePlayerSessions com um ID de sessão de jogo.
Uma solicitação de sessão de jogador deve incluir um ID exclusivo do jogador. Para obter mais informações, consulte Gerar IDs de jogador. Ao receber a solicitação, o Amazon GameLift Servers primeiro verifica se a sessão do jogo está aceitando novos jogadores e tem slots de jogador disponível. Se for bem-sucedido, o Amazon GameLift Servers reserva um slot para o jogador, cria a nova sessão de jogador e retorna um objeto de PlayerSession.
Uma sessão de jogador pode incluir um conjunto de dados de jogador personalizado. Esses dados são armazenados no objeto de sessão do jogador recém-criado. O Amazon GameLift Servers transmite esse objeto ao servidor de jogo quando o jogador se conecta diretamente à sessão do jogo. Ao solicitar várias sessões de jogadores, mapeie cada sequência de dados de jogadores para uma ID de jogador.
-
-
Conecte-se a uma sessão do jogo
Adicione código ao serviço de backend para recuperar o objeto do
PlayerSession(por exemplo, chamando DescribePlayerSessions()) e passe-o de volta para o cliente do jogo. Esse objeto contém o nome DNS, o endereço IP e a porta. O cliente do jogo pode usar essas informações para estabelecer uma conexão direta com o servidor.-
Conecte-se usando a porta especificada e o nome DNS ou endereço IP atribuído ao processo do servidor.
-
Se a geração de certificados TLS estiver habilitada para suas frotas, deverá se conectar usando o nome DNS e a porta.
-
Se o seu servidor de jogo valida as conexões de entrada dos jogadores, faça referência ao ID da sessão do jogador.
Depois de fazer a conexão, o cliente do jogo e o processo do servidor se comunicam diretamente sem envolver o Amazon GameLift Servers. O servidor mantém comunicação com o Amazon GameLift Servers para informar o status da conexão do jogador, o status de integridade e muito mais.
Se o servidor do jogo valida os novos jogadores, ele verifica se o ID da sessão do jogador corresponde a um espaço reservado na sessão do jogo e aceita ou nega a conexão do jogador. Quando o jogador se desconectar, o processo do servidor informará a conexão desfeita.
-
Transmitir dados de jogo personalizados para uma sessão de jogo
Seu cliente de jogo pode passar dados para uma sessão do jogo. Ao criar uma sessão de jogo, você pode incluir um conjunto de propriedades do jogo (pares de valores-chave) ou dados da sessão do jogo (valores de sequência de caracteres) na solicitação. Você também pode atualizar uma sessão de jogo existente com dados de jogo novos ou atualizados. Esses dados são passados para o processo do servidor do jogo que está hospedando a sessão do jogo, para serem usados pelo código do servidor do jogo. Não é possível excluir as propriedades do jogo.
Como exemplo, digamos que seu jogo defina os níveis de dificuldade: Novice, Easy, Intermediate, e Expert. Um jogador escolhe entrar em um jogo Easy. Seu cliente de jogo, por meio do serviço de backend, solicita uma nova sessão de jogo com a seguinte propriedade de jogo: {"Key":
"Difficulty", "Value":"Easy"}. Em resposta, o Amazon GameLift Servers solicita que um servidor de jogo disponível inicie uma nova sessão de jogo e transmite o objeto GameSession. O processo do servidor do jogo usa a propriedade do jogo fornecida para definir o nível de dificuldade da sessão do jogo.