> ## 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.

# Pruebas y depuración del proyecto de GSDK

> Pruebe y depure localmente su servidor de juego multijugador ThirdPersonMP con el GSDK de Unreal mediante LocalMultiplayerAgent y asocie un depurador antes de cargarlo en PlayFab.

# Implementación local y depuración del proyecto de ejemplo ThirdPersonMP

El propósito de esta guía es demostrar cómo ejecutar su servidor de juego en su máquina local, de forma compatible con MPS, para que pueda probar y depurar el servidor antes de cargarlo en PlayFab.

## Objetivos

* Probar las opciones de implementación local para el proyecto ThirdPersonMP+GSDK.
* Comprobar que el servidor se ejecuta correctamente cuando se ejecuta con LocalMultiplayerAgent
* Comprobar que puede asociar un depurador a la instancia del servidor

## Requisitos

* Descargue Visual Studio. La [versión Community](https://visualstudio.microsoft.com/vs/community/) es gratuita.
  * Cargas de trabajo necesarias: desarrollo de escritorio de .NET y desarrollo para el escritorio con C++
* Descargue el código fuente de Unreal Engine. Para obtener instrucciones, consulte [Descarga del código fuente de Unreal Engine (externo)](https://docs.unrealengine.com/ProgrammingAndScripting/ProgrammingWithCPP/DownloadingSourceCode/).
* [Proyecto de Unreal completado](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-setup) con el [GSDK de Unreal de PlayFab](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-gsdk-project-setup) instalado y configurado
* Configuración ["Development Server"](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/building-the-third-person-mp-example-project) de su proyecto compilada desde Visual Studio
* \[Opcional] Descargue el [LocalMultiplayerAgent](https://github.com/PlayFab/MpsAgent/releases)
  * \[Opcional] Como alternativa, descargue el [código fuente de LocalMultiplayerAgent](https://github.com/PlayFab/MpsAgent/tree/main/LocalMultiplayerAgent).
* Configuración "Debug" o "Release" de LocalMultiplayerAgent compilada desde este repositorio con Visual Studio
  * Con Visual Studio, abra [MpsAgent.sln](https://github.com/PlayFab/MpsAgent/blob/main/MpsAgent.sln), seleccione la configuración Debug o Release y, a continuación, compile el LocalMultiplayerAgent.
* \[Opcional] Instale [Docker para Windows](https://www.docker.com/products/docker-desktop)

## Notación

\{depot} hará referencia a la ruta de acceso completa de Windows para la ubicación donde descarga sus proyectos de Git. Pueden estar en cualquier lugar que desee, como: C:\depot, S:\depot, Z:\gitrepos o la unidad y la ruta de acceso que le resulten convenientes. Normalmente se recomienda (especialmente para Unreal) que su ruta de acceso \{depot} sea lo más corta posible. Para el autor, \{depot} se resuelve como: `M:\depot\GSDK`. Por ejemplo, con la lista de requisitos anterior, probablemente tendrá algunos o todos los siguientes:

* \{depot}/ThirdPersonMP
* \{depot}/MpsAgent
* \[Opcional] \{depot}/gsdk \[Contiene el complemento GSDK de Unreal de PlayFab instalado previamente en ThirdPersonMP]
* \[Opcional] \{depot}/UnrealMarketplacePlugin  \[Contiene el complemento de Unreal Marketplace de PlayFab, que no es necesario para esta guía, pero sí para la mayoría de las características de PlayFab]

No es obligatorio que tenga todos estos elementos en la misma ubicación, pero probablemente sea útil hacerlo y, por motivos de organización, esta guía le recomienda que lo haga.

## Instrucciones

### Ejecución local, sin contenedores

En primer lugar, deberá configurar su LocalMultiplayerAgent para ejecutar el proyecto del servidor. La primera iteración ejecuta el proceso directamente en su PC local sin ningún aislamiento.

En el Explorador, busque y abra el archivo: `{depot}\MpsAgent\LocalMultiplayerAgent\MultiplayerSettings.json`. A continuación se muestra una versión abreviada de este archivo con las partes importantes para esta guía \[NOTA: observe las \ de escape en las rutas de acceso del json; se trata de un archivo json y, por tanto, es necesario aplicar secuencias de escape a todas las \ como \\\\]:

```json theme={null}
{
  "RunContainer": false,
  "OutputFolder": "<Local absolute path that will be used to store the required output artifacts>",
  ...
  "AssetDetails": [
    {
      "MountPath": "C:\\Assets",
      "LocalFilePath": "{PATH-TO-ZIP}"
    }
  ],
  ...
  "PortMappingsList": [
    [
      {
        "NodePort": 30000,
        "GamePort": {
          "Name": "gameport",
          "Number": 8888,
          "Protocol": "UDP"
        }
      }
    ]
  ],
  "ProcessStartParameters": {
    "StartGameCommand": "{PATH-TO-EXE} -log"
  },
  "ContainerStartParameters": {
    "StartGameCommand": "C:\\Assets\\ThirdPersonMPServer.exe -log",
    ...
  }
}
```

A los efectos de esta guía, las partes del archivo json ocultas por `...` en el ejemplo anterior simplemente utilizan los valores predeterminados del proyecto. El propósito y los valores de los campos importantes son los siguientes:

* RunContainer: para esta guía, siempre será false. Establecerlo en true requiere Docker.
  * Cuando es true, se ignora ProcessStartParameters/StartGameCommand y se usa ContainerStartParameters/StartGameCommand en su lugar
  * Cuando es true, todo se compila y se ejecuta en un contenedor de Docker, en lugar de en el contexto de la máquina local
  * Esta guía cubre el escenario en el que RunContainer es false, para que podamos depurar más fácilmente el proceso del servidor
  * Establecerlo en true requiere una compilación de servidor Shipping, además de [Docker para Windows](https://www.docker.com/products/docker-desktop)
* OutputFolder: `"<Local absolute path that will be used to store the required output artifacts>"`
  * Esta ubicación debe estar completamente definida y debe existir un directorio válido en esta ubicación.
* AssetDetails/LocalFilePath: \{PATH-TO-ZIP}
  * Esta ubicación debe estar completamente definida y debe existir un archivo zip válido en esta ubicación
  * Este archivo zip debe contener una compilación "Shipping Server" completamente construida
* PortMappingsList:
  * Es el equivalente en LocalMultiplayerAgent de definir el puerto en Game Manager
  * El complemento GSDK está codificado de forma rígida para buscar un puerto con el nombre: gameport
  * El método [SetDefaultServerHostPort](https://github.com/PlayFab/gsdk/blob/master/UnrealPlugin/Source/PlayfabGSDK/Private/GSDKUtils.cpp#L147) del complemento GSDK invalidará internamente el puerto interno de hospedaje del servidor de Unreal para que coincida con este puerto
  * El complemento GSDK usará *únicamente* el puerto denominado **gameport**, que se configura en **PortMappingsList** cuando se usa LocalMultiplayerAgent.
  * Este json le permite probar localmente que este número de puerto proviene de MPS y garantiza que su complemento GSDK lo recibirá correctamente
* ContainerStartParameters/StartGameCommand: mientras RunContainer sea false, no se usa.
  * Cuando RunContainer==true, reemplaza a ProcessStartParameters/StartGameCommand
  * Esta ruta de acceso es la ruta interna dentro del contenedor de Docker y será la suma de AssetDetails/MountPath más la ruta interna al ejecutable en su archivo zip definido por AssetDetails/LocalFilePath
  * Para este ejemplo, podría ser: `C:\\Assets\\ThirdPersonMPServer.exe -log`
* ProcessStartParameters/StartGameCommand: este comando será, en la práctica, la ruta de acceso a su ejecutable y los parámetros de línea de comandos que se usan para iniciar su servidor de juego
  * -log es un comando de Unreal para indicar al servidor de juego que guarde un registro de ejecución
  * \{PATH-TO-EXE} puede ser una de dos opciones:
    * Cualquier ruta de acceso absoluta a un ejecutable de su servidor de juego (incluso un servidor de juego de desarrollo), más los parámetros de línea de comandos de su servidor
      * Esta opción ignora el contenido del archivo zip y, en su lugar, ejecuta cualquier ejecutable arbitrario en cualquier ubicación
      * Es una opción de depuración local que solo funciona en su máquina local para depurar compilaciones de desarrollo: no le ayuda a comprobar que su archivo zip está listo para cargarse en MPS
      * Esta opción debe usarse al probar un servidor de desarrollo, adecuado para asociar un depurador de VS
      * Para este ejemplo, podría ser: `{depot}\\ThirdPersonMP\\Binaries\\Win64\\ThirdPersonMPServer.exe -log`
      * Para el autor, es: `M:\\depot\\GSDK\\ThirdPersonMPGSDK\\Binaries\\Win64\\ThirdPersonMPServer.exe -log`
    * Una ruta de acceso relativa, que debe indicar la ruta relativa dentro de su archivo zip, para ejecutar su servidor
      * Es el flujo de trabajo estándar que refleja cómo funciona en una instancia en la nube de MPS
      * Esta opción debe usarse al probar un servidor shipping y ayuda a comprobar que su zip está listo para cargarse en MPS
      * Para este ejemplo, podría ser: `ThirdPersonMPServer.exe -log`

Una vez que haya creado su archivo zip y establecido todas estas líneas en los valores apropiados, puede recompilar su LocalMultiplayerAgent y prepararse para depurar su servidor.

### Depuración del servidor

Puede ejecutar LocalMultiplayerAgent desde Visual Studio con el comando "Start New Instance", a veces asignado a F5, o puede ir a `{depot}\LocalMultiplayerAgent\bin\{configuration}\netcoreapp3.1` y hacer doble clic en "LocalMultiplayerAgent.exe". También puede ejecutarlo desde una ventana cmd para observar o capturar la información del registro de depuración.

Al ejecutar LocalMultiplayerAgent.exe debería iniciarse su servidor de juego. Por lo general, querrá tener abierto el Administrador de tareas para esto. Puede encontrar el identificador de proceso de su servidor de juego en la pestaña Detalles del Administrador de tareas.

Cuando vea el proceso ThirdPersonMPServer en ejecución en el Administrador de tareas, puede volver a Visual Studio y seleccionar el menú desplegable Debug -> Attach to Process. En la ventana emergente, puede buscar el nombre de su proceso: ThirdPersonMPServer y, a continuación, seleccionar el identificador de proceso correcto, identificado en el Administrador de tareas.

En este punto, debería poder realizar una depuración típica en su servidor de juego.

NOTA: Unreal proporciona varias configuraciones de compilación y varias formas de compilar su servidor. Para obtener los mejores resultados, use la configuración "Development Server" y la salida compilada directamente desde Visual Studio. Las compilaciones Shipping, o las compilaciones desde el Development Editor, pueden funcionar mejor en otras situaciones, pero la configuración "Development Server" compilada directamente desde Visual Studio será más fácil de asociar y depurar en Visual Studio.

## Solución de problemas

### Muchas instancias de ThirdPersonMPServer en el Administrador de tareas

Si hay varias instancias en la lista (normalmente 3 o más), es posible que deba usar el Administrador de tareas para forzar el cierre de las instancias que quedaron de intentos anteriores.

### LocalMultiplayerAgent inicia dos instancias de ThirdPersonMPServer

Si su LocalMultiplayerAgent *inicia* varias instancias, busque el identificador de proceso con un uso de memoria comparativamente alto. Algunas configuraciones del servidor de juego generan dos ejecutables, que se ejecutan como un par. Deberá asociarse al que tenga un mayor uso de memoria.

## Pasos siguientes

Ya está listo para implementar [su servidor en la nube](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment).

Como alternativa, puede volver a la guía principal del [complemento GSDK de Unreal](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk#deploy-to-playfab).


## Related topics

- [Creación del proyecto de ejemplo de GSDK](/es/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-setup.md)
- [Implementación en la nube del proyecto con GSDK](/es/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment.md)
- [Información general del complemento GSDK de Unreal de PlayFab](/es/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/index.md)
- [Configuración del proyecto con GSDK](/es/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-gsdk-project-setup.md)
- [Creación de una compilación de servidor de juegos](/es/services/playfab/multiplayer/servers/author-a-game-server-build.md)
