> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Depurar servidores de jogo baseados em processo usando o LocalMultiplayerAgent

> Depure localmente um servidor de jogo multijogador do PlayFab encapsulando seu servidor existente e executando-o no LocalMultiplayerAgent no modo de processo (sem contêiner).

# Como executar um servidor de jogo usando o LocalMultiplayerAgent no modo de processo

Este tutorial descreve como:

* Criar um build usando o exemplo Wrapper
* Configurar o MultiplayerSettings.json
* Executar o LocalMultiplayerAgent
* Testar a conexão do seu jogo

## Criar um build do jogo

Para testar seus servidores de jogo usando o LocalMultiplayerAgent (LMA), você precisa criar um build do jogo e salvá-lo em formato de arquivo compactado.
Para facilitar, fornecemos o exemplo Wrapper com instruções e um script do PowerShell.

Em seguida, siga a etapa "[Encapsulando um servidor de jogo existente usando o aplicativo wrapper](https://github.com/PlayFab/MpsSamples/tree/main/wrappingGsdk#wrapping-an-existing-game-server-using-the-wrapper-app)" para preparar seu servidor de jogo para este tutorial.

## Configurar o MultiplayerSettings.json

Navegue até a pasta em que você extraiu o conjunto de ferramentas do LMA e abra o arquivo MultiplayerSettings.json. Esse arquivo é um arquivo simulado de configuração de build que simula o build no MPS.

Você pode preencher o json usando o [Gerador de MultiplayerSettings.json do LMA](https://github.com/PlayFab/MpsAgent/tree/main/LocalMultiplayerAgent/SettingsJsonGenerator).
O Gerador é uma página da Web simples que cria o json com base nas suas opções. Você pode encontrar o Gerador na pasta extraída do LMA.

Veja a seguir um exemplo de MultiplayerSettings.json para o exemplo Wrapper executar o LMA no modo de processo.

```json theme={null}
{
  "RunContainer": false, // Set RunContainer to false if you are running LMA in Process mode.
  "OutputFolder": "C:\\output\\WindowProcess", // Path where config files and logs will be generated from LMA at each run
  "NumHeartBeatsForActivateResponse": 10, // default value
  "NumHeartBeatsForTerminateResponse": 60, // default value
  //the server will run in stand-by mode for 10 heartbeats and stay in active state for 35 heartbeats.
  "TitleId": "59F84", // default value
  "BuildId": "8624d52e-87a1-4a12-b7f6-b92720ef8919", // default value
  "Region": "EastUs", // default value
  "AgentListeningPort": 56001, // default value
  "AssetDetails": [
    {
      "MountPath": "",  // Mount Path is only required for Container mode. leave it as blank.
      "SasTokens": null,
      "LocalFilePath": "D:\\gameassets.zip" // where your game server is located as an archive format.
    }
  ],
  "ProcessStartParameters": {
    "StartGameCommand": "wrapper.exe -g fakegame.exe arg1 arg2" 
    // shell command to run Wrapper. Command will be executed where game asset is extracted.
    // Make sure the StartGameCommand provided above is an example of the Wrapper sample. 
  },
  "PortMappingsList": [
    [
      {
        "NodePort": 56100, // default value
        "GamePort": {
          "Name": "game_port",
           // Port name is already defined in the Wrapper sample. Wrapper will grab the port information using game_port via GSDK while it's running.
          "Protocol": "TCP"
        }
      }
    ]
  ],
}

```

Certifique-se de atualizar corretamente os seguintes campos no MultiplayerSettings.json para executar o LMA no modo de processo.

* `LocalFilePath`: caminho local completo (na sua estação de trabalho) para o arquivo zip de ativos do servidor de jogo criado anteriormente, por exemplo: D:\MyAmazingGame\asset.zip (observe que as barras invertidas precisam ser escapadas para a formatação JSON).

* `StartGameCommand`: o caminho de StartGameCommand para um processo é um caminho relativo. O diretório de trabalho será o local em que o ativo do jogo for extraído.

* `PortMappingsList`: são as portas disponíveis para o seu jogo durante a execução.
  * `NodePort` é a porta aberta na sua estação de trabalho

  * `GamePort.Number` não é necessário no modo de processo. O número da porta será associado à NodePort por meio do GSDK quando o servidor de jogo estiver em execução. No cenário real, o MPS associará a porta dinamicamente para cada sessão de jogo baseada em processo.

  * Defina `GamePort.Name` com o mesmo valor definido no seu servidor de jogo. Você pode verificar o valor na configuração do GSDK em runtime, com a chave GamePort.Name. Se você estiver usando o exemplo Wrapper, o nome da porta já está definido como "game\_port", portanto, defina o mesmo valor aqui.

  * `GamePort.Protocol`: especifique o tipo de protocolo: TCP ou UDP

* `OutputFolder`: caminho para uma unidade ou pasta em que as saídas e os arquivos de configuração são gerados. Verifique se há espaço suficiente disponível, pois o servidor de jogo será extraído nesse caminho. Se não for especificado, a pasta do agente será usada.

* `AgentListeningPort`: é a porta para o LMA se comunicar com o servidor de jogo. Qualquer porta aberta funcionará; 56001 é o valor padrão. Se houver outro processo associado à porta 56001, você deverá alterar esse valor ou encerrar o outro processo na porta 56001.

* `ResourceLimits`: não é necessário no modo de processo.

* `MountPath`: não é necessário no modo de processo.

* `SessionCookie` (opcional): qualquer cookie de sessão que é passado ao seu servidor de jogo como parte da chamada à API RequestMultiplayerServer. No cenário real no MPS, depois que a conexão é estabelecida, o servidor notifica o cliente para carregar os recursos correspondentes a partir do SessionCookie.

## Executar o LocalMultiplayerAgent

Agora você está pronto para executar o LocalMultiplayerAgent.

* Em uma janela do PowerShell:\
  Navegue até o diretório do LMA que contém o LocalMultiplayerAgent.exe.

* Execute `LocalMultiplayerAgent.exe`.
  Neste ponto, o LMA configura o ouvinte http, descompacta o ativo do jogo e inicia o servidor de jogo em um processo separado.

  > Se você estiver executando o servidor de jogo como um processo, o Firewall do Windows poderá aparecer e perguntar se você deseja permitir o tráfego para a NodePort especificada. Para evitar isso, você pode executar o LocalMultiplayerAgent no modo de administrador ou habilitar a porta no firewall.

O LMA aguardará as pulsações do GSDK integrado ao seu servidor de jogo.
Se o GSDK estiver integrado corretamente, o LMA imprimirá as saídas na seguinte ordem:

1. `CurrentGameState - Initializing`\
   (Isso pode não aparecer se o seu servidor de jogo chamar GSDK::ReadyForPlayers diretamente e não chamar GSDK::Start)
2. `CurrentGameState - StandingBy`
3. `CurrentGameState - Active`
4. `CurrentGameState - Terminating`

Para saber mais sobre os estados de um servidor de jogo, consulte [O que é o ciclo de vida do servidor de jogo do PlayFab Multiplayer Server](/pt-BR/services/playfab/multiplayer/servers/multiplayer-game-server-lifecycle).

Se os retornos de chamada de desligamento estiverem configurados corretamente, o servidor de jogo será encerrado logo depois que o estado for definido como Terminating.
É importante verificar se o servidor de jogo é encerrado, para evitar desligamentos abruptos na plataforma PlayFab.

O LMA também deve ser encerrado junto com o jogo.

## Testar a conexão com o seu jogo

Depois que o LMA imprimir **CurrentGameState - Active**, você poderá se conectar ao seu servidor de jogo usando o endereço IP 127.0.0.1 e a porta NodePort na qual o servidor de jogo está escutando.

Se você estiver usando o exemplo Wrapper, poderá testar uma solicitação GET inserindo o endereço [http://127.0.0.1:56100/Hello](http://127.0.0.1:56100/Hello) no navegador.
Para obter mais detalhes, confira o exemplo Wrapper.

Você também pode atualizar os valores de **NumHeartBeatsForActivateResponse** e **NumHeartBeatsForTerminateResponse** no MultiplayerSettings.json para ajustar a duração dos estados standing-by/active.


## Related topics

- [Depurar servidores de jogo em contêiner com o LocalMultiplayerAgent](/pt-BR/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-container-gameserver.md)
- [Visão geral do LocalMultiplayerAgent](/pt-BR/services/playfab/multiplayer/servers/LocalMultiplayerAgent/local-multiplayer-agent-overview.md)
- [Depurando servidores de jogo localmente e integração com o PlayFab](/pt-BR/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab.md)
- [Conectar-se diretamente para depurar servidores de jogo](/pt-BR/services/playfab/multiplayer/servers/directly-debugging-game-servers.md)
- [Determinando as DLLs necessárias para servidores de jogo Windows](/pt-BR/services/playfab/multiplayer/servers/determining-required-dlls.md)
