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

# Ejemplo de Wrapper

> Use el ejemplo de Wrapper (wrappingGsdk) para ejecutar un servidor de juego existente de Windows o Linux en PlayFab Multiplayer Servers sin agregar llamadas del GSDK a su binario.

El ejemplo de Wrapper, también conocido como wrappingGsdk, encapsula un juego existente para que pueda usarse en la implementación de compilaciones de servidores de juego que usan **Windows OS** y **Linux OS**.

Con la aplicación contenedora (wrapper), también podrá usar su compilación de servidor de juego en PlayFab Multiplayer Servers.

<Info>
  Un wrapper es una solución alternativa que procesa las secuencias de salida estándar y de error para llamar a los métodos del GSDK y no está pensado para su uso en producción.
</Info>

## Contenido del ejemplo

Este ejemplo consta de dos aplicaciones de consola de .NET Core.

* Wrapper: integra el paquete NuGet más reciente del SDK de servidor de juego de PlayFab (GSDK) con su servidor de juego. Esta aplicación wrapper **no está pensada para su uso en producción**
* Fakegame: un servidor de juego básico que no tiene conocimiento alguno del GSDK. Es como un servidor de juego típico que tendría antes de usar PlayFab Multiplayer Servers. Inicia Kestrel, el servidor web de ASP.NET Core, que escucha en el puerto TCP 80. Está pensado para simular un servidor de juego que no tiene absolutamente ningún conocimiento del GSDK. Puede usarlo si no tiene un servidor de juego propio. Tiene dos rutas GET que podemos usar: /hello para obtener una respuesta simple y /hello/terminate, que puede terminar el servidor.

## Requisitos

* [SDK de .NET Core 3.1 x64](https://dotnet.microsoft.com/download)

<Note>
  Para poder usar y ver los PlayFab Multiplayer Servers, debe habilitar la característica desde Game Manager. Para obtener instrucciones, consulte [Habilitación de la característica de servidores de PlayFab](/services/playfab/multiplayer/servers/enable-playfab-multiplayer-servers).
</Note>

## Tutorial

Para ver un tutorial en vivo de la compilación de este ejemplo, consulte nuestra presentación de Microsoft Game Dev 2021 (comienza aproximadamente en el minuto 2:52):

<iframe src="https://www.youtube.com/embed/kj2TcMlvWgk" width="100%" height="400" allowFullScreen frameBorder="0" />

## Obtención y compilación del ejecutable de Wrapper

* Obtenga el [ejemplo de wrapper del GSDK](https://github.com/PlayFab/MpsSamples/tree/master/wrappingGsdk) usando los métodos estándar de Git o descargándolo como archivo zip
* Abra el símbolo del sistema y use el comando cd para cambiar la ruta del directorio a la ubicación del archivo wrapper.csproj. Ejemplo: **cd C:/ReplaceWithYourFilePath/wrappingGsdk/wrapper**
* A continuación, ejecute el siguiente comando de la CLI de .NET Core:

```
dotnet publish --self-contained -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true
```

Cuando la compilación del wrapper se realiza correctamente, el ejecutable se publica en la carpeta ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish, como se muestra en la imagen siguiente.

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/create-your-first-server/wrapper-exe-location.PNG?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=1667c376bbaa6670b270d5264513278c" alt="Ubicación de publicación del ejecutable del wrapper" width="1615" height="365" data-path="images/playfab/multiplayer/servers/create-your-first-server/wrapper-exe-location.PNG" />

## Creación de un recurso de servidor de juego

Hay dos maneras de crear un recurso de servidor de juego.

### Uso del servidor de juego Fakegame con el wrapper

Use build.ps1 para compilar y empaquetar ambos proyectos (wrapper y fakegame). Este script crea una carpeta drop con un archivo .zip que contiene los archivos necesarios.

* Abra PowerShell
* Use el comando cd para cambiar la ruta del directorio a la ubicación del script build.ps1. Ejemplo: cd C:/ReplaceWithYourFilePath/wrappingGsdk/
* Ejecute **\build.ps1**
* Después de que el script se ejecute correctamente, vaya a la carpeta ..\wrappingGsdk\drop. Encontrará un archivo **gameassets.zip** que contiene la compilación del servidor de juego falso, el ejecutable del wrapper (compilado en el paso anterior) y otros archivos necesarios.

### Uso de sus propios archivos de servidor de juego con el wrapper

Para usar su proyecto de juego en la evaluación, coloque el wrapper y el ejecutable de su servidor de juego en la misma carpeta.

* Siga las instrucciones de [Compilación del ejecutable del wrapper](#acquire-and-build-wrapper-executable)
* Vaya a la ubicación de publicación del wrapper en ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish
* En otra ventana, vaya a la compilación de su servidor de juego y a los archivos necesarios para ejecutarla. Si no está seguro de qué archivos se necesitan, consulte [Determinación de los archivos DLL necesarios](/services/playfab/multiplayer/servers/determining-required-dlls)
* Copie la compilación del servidor de juego y todos los archivos necesarios en la ubicación de publicación del wrapper
* Seleccione todos los archivos de la ubicación de publicación del wrapper
* Con todos los archivos seleccionados, haga clic con el botón derecho y seleccione **Send to** > **Compressed (zip) files to zip**. No seleccione la carpeta de publicación del wrapper para agregarla al zip. Esto provocaría una asignación incorrecta.

<Tip>
  Para comprobarlo, siga las instrucciones de [Uso del servidor de juego Fakegame con el wrapper](#use-fakegame-game-server-with-the-wrapper) para compilar el archivo gameassets.zip y usarlo como referencia.
</Tip>

## Creación y carga de la imagen de contenedor de Linux (solo para servidores Linux)

Para crear una imagen de contenedor de Linux, necesitará un Dockerfile. Un Dockerfile es un archivo de texto sin extensión que contiene todos los comandos necesarios para compilar una imagen de contenedor determinada. En este ejemplo, este archivo ya está creado para usted. Todo lo que tiene que hacer es compilar la imagen de contenedor y ejecutarla.

Si desea usar su dispositivo de desarrollo de Windows, deberá instalar el Subsistema de Windows para Linux (WSL). Las instrucciones se proporcionan a continuación. Para obtener más información, consulte [Diferencias entre imágenes de contenedor de Windows y Linux](/services/playfab/multiplayer/servers/deploying-linux-based-builds#windows-and-linux-container-image-differences).

1. [Configure su dispositivo de desarrollo de Windows](/services/playfab/multiplayer/servers/deploying-linux-based-builds#set-up-your-windows-development-device) (opcional)
2. [Obtenga sus credenciales de inicio de sesión del registro de contenedor de PlayFab](/services/playfab/multiplayer/servers/deploying-linux-based-builds#get-your-playfab-container-registry-sign-in-credentials)
3. Use un Dockerfile existente o cree el suyo propio
   Este paso es diferente según use FakeGame o su propio servidor de juego.
   * Si usa FakeGame, compruebe que tiene el [Dockerfile](https://github.com/PlayFab/MpsSamples/blob/master/wrappingGsdk/Dockerfile)
   * Si usa su juego o necesita crear un Dockerfile, consulte [Creación de su Dockerfile](/services/playfab/multiplayer/servers/deploying-linux-based-builds#create-a-dockerfile). Puede usar el [Dockerfile](https://github.com/PlayFab/MpsSamples/blob/master/wrappingGsdk/Dockerfile) de FakeGame como punto de partida.
4. Abra su terminal de Linux con Docker instalado, como Ubuntu. Reemplace los valores de las variables TAG y ACR por sus valores. A continuación, ejecute los comandos siguientes.

```docker theme={null}
TAG="0.1"
ACR="customer5555555.azurecr.io"
docker login ${ACR}
```

<Tip>
  Para comprobar que las variables ACR y TAG están correctamente definidas, ejecute **echo $ACR__ y __echo $TAG**.
</Tip>

5. Escriba el nombre de usuario y la contraseña obtenidos en el paso anterior.
6. Compile y cargue la imagen de contenedor de Linux.

Ejecute los comandos siguientes para compilar y cargar el Dockerfile. Hay un "." al final del comando **docker build**. Debe estar en la misma carpeta/directorio que el Dockerfile. Para obtener más información, consulte [Compilación y carga de la imagen de contenedor de Linux](/services/playfab/multiplayer/servers/deploying-linux-based-builds#build-and-upload-linux-container-image).

```docker theme={null}
docker build -t ${ACR}/wrapper:${TAG} .
docker push ${ACR}/wrapper:${TAG}
```

## Implementación de una compilación con Game Manager o la API

El proceso de implementación de compilaciones es similar para los servidores de juego de Windows y Linux.

### Implementación de servidores de juego de Windows

Los pasos son similares a los del ejemplo de Windows Runner en C#. Siga estos pasos con las diferencias que se indican a continuación.

* [Uso de Game Manager para implementar y configurar servidores](/services/playfab/multiplayer/servers/quickstart-for-multiplayer-servers-game-manager)
* [Uso de PowerShell/API para implementar y configurar servidores](/services/playfab/multiplayer/servers/quickstart-for-multiplayer-servers-api-powershell)

Si prefiere probarlo localmente, consulte [Depuración local de servidores de juego e integración con PlayFab](/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab).

**Configuración específica de este ejemplo**

* Comando de inicio:
  * Use **C:\Assets\wrapper.exe -g C:\Assets\fakegame.exe arg1 arg2**
  * Reemplace fakegame.exe por el nombre del ejecutable de su servidor de juego, si usa su propia compilación de servidor de juego
* Configuración de red: Nombre: **gameport**, Puerto: **80**, Protocolo: **TCP**
* Recursos: cuando use FakeGame, cargue **gameassets.zip** como recurso.

### Implementación de servidores de juego de Linux

Siga los pasos generales que se indican a continuación para implementar.

* [Uso de Game Manager para implementar y configurar servidores](/services/playfab/multiplayer/servers/deploy-using-game-manager)
* [Uso de PowerShell/API para implementar y configurar servidores](/services/playfab/multiplayer/servers/deploy-using-powershell-api)

**Configuración específica de este ejemplo**

* Seleccione el contenedor que cargó
* Configuración de red: Nombre: **gameport**, Puerto: **80**, Protocolo: **TCP**
* No es necesario cargar recursos ni establecer el **Start Command**

<Note>
  Durante la asignación al usar la API RequestMultiplayerServer, el puerto al que se conecte será diferente del 80. Esto se debe a que el servicio PlayFab Multiplayer Server creará una asignación entre Azure Load Balancer (que expone sus puertos a la Internet pública) y los servidores de juego que se ejecutan en las máquinas virtuales de Azure.
</Note>

## Ejecución del wrapper con LocalMultiplayerAgent

Se recomienda encarecidamente usar LocalMultiplayerAgent si desea probar la integración del GSDK en sus servidores de juego personalizados.

Si usa LocalMultiplayerAgent con contenedores de Windows, debe configurar correctamente el archivo MultiplayerSettings.json. A continuación encontrará un ejemplo; preste especial atención a los valores de LocalFilePath y StartGameCommand. No olvide reemplazar fakegame.exe por el nombre del ejecutable de su servidor de juego.

```json theme={null}
"AssetDetails": [
    {
        "MountPath": "C:\\Assets",
        "SasTokens": null,
        "LocalFilePath": "C:\\projects\\gsdkSamples\\wrappingGsdk\\drop\\gameassets.zip"
    }
],
"StartGameCommand": "C:\\Assets\\wrapper.exe -g C:\\Assets\\fakegame.exe",

// if you are using fakegameserver you should also configure port mapping for port 80
"PortMappingsList": [
            [
                {
                    "NodePort": 56100,
                    "GamePort": {
                        "Name": "gameport",
                        "Number": 80,
                        "Protocol": "TCP"
                    }
                }
            ]
        ]
```

Ya está listo para probar con LocalMultiplayerAgent. Si lo ha configurado correctamente, en cuanto LocalMultiplayerAgent inicie su servidor de juego, podrá conectarse a él mediante curl en **[http://localhost:56100/Hello](http://localhost:56100/Hello)**.

## Cómo conectarse a un servidor de juego en MPS

Para establecer una conexión con un servidor de juego en MPS, es esencial determinar el número de puerto apropiado. Este requisito surge de la configuración en la que varias máquinas virtuales, cada una de las cuales puede ejecutar numerosas instancias de servidor de juego, se administran detrás de un equilibrador de carga. En tal configuración, un único puerto de IP pública puede corresponder a puertos diferentes en estas máquinas virtuales, cada uno asociado a una instancia de servidor de juego distinta.

### Uso de Game Manager

Puede usar la interfaz de usuario de Game Manager para asignar un servidor de juego y establecer una conexión con él.

1. Inicie sesión en Game Manager
2. Vaya a la página Multiplayer => Servers y seleccione su compilación
3. Vaya a la página Servers y haga clic en el botón "Request server".
4. En la página siguiente, tome nota de la **dirección IPv4** pública y del **puerto**.
5. Use curl para conectarse en **http\://\[IPV4Address]:\[Ports->Num]/Hello**."

### Uso del ejemplo MPS Allocator

A continuación se explica cómo puede usar el [ejemplo MPS Allocator](/services/playfab/multiplayer/servers/mps-allocator-sample) para asignar un servidor de juego y establecer una conexión con él.

1. Compile y ejecute el ejemplo MPS Allocator.
2. Aplique el comando "ListBuildSummaries" para ver las compilaciones disponibles y sus identificadores de compilación correspondientes.
3. Invoque "RequestMultiplayerServer" para iniciar una solicitud de una instancia de servidor de juego.
4. Introduzca el identificador de compilación seleccionado en el comando "ListMultiplayerServers" para generar una lista de servidores disponibles.
5. Elija una instancia de servidor de juego activa y, a continuación, use "GetMultiplayerServerDetails" con los identificadores de compilación y de sesión obtenidos en los pasos anteriores.
6. Tome nota de **IPV4Address** y **Ports->Num** que se muestran en la respuesta.
7. Use curl para conectarse en **http\://\[IPV4Address]:\[Ports->Num]/Hello**.

## Consulte también

* [Creación de su primer servidor](/services/playfab/multiplayer/servers/create-your-first-server)
* [Recursos y ejemplos](/services/playfab/multiplayer/servers/server-samples-resources)
* [SDK de PlayFab Multiplayer Server](/services/playfab/multiplayer/servers/server-sdks/overview)
* [Referencia de API](xref:titleid.playfabapi.com.multiplayer.multiplayerserver)


## Related topics

- [Creación de su primer servidor](/es/services/playfab/multiplayer/servers/create-your-first-server.md)
- [Ejemplos y recursos de Multiplayer Servers](/es/services/playfab/multiplayer/servers/server-samples-resources.md)
- [Ejemplos de Party](/es/services/playfab/multiplayer/networking/party-samples.md)
- [Ejemplos de gráficos](/es/build/core-features/graphics/graphics-samples.md)
- [Ejemplo de selección de meshlets](/es/build/core-features/graphics/newfeatures/ms/ms-meshlet-culling.md)
