

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Integrar um servidor de jogos com o Amazon GameLift Servers
<a name="gamelift-sdk-server"></a>

Seu servidor de jogo personalizado deve ser capaz de interagir com o Amazon GameLift Servers quando implantado e executado em recursos de hospedagem. Os tópicos desta seção descrevem como integrar seu projeto de servidor de jogos ao SDK do servidor para o Amazon GameLift Servers adicionar a funcionalidade necessária e opcional. Esta seção inclui instruções gerais que você pode usar com qualquer servidor específico do idioma. SDKs Também inclui orientações detalhadas sobre como integrar seus projetos de jogos Unreal Engine e Unity. 

**Topics**
+ [Integre o Amazon GameLift Servers ao seu servidor de jogos com o SDK do servidor.](gamelift-sdk-server-api.md)
+ [Integre o SDK do servidor para mecanismos de jogos](integration-engines.md)

# Integre o Amazon GameLift Servers ao seu servidor de jogos com o SDK do servidor.
<a name="gamelift-sdk-server-api"></a>

Este tópico fornece orientação geral sobre a funcionalidade do SDK do servidor que você precisa adicionar ao código do servidor de jogos/ Essa funcionalidade permite que os processos do servidor de jogos se comuniquem com o serviço do Amazon GameLift Servers. Use essas instruções para servidores de jogos que você planeja implantar em frotas EC2 gerenciadas pelo Amazon GameLift Servers, frotas de contêineres gerenciados ou frotas Anywhere. 

Os processos do servidor do jogo se comunicam com o serviço do Amazon GameLift Servers para receber instruções do serviço e relatar a integridade do processo do servidor e o status da sessão do jogo. Para obter informações detalhadas sobre interações entre seus componentes da solução de hospedagem de jogos (servidor de jogos, serviço de backend, cliente de jogos e Amazon GameLift Servers), consulte [client/server Interações do jogo com Amazon GameLift Servers](gamelift-sdk-interactions.md).

**Obtenha o SDK do servidor**

Para preparar seu jogo para hospedagem, adicione o SDK do servidor para o Amazon GameLift Servers ao seu projeto de servidor de jogos. O Server SDK está disponível em várias linguagens. Para obter mais informações sobre o suporte de ferramentas para servidores de jogos, incluindo o SDK do servidor, consulte [Obter ferramentas de desenvolvimento do Amazon GameLift Servers](gamelift-supported.md).

Baixe o SDK do servidor para sua linguagem de desenvolvimento em [github.com/amazon-gamelift](https://github.com/amazon-gamelift). Você pode encontrar repositórios para as versões do SDK do servidor, plug-ins e outras ferramentas de desenvolvimento.

**nota**  
Se você estiver desenvolvendo usando o Unreal Engine ou o Unity, baixe o plug-in do Amazon GameLift Servers para esses mecanismos de jogo. O SDK do servidor está incorporado e pronto para uso. Consulte esses links para obter informações adicionais:  
Unreal Engine ([Download do plugin](https://github.com/amazon-gamelift/amazon-gamelift-plugin-unreal)) ([Guia de integração](integration-engines-setup-unreal.md))
Unity ([Download do plugin](https://github.com/amazon-gamelift/amazon-gamelift-plugin-unity)) ([Guia de integração](integration-engines-unity-using.md))

Referências da API do Server SDK:
+ [SDK do servidor C\$1\$1 para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-cpp-actions.md)
+ [SDK do servidor C\$1 para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-csharp-actions.md)
+ [SDK do servidor C\$1\$1 (Unreal) para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-unreal-actions.md)
+ [SDK do servidor do Go para Amazon GameLift Servers – ações](integration-server-sdk-go-actions.md)

## Inicializar o processo do servidor
<a name="gamelift-sdk-server-initialize"></a>

Adicione código para estabelecer comunicação com o serviço do Amazon GameLift Servers e informar quando o processo do servidor estiver pronto para hospedar uma sessão de jogo. Esse código deve ser executado antes de qualquer código do Amazon GameLift Servers.

1. Inicialize um cliente da Amazon GameLift Servers API chamando `InitSdk()`. Se você estiver preparando seu servidor de jogos para ser executado em frotas EC2 gerenciadas pelo Amazon GameLift Servers, use o `InitSDK()` padrão  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-initsdk)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-initsdk)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-initsdk)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-initsdk))  sem parâmetros. O cliente da API gerencia a conexão com o serviço do Amazon GameLift Servers para você. 
**Se você estiver preparando seu servidor de jogos para uso em uma frota Amazon GameLift Servers Anywhere:**  
Inicialize o cliente da API Amazon GameLift Servers chamando `InitSdk()` com o seguinte `ServerParameters`:  
O URL do Websocket usado para se conectar ao servidor do jogo.
O ID do processo usado para hospedar o servidor de jogos.
O ID do computador que hospeda os processos do seu servidor de jogos.
O ID da frota que contém sua computação do Amazon GameLift Servers Anywhere.
O token de autorização gerado pelo `[GetComputeAuthToken](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GetComputeAuthToken.html)` da operação do Amazon GameLift Servers.

1. Notificar o serviço de que o processo do servidor está pronto para hospedar uma sessão de jogo. Chame `ProcessReady()`  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-processready)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-processready)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-processready)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-processready))  com os seguintes `ProcessParameters`. Cada processo do servidor de jogo deve chamar o `ProcessReady()` apenas uma vez.
   + O número de porta para o processo do servidor. Quando o processo do servidor inicia uma sessão de jogo, ele fornece a porta para o serviço Amazon GameLift Servers, que atualiza as informações da sessão do jogo. Seu jogo pode recuperar essas informações e fornecê-las para que os clientes do jogo as usem para se conectarem ao processo do servidor e participarem da sessão do jogo.
   + Os locais dos arquivos que você deseja que o Amazon GameLift Servers armazene para você. Isso pode incluir registros de sessão de jogo e outros arquivos que o processo do servidor gera durante uma sessão de jogo. Embora o Amazon GameLift Servers salve esses arquivos temporariamente na computação em que o processo do servidor está sendo executado, eles só estão disponíveis até que a instância seja encerrada. Você pode acessar os arquivos armazenados por meio do [Amazon GameLift Serversconsole](https://console.aws.amazon.com/gamelift) ou chamando a operação da Amazon GameLift Servers API [GetGameSessionLogUrl()](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GetGameSessionLogUrl.html).
**Se você estiver preparando seu servidor de jogos para uso em uma frota de contêineres gerenciada pelo Amazon GameLift Servers:**  
Não há necessidade de especificar parâmetros de log para uma frota de contêineres. Em vez disso, envie a sessão do jogo e outros dados de log para a saída padrão. As frotas de contêineres capturam automaticamente toda a saída padrão do contêiner como um fluxo de logs.
   + As seguintes funções de retorno de chamada permitem ao Amazon GameLift Servers enviar mensagens ou solicitações para um processo do servidor de jogos. Você deve implementar cada uma dessas funções no código de seu servidor de jogo. Para obter mais informações, consulte `ProcessParameters`([C\$1\$1](integration-server-sdk5-cpp-datatypes.md#integration-server-sdk5-cpp-dataypes-process)) ([C\$1](integration-server-sdk5-csharp-datatypes.md#integration-server-sdk5-csharp-dataypes-process)) ([Unreal](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-process)) ([Go](integration-server-sdk-go-datatypes.md#integration-server-sdk-go-dataypes-process))  .
     + (Opcional) `onHealthCheck` – O Amazon GameLift Servers chama essa função regularmente para solicitar um relatório de status de integridade do servidor.
     + `onStartGameSession`— Amazon GameLift Servers chama essa função em resposta à solicitação do cliente [CreateGameSession()](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreateGameSession.html).
     + `onProcessTerminate` – O Amazon GameLift Servers força o processo do servidor a parar, permitindo que ele seja desligado normalmente.
     + (Opcional) `onUpdateGameSession` – O Amazon GameLift Servers fornece um objeto de sessão do jogo atualizado para o servidor de jogos ou fornece uma atualização de status em uma solicitação de alocação de partida. O recurso de [backfill do FlexMatch](https://docs.aws.amazon.com/gameliftservers/latest/flexmatchguide/match-backfill.html) requer esse retorno de chamada.

   Também é possível configurar um servidor de jogos para que ele possa acessar com segurança outros recursos da AWS que você possui ou controla. Para obter mais informações, consulte [Conecte seu servidor de jogos Amazon GameLift Servers hospedado a outros AWS recursos](gamelift-sdk-server-resources.md).

## (Opcional) Reportar a integridade do processo do servidor
<a name="gamelift-sdk-server-health"></a>

Adicione código ao seu servidor de jogo para implementar a função `onHealthCheck()` de retorno de chamada. O Amazon GameLift Servers invoca esse método de retorno de chamada periodicamente para coletar métricas de integridade. Para implementar essa função de retorno de chamada, faça o seguinte:
+ Avalie o status da integridade do processo do servidor. Por exemplo, convém informar o processo do servidor como não íntegro caso alguma dependência externa falhar.
+ Conclua a avaliação de integridade e responda ao retorno de chamada dentro de 60 segundos. Se o Amazon GameLift Servers não receber uma resposta nesse período, ele considerará automaticamente o processo do servidor como não íntegro.
+ Retornar um valor Booliano: verdadeiro para íntegro, falso para não íntegro.

Caso não implemente um retorno de chamada de verificação de integridade, o Amazon GameLift Servers considerará o processo do servidor íntegro, a menos que o servidor não responda.

O serviço do Amazon GameLift Servers usa a integridade do processo do servidor para encerrar processos não íntegros e liberar recursos. Se um processo do servidor continuar sendo não íntegro ou não responder por três verificações de integridade consecutivas, o serviço poderá encerrar o processo e iniciar um novo. O serviço coleta métricas sobre a integridade do processo do servidor de uma frota.

## (Opcional) Obtenha um certificado TLS
<a name="gamelift-sdk-server-getcertificate"></a>

e o processo do servidor estiver em execução em uma frota com a geração de certificado TLS ativada, você poderá recuperar o certificado para estabelecer uma conexão segura com um cliente de jogo e criptografar a comunicação entre cliente e servidor. Uma cópia do certificado é armazenada na instância. Para obter a localização do arquivo, chame `GetComputeCertificate()`  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-getcomputecertificate)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-getcomputecertificate)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-getcomputecertificate)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-getcomputecertificate))  .

## Iniciar uma sessão de jogo
<a name="gamelift-sdk-server-startsession"></a>

Adicione código para implementar a função `onStartGameSession` de retorno. O Amazon GameLift Servers invoca esse retorno de chamada para iniciar uma sessão de jogo no processo do servidor.

A `onStartGameSession` função usa um [GameSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GameSession.html)objeto como parâmetro de entrada. Esse objeto inclui informações importantes sobre a sessão do jogo, como o número máximo de jogadores. Também pode incluir dados do jogo e dados do jogador. A implementação da função deve realizar as seguintes tarefas:
+ Encerrar ações para criar uma sessão de jogo com base nas propriedades `GameSession`. No mínimo, o servidor do jogo deve associar o ID da sessão do jogo, que os clientes do jogo referenciam ao se conectar ao processo do servidor.
+ Processe os dados do jogo e os dados do jogador conforme necessário. Esses dados estão no objeto de `GameSession`.
+ Notifique o serviço do Amazon GameLift Servers quando uma nova sessão de jogo estiver pronta para aceitar jogadores. Chame a operação `ActivateGameSession()` da API do servidor  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-activategamesession)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-activategamesession)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-activategamesession)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-activategamesession))  . Em resposta a uma chamada bem-sucedida, o serviço altera o status da sessão do jogo para `ACTIVE`.

## (Opcional) Validar um jogador
<a name="gamelift-sdk-server-validateplayer"></a>

Caso esteja monitorando o status das sessões dos jogadores, adicione um código para validar um novo jogador quando ele se conectar a um servidor de jogo. O Amazon GameLift Servers rastreia jogadores e sessões de jogos disponíveis atuais.

Para validação, um cliente de jogo que tenta entrar em uma sessão de jogo deve incluir um ID de sessão de jogador. Amazon GameLift Serversgera esse ID quando seu jogo inicia novas sessões de jogo chamando [StartGameSessionPlacement()](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_StartGameSessionPlacement.html) ou [StartMatchmaking()](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_StartMatchmaking.html). Nessas solicitações, um espaço em uma sessão de jogo é reservada para a sessão do jogador.

Quando o processo do servidor do jogo recebe uma solicitação de conexão do cliente do jogo, ele chama `AcceptPlayerSession()`  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-acceptplayersession)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-acceptplayersession)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-acceptplayersession)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-acceptplayersession))  com o ID da sessão do jogador. Em resposta, o Amazon GameLift Servers verifica se o ID da sessão do jogador corresponde a um slot aberto reservado na sessão do jogo. Depois que o Amazon GameLift Servers valida o ID da sessão do jogador, o processo do servidor aceita a conexão. O jogador pode então entrar na sessão do jogo. Se o Amazon GameLift Servers não validar o ID da sessão do jogador, o processo do servidor negará a conexão.

## (Opcional) Informar o término de uma sessão de jogador
<a name="gamelift-sdk-server-droppedplayer"></a>

Caso esteja acompanhando o status das sessões dos jogadores, adicione um código para notificar o Amazon GameLift Servers quando um jogador sair da sessão do jogo. Esse código deve ser executado sempre que o processo do servidor detectar uma queda na conexão. O Amazon GameLift Servers usa essa notificação para rastrear os jogadores atuais e os slots disponíveis na sessão do jogo.

Para lidar com conexões perdidas, no código, adicione uma chamada à operação `RemovePlayerSession()` de API do servidor  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-removeplayersession)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-removeplayersession)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-removeplayersession)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-removeplayersession))  com o ID de sessão do jogador correspondente.

## Encerrar uma sessão de jogo
<a name="gamelift-sdk-server-shutdownsession"></a>

Adicione o código à sequência de desligamento do processo do servidor para notificar o Amazon GameLift Servers quando uma sessão de jogo estiver terminando. Para reciclar e atualizar recursos de hospedagem, encerre cada os processo do servidor após a conclusão da sessão do jogo.

No início do código de desligamento do processo do servidor, chame a operação `ProcessEnding()` da API do servidor  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-processending)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-processending)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-processending)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-processending))  g . Essa chamada notifica o Amazon GameLift Servers de que o processo do servidor está sendo encerrado. O Amazon GameLift Servers altera o status do da sessão de jogo e do processo do servidor para `TERMINATED`. Após chamar `ProcessEnding()`, é seguro que o processo seja encerrado.

## Responder a uma notificação de desligamento do processo do servidor
<a name="gamelift-sdk-server-terminate"></a>

Adicione o código para encerrar o processo do servidor em resposta a uma notificação do serviço do Amazon GameLift Servers. O serviço envia essa notificação quando o processo do servidor relata consistentemente problemas de integridade ou se a instância em que o processo do servidor está sendo executado está sendo encerrada. O Amazon GameLift Servers pode interromper uma instância como parte de um evento de redução de capacidade ou em resposta à interrupção da Instância Spot. Uma interrupção da Instância Spot fornece um aviso de dois minutos, o que dá ao processo do servidor tempo para desconectar os jogadores, preservar dados de estado do jogo e realizar outras tarefas de limpeza.

Para lidar com uma notificação de desligamento, faça as seguintes alterações no código do servidor do jogo:
+ Implemente a função de retorno de chamada `onProcessTerminate()`  ([C\$1\$1](integration-server-sdk5-cpp-datatypes.md#integration-server-sdk5-cpp-dataypes-process)) ([C\$1](integration-server-sdk5-csharp-datatypes.md#integration-server-sdk5-csharp-dataypes-process)) ([Unreal](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-process)) ([Go](integration-server-sdk-go-datatypes.md#integration-server-sdk-go-dataypes-process))  . Esta função deve chamar o código que desliga o processo do servidor.
+ Chame a operação `GetTerminationTime()` da API do servidor  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-getterm)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-getterm)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-getterm)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-getterm))  a partir do código de desligamento do servidor do jogo. Se o Amazon GameLift Servers emitiu uma chamada para interromper o processo do servidor, o `GetTerminationTime()` retornará o tempo estimado de rescisão.
+ No início do código de desligamento do servidor do jogo, chame a operação de API do servidor `ProcessEnding()`  ([C\$1\$1](integration-server-sdk5-cpp-actions.md#integration-server-sdk5-cpp-processending)) ([C\$1](integration-server-sdk5-csharp-actions.md#integration-server-sdk5-csharp-processending)) ([Unreal](integration-server-sdk5-unreal-actions.md#integration-server-sdk5-unreal-processending)) ([Go](integration-server-sdk-go-actions.md#integration-server-sdk-go-processending))  . Essa chamada notifica o serviço do Amazon GameLift Servers sobre o encerramento do processo do servidor. O serviço então altera o status do processo do servidor para `TERMINATED`. Após chamar `ProcessEnding()`, é seguro que o processo seja encerrado.

# Integre o SDK do servidor para mecanismos de jogos
<a name="integration-engines"></a>

Você pode usar o serviço gerenciado do Amazon GameLift Servers com a maioria dos principais mecanismos de jogos que oferecem suporte a bibliotecas C\$1\$1 ou C\$1, inclusive O3DE, Unreal Engine e Unity. Compile a versão que você precisa para o seu jogo; consulte os arquivos LEIA-ME de cada versão para mais instruções de compilação e requisitos mínimos. Para obter mais informações sobre plataformas Amazon GameLift Servers SDKs de desenvolvimento e sistemas operacionais disponíveis e compatíveis, consulte [Obter ferramentas de desenvolvimento do Amazon GameLift Servers](gamelift-supported.md) os servidores de jogos.

Além das informações específicas do mecanismo fornecidas neste tópico, encontre ajuda adicional para integração do Amazon GameLift Servers aos servidores de jogos, clientes e serviços nos seguintes tópicos:
+ [Integre o Amazon GameLift Servers ao seu servidor de jogos com o SDK do servidor.](gamelift-sdk-server-api.md) - Instruções detalhadas sobre como integrar o Amazon GameLift Servers a um servidor de jogos.
+ [Integre a funcionalidade do cliente de jogos do Amazon GameLift Servers](gamelift-sdk-client-api.md) – Instruções detalhadas sobre a integração a um cliente ou serviço de jogo, inclusive a criação de sessões de jogos e a entrada de jogadores em jogos.

## Unreal Engine
<a name="integration-engines-unreal"></a>

**Servidores de jogos**  
Prepare os servidores de jogos para hospedagem no Amazon GameLift Servers adicionando o [Server SDK para Amazon GameLift Servers para o Unreal Engine](integration-server-sdk5-unreal-actions.md) ao projeto e implementando a funcionalidade de servidor necessária. Para ajudar a configurar o plug-in Unreal Engine e adicionar o código do Amazon GameLift Servers, consulte [Integre o Amazon GameLift Servers em um projeto Unreal Engine](integration-engines-setup-unreal.md).

**Clientes e serviços de jogos**  
Permita que os serviços de and/or jogos de seus clientes de jogos interajam com o Amazon GameLift Servers serviço, por exemplo, para encontrar sessões de jogo disponíveis ou criar novas e adicionar jogadores aos jogos. A principal funcionalidade do cliente é fornecida no [AWS SDK for C\$1\$1](https://sdk.amazonaws.com/cpp/api/LATEST/namespace_aws_1_1_game_lift.html).. Para integrar o Amazon GameLift Servers ao projeto de jogo do Unreal Engine, consulte [Integre a funcionalidade do cliente de jogos do Amazon GameLift Servers](gamelift-sdk-client-api.md).

## Unity
<a name="integration-engines-unity"></a>

**Servidores de jogos**  
Prepare os servidores de jogos para hospedagem no Amazon GameLift Servers adicionando o [Server SDK para o Amazon GameLift Servers para C\$1](integration-server-sdk5-csharp-actions.md) ao projeto e implementando a funcionalidade de servidor necessária. Para ajudar a configurar o Unity e adicionar o código do Amazon GameLift Servers, consulte [Integre Amazon GameLift Servers em um projeto do Unity](integration-engines-unity-using.md).

**Clientes e serviços de jogos**  
Permita que os serviços de and/or jogos de seus clientes de jogos interajam com o Amazon GameLift Servers serviço, por exemplo, para encontrar sessões de jogo disponíveis ou criar novas e adicionar jogadores aos jogos. A principal funcionalidade do cliente é fornecida no [AWS SDK para .NET](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/). Para integrar o Amazon GameLift Servers ao projeto de jogo do Unity, consulte [Integre a funcionalidade do cliente de jogos do Amazon GameLift Servers](gamelift-sdk-client-api.md).

## Outros mecanismos
<a name="integration-engines-other"></a>

Para obter uma lista completa dos Amazon GameLift Servers SDKs disponíveis para servidores e clientes de jogos, consulte[Obter ferramentas de desenvolvimento do Amazon GameLift Servers](gamelift-supported.md).

# Integre o Amazon GameLift Servers em um projeto Unreal Engine
<a name="integration-engines-setup-unreal"></a>

Aprenda a integrar o Amazon GameLift Servers SDK para o Unreal Engine em seus projetos de jogos para acessar o conjunto completo de recursos do SDK do servidor. 

**Dica**  
Para uma implantação mais rápida, experimente o plug-in independente do Amazon GameLift Servers para o Unreal Engine. Ele fornece fluxos de trabalho de interface de usuário guiados para implantar rapidamente seu servidor de jogos com configuração mínima, para que você possa testar os componentes do jogo em ação. Consulte [Amazon GameLift Serversplugin para Unreal Engine](unreal-plugin.md).

Recursos adicionais: 
+ [SDK do servidor C\$1\$1 (Unreal) para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-unreal-actions.md)
+ [Obter ferramentas de desenvolvimento do Amazon GameLift Servers](gamelift-supported.md)

## Instalar o SDK do servidor para o Unreal Engine
<a name="integration-engines-setup-unreal-install"></a>

Obtenha o Amazon GameLift Servers SDK de código aberto para Unreal Engine em. [GitHub](https://github.com/amazon-gamelift/amazon-gamelift-plugin-unreal) Os arquivos readme do repositório contêm pré-requisitos e instruções de instalação.

## Configure metas de compilação e regras de módulo
<a name="integration-engines-setup-unreal-setup"></a>

Modifique seus arquivos de projeto de jogo para gerar corretamente componentes de compilação para uso com o Amazon GameLift Servers.

**Para adicionar destinos de criação de cliente e servidor:**

1. Abra os arquivos de código do seu projeto de jogo e localize o arquivo `.../Games/[your application name]Source/[your application name]Target.cs`. Exemplo: `.../Source/GameLiftUnrealAppTarget.cs`. (Se você usa o Visual Studio, abra o arquivo do `.sln` do projeto.)

1. Copie esse arquivo para criar dois novos arquivos de destino no diretório `Source/`. 
   + Destino do cliente – Renomeie o novo arquivo para `[your application name]Client.Target.cs`. Edite o conteúdo para atualizar os valores do nome da classe e do tipo de destino, conforme ilustrado no código de exemplo a seguir: 

     ```
     using UnrealBuildTool;
       using System.Collections.Generic;
     
       public class GameLiftUnrealAppClientTarget :  TargetRules
      {
          public GameLiftUnrealAppClientTarget ( TargetInfo Target ) :  base ( Target )
          {
              Type = TargetType.Client;
              DefaultBuildSettings = BuildSettingsVersion.V2;
              IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1;
              ExtraModuleNames.Add( "GameLiftUnrealApp");
          }
      }
     ```
   + Destino do servidor – Renomeie o novo arquivo para `[your application name]Server.Target.cs`. Edite o conteúdo para atualizar os valores do nome da classe e do tipo de destino, conforme ilustrado no código de exemplo a seguir: 

     ```
     using UnrealBuildTool;
       using System.Collections.Generic;
     
       public class GameLiftUnrealAppServerTarget :  TargetRules
      {
          public GameLiftUnrealAppServerTarget ( TargetInfo Target ) :  base ( Target )
          {
              Type = TargetType.Server;
              DefaultBuildSettings = BuildSettingsVersion.V2;
              IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1;
              ExtraModuleNames.Add( "GameLiftUnrealApp");
          }
      }
     ```

1. Gere novamente os arquivos do projeto. Se você estiver usando o Visual Studio, você pode clicar com o botão direito do mouse no arquivo `.uproject` do seu projeto de jogo e selecionar **Gerar arquivos de projeto do Visual Studio**.

**Para atualizar as regras do módulo do projeto do jogo:**

Atualize as regras do módulo do projeto de jogo para depender do plug-in.

1. Abra os arquivos de código do seu projeto de jogo e localize o arquivo `.../Games/[your application name]Source/[your application name].Build.cs`. Exemplo: `.../Source/GameLiftUnrealApp.Build.cs`. (Se você usa o Visual Studio, abra o arquivo do `.sln` do projeto.)

1. Localize a classe `ModuleRules` e atualize conforme ilustrado no código de exemplo a seguir: 

   ```
   using UnrealBuildTool;
   
     public class GameLiftUnrealApp :  ModuleRules
    {
        public GameLiftUnrealApp ( ReadOnlyTargetRules Target ) :  base ( Target )
        {
            PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
            PublicDependencyModuleNames.AddRange( new string[] {  "Core",  "CoreUObject",  "Engine",  "InputCore",  "HeadMountedDisplay",  "EnhancedInput" });
         // Add the following section
            if (Target.Type == TargetType.Server)
            {
                PublicDependencyModuleNames.Add("GameLiftServerSDK");
            }
            else
            {
                PublicDefinitions.Add("WITH_GAMELIFT=0");
            }
            bEnableExceptions =  true;
        }
    }
   ```

1. Depois de criar os novos arquivos de destino e modificar as regras do módulo, reconstrua seu projeto de jogo.

## Adicione a funcionalidade de hospedagem de jogos ao código do seu servidor
<a name="integration-engines-setup-unreal-code"></a>

Após a instalação e configuração do SDK do servidor, a próxima etapa é integrar a funcionalidade de hospedagem de jogos ao código do servidor. O SDK do servidor permite que seu servidor de jogos se comunique com o serviço do Amazon GameLift Servers, receba instruções para sessões de jogo, relate status e integridade e execute outras ações.

Este tópico fornece um exemplo de código que adiciona a funcionalidade mínima necessária para hospedar seu jogo com o Amazon GameLift Servers. 

**Etapa 1: atualizar o arquivo de `GameMode` compartilhado**

1. Abra os arquivos de código do seu projeto de jogo e localize o arquivo `Your-application-nameGameMode.h`. Exemplo: `GameLiftUnrealAppGameMode.h`. Se você usa o Visual Studio, abra o arquivo do `.sln` do projeto.

1. Altere o arquivo de cabeçalho para incluir o código de exemplo a seguir. Certifique-se de substituir "GameLiftUnrealApp" pelo nome do seu próprio aplicativo.

### Código de exemplo para GameMode h.
<a name="w2aab9c11c11b9c17c15b9b1"></a>

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "GameLiftUnrealAppGameMode.generated.h"

struct FProcessParameters;

DECLARE_LOG_CATEGORY_EXTERN(GameServerLog, Log, All);

UCLASS(minimalapi)
class AGameLiftUnrealAppGameMode : public AGameModeBase
{
    GENERATED_BODY()

public:
    AGameLiftUnrealAppGameMode();

protected:
    virtual void BeginPlay() override;

private:
    void InitGameLift();

private:
    TSharedPtr<FProcessParameters> ProcessParameters;
};
```

**Etapa 2: Adicione as chamadas necessárias do SDK do servidor ao código do servidor do jogo**

Use o código de amostra nesta seção para integrar o código do servidor do jogo para uso com o Amazon GameLift Servers. Para obter detalhes sobre o que o código faz, consulte [Inicializar o processo do servidor](gamelift-sdk-server-api.md#gamelift-sdk-server-initialize) e [SDK do servidor C\$1\$1 (Unreal) para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-unreal-actions.md).
**nota**  
O sinalizador de pré-processador de `WITH_GAMELIFT` tem duas finalidades:  
Restringe as chamadas de API de backend do Amazon GameLift Servers somente para compilações de servidores Unreal
Garante compatibilidade entre diferentes destinos de compilação do Unreal

1. Abra o arquivo `Your-application-nameGameMode.cpp` de origem relacionado. Em nosso exemplo: `GameLiftUnrealAppGameMode.cpp`. 

1. Altere o código para alinhá-lo com o código de exemplo a seguir. Certifique-se de substituir qualquer instância de "GameLiftUnrealApp" pelo nome do seu próprio aplicativo.

   O exemplo de código fornecido mostra como adicionar os elementos necessários para integração com o Amazon GameLift Servers. Isso inclui:
   + Inicialize um cliente da API do Amazon GameLift Servers.
   + Implemente funções de retorno de chamada para responder às solicitações do serviço do Amazon GameLift Servers, inclusive `OnStartGameSession`, `OnProcessTerminate` e `onHealthCheck`.
   + Chame `ProcessReady()` para notificar o serviço do Amazon GameLift Servers quando estiver pronto para hospedar sessões do jogo.

### Código de exemplo para GameMode .cpp
<a name="w2aab9c11c11b9c17c15c13b1"></a>

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

#include "GameLiftUnrealAppGameMode.h"

#include "UObject/ConstructorHelpers.h"
#include "Kismet/GameplayStatics.h"

#if WITH_GAMELIFT
#include "GameLiftServerSDK.h"
#include "GameLiftServerSDKModels.h"
#endif

#include "GenericPlatform/GenericPlatformOutputDevices.h"

DEFINE_LOG_CATEGORY(GameServerLog);

AGameLiftUnrealAppGameMode::AGameLiftUnrealAppGameMode() :
    ProcessParameters(nullptr)
{
    // Set default pawn class to our Blueprinted character
    static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter"));

    if (PlayerPawnBPClass.Class != NULL)
    {
        DefaultPawnClass = PlayerPawnBPClass.Class;
    }

    UE_LOG(GameServerLog, Log, TEXT("Initializing AGameLiftUnrealAppGameMode..."));
}

void AGameLiftUnrealAppGameMode::BeginPlay()
{
    Super::BeginPlay();

#if WITH_GAMELIFT
    InitGameLift();
#endif
}

void AGameLiftUnrealAppGameMode::InitGameLift()
{
#if WITH_GAMELIFT
    UE_LOG(GameServerLog, Log, TEXT("Calling InitGameLift..."));

    // Getting the module first.
    FGameLiftServerSDKModule* GameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));

    //Define the server parameters for a GameLift Anywhere fleet. These are not needed for a GameLift managed EC2 fleet.
    FServerParameters ServerParametersForAnywhere;

    bool bIsAnywhereActive = false;
    if (FParse::Param(FCommandLine::Get(), TEXT("glAnywhere")))
    {
        bIsAnywhereActive = true;
    }

    if (bIsAnywhereActive)
    {
        UE_LOG(GameServerLog, Log, TEXT("Configuring server parameters for Anywhere..."));

        // If GameLift Anywhere is enabled, parse command line arguments and pass them in the ServerParameters object.
        FString glAnywhereWebSocketUrl = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereWebSocketUrl="), glAnywhereWebSocketUrl))
        {
            ServerParametersForAnywhere.m_webSocketUrl = TCHAR_TO_UTF8(*glAnywhereWebSocketUrl);
        }

        FString glAnywhereFleetId = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereFleetId="), glAnywhereFleetId))
        {
            ServerParametersForAnywhere.m_fleetId = TCHAR_TO_UTF8(*glAnywhereFleetId);
        }

        FString glAnywhereProcessId = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereProcessId="), glAnywhereProcessId))
        {
            ServerParametersForAnywhere.m_processId = TCHAR_TO_UTF8(*glAnywhereProcessId);
        }
        else
        {
            // If no ProcessId is passed as a command line argument, generate a randomized unique string.
            FString TimeString = FString::FromInt(std::time(nullptr));
            FString ProcessId = "ProcessId_" + TimeString;
            ServerParametersForAnywhere.m_processId = TCHAR_TO_UTF8(*ProcessId);
        }

        FString glAnywhereHostId = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereHostId="), glAnywhereHostId))
        {
            ServerParametersForAnywhere.m_hostId = TCHAR_TO_UTF8(*glAnywhereHostId);
        }

        FString glAnywhereAuthToken = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereAuthToken="), glAnywhereAuthToken))
        {
            ServerParametersForAnywhere.m_authToken = TCHAR_TO_UTF8(*glAnywhereAuthToken);
        }

        FString glAnywhereAwsRegion = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereAwsRegion="), glAnywhereAwsRegion))
        {
            ServerParametersForAnywhere.m_awsRegion = TCHAR_TO_UTF8(*glAnywhereAwsRegion);
        }

        FString glAnywhereAccessKey = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereAccessKey="), glAnywhereAccessKey))
        {
            ServerParametersForAnywhere.m_accessKey = TCHAR_TO_UTF8(*glAnywhereAccessKey);
        }

        FString glAnywhereSecretKey = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereSecretKey="), glAnywhereSecretKey))
        {
            ServerParametersForAnywhere.m_secretKey = TCHAR_TO_UTF8(*glAnywhereSecretKey);
        }

        FString glAnywhereSessionToken = "";
        if (FParse::Value(FCommandLine::Get(), TEXT("glAnywhereSessionToken="), glAnywhereSessionToken))
        {
            ServerParametersForAnywhere.m_sessionToken = TCHAR_TO_UTF8(*glAnywhereSessionToken);
        }

        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_YELLOW);
        UE_LOG(GameServerLog, Log, TEXT(">>>> WebSocket URL: %s"), *ServerParametersForAnywhere.m_webSocketUrl);
        UE_LOG(GameServerLog, Log, TEXT(">>>> Fleet ID: %s"), *ServerParametersForAnywhere.m_fleetId);
        UE_LOG(GameServerLog, Log, TEXT(">>>> Process ID: %s"), *ServerParametersForAnywhere.m_processId);
        UE_LOG(GameServerLog, Log, TEXT(">>>> Host ID (Compute Name): %s"), *ServerParametersForAnywhere.m_hostId);
        UE_LOG(GameServerLog, Log, TEXT(">>>> Auth Token: %s"), *ServerParametersForAnywhere.m_authToken);
        UE_LOG(GameServerLog, Log, TEXT(">>>> Aws Region: %s"), *ServerParametersForAnywhere.m_awsRegion);
        UE_LOG(GameServerLog, Log, TEXT(">>>> Access Key: %s"), *ServerParametersForAnywhere.m_accessKey);
        UE_LOG(GameServerLog, Log, TEXT(">>>> Secret Key: %s"), *ServerParametersForAnywhere.m_secretKey);
        UE_LOG(GameServerLog, Log, TEXT(">>>> Session Token: %s"), *ServerParametersForAnywhere.m_sessionToken);
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_NONE);
    }

    UE_LOG(GameServerLog, Log, TEXT("Initializing the GameLift Server..."));

    //InitSDK will establish a local connection with GameLift's agent to enable further communication.
    FGameLiftGenericOutcome InitSdkOutcome = GameLiftSdkModule->InitSDK(ServerParametersForAnywhere);
    if (InitSdkOutcome.IsSuccess())
    {
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_GREEN);
        UE_LOG(GameServerLog, Log, TEXT("GameLift InitSDK succeeded!"));
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_NONE);
    }
    else
    {
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_RED);
        UE_LOG(GameServerLog, Log, TEXT("ERROR: InitSDK failed : ("));
        FGameLiftError GameLiftError = InitSdkOutcome.GetError();
        UE_LOG(GameServerLog, Log, TEXT("ERROR: %s"), *GameLiftError.m_errorMessage);
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_NONE);
        return;
    }

    ProcessParameters = MakeShared<FProcessParameters>();

    //When a game session is created, Amazon GameLift Servers sends an activation request to the game server and passes along the game session object containing game properties and other settings.
    //Here is where a game server should take action based on the game session object.
    //Once the game server is ready to receive incoming player connections, it should invoke GameLiftServerAPI.ActivateGameSession()
    ProcessParameters->OnStartGameSession.BindLambda([=](Aws::GameLift::Server::Model::GameSession InGameSession)
        {
            FString GameSessionId = FString(InGameSession.GetGameSessionId());
            UE_LOG(GameServerLog, Log, TEXT("GameSession Initializing: %s"), *GameSessionId);
            GameLiftSdkModule->ActivateGameSession();
        });

    //OnProcessTerminate callback. Amazon GameLift Servers will invoke this callback before shutting down an instance hosting this game server.
    //It gives this game server a chance to save its state, communicate with services, etc., before being shut down.
    //In this case, we simply tell Amazon GameLift Servers we are indeed going to shut down.
    ProcessParameters->OnTerminate.BindLambda([=]()
        {
            UE_LOG(GameServerLog, Log, TEXT("Game Server Process is terminating"));
            // First call ProcessEnding()
            FGameLiftGenericOutcome processEndingOutcome = GameLiftSdkModule->ProcessEnding();
            // Then call Destroy() to free the SDK from memory
            FGameLiftGenericOutcome destroyOutcome = GameLiftSdkModule->Destroy();
            // Exit the process with success or failure
            if (processEndingOutcome.IsSuccess() && destroyOutcome.IsSuccess()) {
                UE_LOG(GameServerLog, Log, TEXT("Server process ending successfully"));
            }
            else {
                if (!processEndingOutcome.IsSuccess()) {
                    const FGameLiftError& error = processEndingOutcome.GetError();
                    UE_LOG(GameServerLog, Error, TEXT("ProcessEnding() failed. Error: %s"),
                    error.m_errorMessage.IsEmpty() ? TEXT("Unknown error") : *error.m_errorMessage);
                }
                if (!destroyOutcome.IsSuccess()) {
                    const FGameLiftError& error = destroyOutcome.GetError();
                    UE_LOG(GameServerLog, Error, TEXT("Destroy() failed. Error: %s"),
                    error.m_errorMessage.IsEmpty() ? TEXT("Unknown error") : *error.m_errorMessage);
                }
            }
        });
         
    //This is the HealthCheck callback.
    //Amazon GameLift Servers will invoke this callback every 60 seconds or so.
    //Here, a game server might want to check the health of dependencies and such.
    //Simply return true if healthy, false otherwise.
    //The game server has 60 seconds to respond with its health status. Amazon GameLift Servers will default to 'false' if the game server doesn't respond in time.
    //In this case, we're always healthy!
    ProcessParameters->OnHealthCheck.BindLambda([]()
        {
            UE_LOG(GameServerLog, Log, TEXT("Performing Health Check"));
            return true;
        });

    //GameServer.exe -port=7777 LOG=server.mylog
    ProcessParameters->port = FURL::UrlConfig.DefaultPort;
    TArray<FString> CommandLineTokens;
    TArray<FString> CommandLineSwitches;

    FCommandLine::Parse(FCommandLine::Get(), CommandLineTokens, CommandLineSwitches);

    for (FString SwitchStr : CommandLineSwitches)
    {
        FString Key;
        FString Value;

        if (SwitchStr.Split("=", &Key, &Value))
        {
            if (Key.Equals("port"))
            {
                ProcessParameters->port = FCString::Atoi(*Value);
            }
        }
    }

    //Here, the game server tells Amazon GameLift Servers where to find game session log files.
    //At the end of a game session, Amazon GameLift Servers uploads everything in the specified 
    //location and stores it in the cloud for access later.
    TArray<FString> Logfiles;
    Logfiles.Add(TEXT("GameLiftUnrealApp/Saved/Logs/server.log"));
    ProcessParameters->logParameters = Logfiles;

    //The game server calls ProcessReady() to tell Amazon GameLift Servers it's ready to host game sessions.
    UE_LOG(GameServerLog, Log, TEXT("Calling Process Ready..."));
    FGameLiftGenericOutcome ProcessReadyOutcome = GameLiftSdkModule->ProcessReady(*ProcessParameters);

    if (ProcessReadyOutcome.IsSuccess())
    {
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_GREEN);
        UE_LOG(GameServerLog, Log, TEXT("Process Ready!"));
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_NONE);
    }
    else
    {
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_RED);
        UE_LOG(GameServerLog, Log, TEXT("ERROR: Process Ready Failed!"));
        FGameLiftError ProcessReadyError = ProcessReadyOutcome.GetError();
        UE_LOG(GameServerLog, Log, TEXT("ERROR: %s"), *ProcessReadyError.m_errorMessage);
        UE_LOG(GameServerLog, SetColor, TEXT("%s"), COLOR_NONE);
    }

    UE_LOG(GameServerLog, Log, TEXT("InitGameLift completed!"));
#endif
}
```

**Etapa 3: Reconstruir o projeto do jogo**
+ Crie um projeto de jogo para os dois tipos de alvo a seguir: *Editor de Desenvolvimento* e *Servidor de Desenvolvimento*.
**nota**  
Não é necessário reconstruir a solução. Em vez disso, crie o projeto na pasta `/Games/` da sua aplicação. Caso contrário, o Visual Studio reconstruirá todo o UE5 projeto, o que pode levar até uma hora.

## Inclua o servidor de jogos para hospedagem.
<a name="integration-engines-setup-unreal-package"></a>

Com o código do servidor do jogo agora integrado à funcionalidade mínima necessária do SDK do servidor, você está pronto para empacotar a versão do seu servidor de jogos usando o Unreal Editor. 

**Para empacotar a versão do servidor de jogos.**

1. Abra o projeto do jogo no Unreal Editor.

1. Siga as etapas do Unreal Editor para empacotar seu servidor de jogos: 
   + Escolha sua plataforma de destino (Windows ou Linux).
   + Selecione o destino de compilação do seu servidor (`[your application name]Server`.

   O processo de empacotamento gera o executável do seu servidor de jogos: `[your application name]Server.exe`. 

1. Prepare a versão do seu servidor de jogos para implantação em recursos de hospedagem. A compilação deve incluir os seguintes arquivos. 
   + Seu executável do servidor de jogos
   + Se você estiver usando a versão 5.5 ou anterior do Unreal Engine, inclua os seguintes arquivos para compilações do Windows. É possível encontrá-los na versão original do Unreal Engine:
     + `VC_redist.x64.exe` (`UnrealEngine\Engine\Source\Programs\PrereqInstaller\Resources\VCRedist\`)
     + `UEPrereqSetup_x64.exe or UE5PrereqSetup_x64.exe` (`UnrealEngine\Engine\Extras\Redist\en-us\`)
   + Todas as outras dependências necessárias para servidor de jogos.
   + Bibliotecas OpenSSL, se necessário. Você pode pular essa etapa se seu servidor de jogos estiver integrado ao SDK do servidor do Amazon GameLift Servers versão 5.3 ou posterior. [A versão mais recente do SDK do servidor está disponível aqui.](https://github.com/amazon-gamelift/amazon-gamelift-plugin-unreal)

### Bibliotecas OpenSSL necessárias para servidores de jogos criados com o SDK de servidor para Unreal, versões 5.2 e anteriores
<a name="w2aab9c11c11b9c17c25b7b1"></a>

Você deve incluir a mesma versão das bibliotecas do OpenSSL que foram usadas ao empacotar o servidor do jogo no Unreal. Essas bibliotecas estão localizadas na fonte do seu mecanismo de jogo. O local varia de acordo com o ambiente de desenvolvimento:

No Windows: 
+ `[ENGINE_ROOT_DIR]\Engine\Extras\ThirdPartyNotUE\libimobiledevice\x64\libssl-1_1-x64.dll`
+ `[ENGINE_ROOT_DIR]\Engine\Extras\ThirdPartyNotUE\libimobiledevice\x64\libcrypto-1_1-x64.dll` 

No Linux:
+ `Engine/Source/Thirdparty/OpenSSL/1.1.1n/include/libssl.so.1.1`
+ `Engine/Source/Thirdparty/OpenSSL/1.1.1n/include/libcrypto.so.1.1`

Copie as bibliotecas do OpenSSL para o pacote de compilação do jogo no mesmo diretório do arquivo executável do servidor do jogo. 

## Próximas etapas
<a name="integration-engines-setup-unreal-next"></a>

Agora que você preparou uma versão de servidor de jogos com a funcionalidade mínima necessária para hospedagem com o Amazon GameLift Servers, considere estas possíveis próximas etapas: 
+ Implante seu servidor de jogos integrado para testes e desenvolvimento. Com uma frota Anywhere, é possível configurar sua máquina local como recurso de hospedagem e usá-la para testar as conexões do servidor de jogos e do cliente de jogos. Para hospedagem baseada em Nuvem, implante seu servidor de jogos em um EC2 gerenciado ou em uma frota de contêineres gerenciada. Consulte estes tópicos para obter orientação:
  + [Configuração para desenvolvimento iterativo com o Amazon GameLift Servers Anywhere](integration-dev-iteration.md)
  + [Amazon GameLift Servers Frotas Anywhere](fleets-intro-anywhere.md)
  + [Amazon GameLift Servers EC2 frotas gerenciadas](fleets-intro-managed.md)
  + [Frotas de contêineres gerenciadas pelo Amazon GameLift Servers](fleets-intro-containers.md)
+ Personalize a integração do servidor de jogos adicionando recursos opcionais. Por exemplo, talvez você queira adicionar sessões de jogadores com um único jogador IDs, configurar o preenchimento de matchmaking ou gerenciar o acesso do servidor de jogos aos seus outros AWS recursos (como um banco de dados ou serviço de armazenamento de conteúdo). Consulte estes tópicos para obter orientação: 
  + [Integre o Amazon GameLift Servers ao seu servidor de jogos com o SDK do servidor.](gamelift-sdk-server-api.md)
  + [SDK do servidor C\$1\$1 (Unreal) para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-unreal-actions.md)
+ Personalize seu componente cliente de jogo para solicitar sessões de jogo, receber informações de conexão e conectar-se diretamente a um servidor de jogos para jogar. Consulte estes tópicos para obter orientação:
  + [Integre a funcionalidade do cliente de jogos do Amazon GameLift Servers](gamelift-sdk-client-api.md)

# Integre Amazon GameLift Servers em um projeto do Unity
<a name="integration-engines-unity-using"></a>

Aprenda a integrar o Amazon GameLift Servers SDK para o Unity em seus projetos de jogos para acessar o conjunto completo de recursos do SDK do servidor. 

**Dica**  
Para uma implantação mais rápida, experimente o plug-in independente do Amazon GameLift Servers para o Unity. Ele fornece fluxos de trabalho de interface de usuário guiados para implantar rapidamente seu servidor de jogos com configuração mínima, para que você possa testar os componentes do jogo em ação. Consulte [Amazon GameLift Serversplugin para Unity (servidor SDK 5.x)](unity-plug-in.md).

Recursos adicionais: 
+ [SDK do servidor C\$1 para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-csharp-actions.md)
+ [Obter ferramentas de desenvolvimento do Amazon GameLift Servers](gamelift-supported.md)

## Instalar o SDK do servidor para o Unity
<a name="integration-engines-unity-install"></a>

Obtenha o código aberto Amazon GameLift Servers para Unity em. [GitHub](https://github.com/amazon-gamelift/amazon-gamelift-plugin-unity) Os arquivos readme do repositório contêm pré-requisitos e instruções de instalação.

## Configure uma frota do Amazon GameLift Servers Anywhere para testes
<a name="integration-engines-unity-fleet"></a>

Você poderá configurar sua estação de trabalho de desenvolvimento como uma frota de hospedagem do Amazon GameLift Servers Anywhere para testar iterativamente sua integração com o Amazon GameLift Servers. Com essa configuração, você pode iniciar os processos do servidor de jogos em sua estação de trabalho, enviar solicitações de junção de jogadores ou de criação de partidas ao Amazon GameLift Servers para iniciar sessões de jogo e conectar clientes às novas sessões de jogo. Com sua própria estação de trabalho configurada como servidor de hospedagem, você pode monitorar todos os aspectos da integração do seu jogo com o Amazon GameLift Servers.

Para obter instruções sobre como configurar sua estação de trabalho, consulte [Configurar testes locais com o Amazon GameLift Servers Anywhere](integration-testing.md) para concluir as seguintes etapas:

1. Crie um local personalizado para sua estação de trabalho. 

1. Crie uma frota do Amazon GameLift Servers Anywhere com sua nova localização personalizada. Se for bem-sucedida, essa solicitação retornará um ID da frota. Anote esse valor, pois você precisará disso mais tarde.

1. Registre sua estação de trabalho como uma computação na nova frota Anywhere. Forneça um nome de computação exclusivo e especifique o endereço IP da sua estação de trabalho. Se for bem-sucedida, essa solicitação retornará um endpoint do SDK de serviço, na forma de uma WebSocket URL. Anote esse valor, pois você precisará disso mais tarde.

1. Gere um token de autenticação para a computação da sua estação de trabalho. Essa autenticação de curta duração inclui o token e uma data de expiração. Seu servidor de jogo o usa para autenticar a comunicação com o serviço do Amazon GameLift Servers. Armazene a autenticação no computador da sua estação de trabalho para que os processos do servidor de jogos em execução possam acessá-la. 

## Adicione o código do servidor do Amazon GameLift Servers ao seu projeto Unity
<a name="integration-engines-unity-code"></a>

Seu servidor de jogo se comunica com o serviço do Amazon GameLift Servers para receber instruções e relatar o status contínuo. Para fazer isso, você adiciona um código de servidor de jogos que usa o SDK do servidor do Amazon GameLift Servers. 

O exemplo de código fornecido ilustra os elementos básicos de integração necessários. Ele usa um `MonoBehavior` para ilustrar uma inicialização simples do servidor de jogos com o Amazon GameLift Servers. O exemplo pressupõe que o servidor do jogo seja executado em uma frota do Amazon GameLift Servers Anywhere para testes. Inclui código para: 
+ Inicialize um cliente da API do Amazon GameLift Servers. A amostra usa a versão de `InitSDK()` com parâmetros do servidor para sua frota Anywhere e computação. Use o WebSocket URL, o ID da frota, o nome do computador (ID do host) e o token de autenticação, conforme definido no tópico [Configure uma frota do Amazon GameLift Servers Anywhere para testes](#integration-engines-unity-fleet) anterior.
+ Implemente funções de retorno de chamada para responder às solicitações do serviço do Amazon GameLift Servers, inclusive `OnStartGameSession`, `OnProcessTerminate` e `onHealthCheck`.
+ Ligue para ProcessReady () com uma porta designada para notificar o Amazon GameLift Servers serviço quando o processo estiver pronto para hospedar sessões de jogo.

O código de amostra fornecido estabelece a comunicação com o serviço do Amazon GameLift Servers. Ele também implementa um conjunto de funções de retorno de chamada que respondem às solicitações do Amazon GameLift Servers. Para obter mais informações sobre cada função e o que o código faz, consulte [Inicializar o processo do servidor](https://docs.aws.amazon.com//gameliftservers/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-initialize). Para obter mais informações sobre as ações do SDK e os tipos de dados usados nesse código, leia [SDK do servidor C\$1 para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-csharp-actions.md).

O código de exemplo mostra como adicionar a funcionalidade necessária, conforme descrito em [Adicionar Amazon GameLift Servers ao seu servidor de jogos](https://docs.aws.amazon.com//gameliftservers/latest/developerguide/gamelift-sdk-server-api.html). Para ter mais informações sobre as ações de SDK, consulte [SDK do servidor C\$1 para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-csharp-actions.md).

### Código de exemplo de integração
<a name="w2aab9c11c11b9c19c15c13b1"></a>

```
using System.Collections.Generic;
using Aws.GameLift.Server;
using UnityEngine;

public class ServerSDKManualTest : MonoBehaviour
{    
    //This example is a simple integration that initializes a game server process 
    //that is running on an Amazon GameLift Servers Anywhere fleet.
    void Start()
    {        
        //Identify port number (hard coded here for simplicity) the game server is listening on for player connections
        var listeningPort = 7777;

        //WebSocketUrl from RegisterHost call
        var webSocketUrl = "wss://us-west-2.api.amazongamelift.com";

        //Unique identifier for this process
        var processId = "myProcess";

        //Unique identifier for your host that this process belongs to
        var hostId = "myHost";

        //Unique identifier for your fleet that this host belongs to
        var fleetId = "myFleet";

        //Authorization token for this host process
        var authToken = "myAuthToken";

        //Server parameters are required for an Amazon GameLift Servers Anywhere fleet.
        //They are not required for an Amazon GameLift Servers managed EC2 fleet.
        ServerParameters serverParameters = new ServerParameters(
            webSocketUrl,
            processId,
            hostId,
            fleetId,
            authToken);

        //InitSDK establishes a local connection with an Amazon GameLift Servers agent 
        //to enable further communication.
        var initSDKOutcome = GameLiftServerAPI.InitSDK(serverParameters);        
        if (initSDKOutcome.Success)
        {
            //Implement callback functions
            ProcessParameters processParameters = new ProcessParameters(
            //Implement OnStartGameSession callback
                (gameSession) => {
                    //Amazon GameLift Servers sends a game session activation request to the game server 
                    //with game session object containing game properties and other settings.
                    //Here is where a game server takes action based on the game session object.
                    //When the game server is ready to receive incoming player connections, 
                    //it invokes the server SDK call ActivateGameSession().
                    GameLiftServerAPI.ActivateGameSession();
                },
                (updateGameSession) => {
                    //Amazon GameLift Servers sends a request when a game session is updated (such as for 
                    //FlexMatch backfill) with an updated game session object. 
                    //The game server can examine matchmakerData and handle new incoming players.
                    //updateReason explains the purpose of the update.
                },
                () => {
                    //Implement callback function OnProcessTerminate
                    //Amazon GameLift Servers invokes this callback before shutting down the instance hosting this game server.
                    //It gives the game server a chance to save its state, communicate with services, etc., 
                    //and initiate shut down. When the game server is ready to shut down, it invokes the 
                    //server SDK call ProcessEnding() to tell Amazon GameLift Servers it is shutting down.
                    GameLiftServerAPI.ProcessEnding();
                }, 
                () => {
                    //Implement callback function OnHealthCheck
                    //Amazon GameLift Servers invokes this callback approximately every 60 seconds.
                    //A game server might want to check the health of dependencies, etc.
                    //Then it returns health status true if healthy, false otherwise.
                    //The game server must respond within 60 seconds, or Amazon GameLift Servers records 'false'.
                    //In this example, the game server always reports healthy.
                    return true;
                },
                //The game server gets ready to report that it is ready to host game sessions
                //and that it will listen on port 7777 for incoming player connections.
                listeningPort, 
                new LogParameters(new List<string>()
                {
                    //Here, the game server tells Amazon GameLift Servers where to find game session log files.
                    //At the end of a game session, Amazon GameLift Servers uploads everything in the specified 
                    //location and stores it in the cloud for access later.
                    "/local/game/logs/myserver.log"
                }));

            //The game server calls ProcessReady() to tell Amazon GameLift Servers it's ready to host game sessions.
            var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters);
            if (processReadyOutcome.Success)
            {
                print("ProcessReady success.");
            }
            else
            {
                print("ProcessReady failure : " + processReadyOutcome.Error.ToString());
            }
        }
        else
        {
            print("InitSDK failure : " + initSDKOutcome.Error.ToString());
        }
    }  

    void OnApplicationQuit()
    {
        //Make sure to call GameLiftServerAPI.ProcessEnding() and GameLiftServerAPI.Destroy() before terminating the server process.
        //These actions notify Amazon GameLift Servers that the process is terminating and frees the API client from memory. 
        GenericOutcome processEndingOutcome = GameLiftServerAPI.ProcessEnding();
        GameLiftServerAPI.Destroy();
        if (processEndingOutcome.Success)
        {
            Environment.Exit(0);
        }
        else
        {
            Console.WriteLine("ProcessEnding() failed. Error: " + processEndingOutcome.Error.ToString());
            Environment.Exit(-1);  
        }
    }
}
```

## Próximas etapas
<a name="integration-engines-unity-additional-resources"></a>

Agora que você preparou uma versão de servidor de jogos com a funcionalidade mínima necessária para hospedagem com o Amazon GameLift Servers, considere estas possíveis próximas etapas: 
+ Implante seu servidor de jogos integrado para testes e desenvolvimento. Com uma frota Anywhere, é possível configurar sua máquina local como recurso de hospedagem e usá-la para testar as conexões do servidor de jogos e do cliente de jogos. Para hospedagem baseada em Nuvem, implante seu servidor de jogos em um EC2 gerenciado ou em uma frota de contêineres gerenciada. Consulte estes tópicos para obter orientação:
  + [Configuração para desenvolvimento iterativo com o Amazon GameLift Servers Anywhere](integration-dev-iteration.md)
  + [Amazon GameLift Servers Frotas Anywhere](fleets-intro-anywhere.md)
  + [Amazon GameLift Servers EC2 frotas gerenciadas](fleets-intro-managed.md)
  + [Frotas de contêineres gerenciadas pelo Amazon GameLift Servers](fleets-intro-containers.md)
+ Personalize a integração do servidor de jogos adicionando recursos opcionais. Por exemplo, talvez você queira adicionar sessões de jogadores com um único jogador IDs, configurar o preenchimento de matchmaking ou gerenciar o acesso do servidor de jogos aos seus outros AWS recursos (como um banco de dados ou serviço de armazenamento de conteúdo). Consulte estes tópicos para obter orientação: 
  + [Integre o Amazon GameLift Servers ao seu servidor de jogos com o SDK do servidor.](gamelift-sdk-server-api.md)
  + [SDK do servidor C\$1\$1 (Unreal) para Amazon GameLift Servers 5.x – Ações](integration-server-sdk5-unreal-actions.md)
+ Personalize seu componente cliente de jogo para solicitar sessões de jogo, receber informações de conexão e conectar-se diretamente a um servidor de jogos para jogar. Consulte estes tópicos para obter orientação:
  + [Integre a funcionalidade do cliente de jogos do Amazon GameLift Servers](gamelift-sdk-client-api.md)