

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# SDK 5.x del servidor de C\+\+ (Unreal) para Amazon GameLift Servers: acciones
<a name="integration-server-sdk5-unreal-actions"></a>

Utilice esta referencia del SDK 5.x del servidor de Unreal de Amazon GameLift Servers como ayuda para preparar un juego multijugador para el uso con Amazon GameLift Servers. Para obtener más información sobre el proceso de integración, consulte [Adición de Amazon GameLift Servers al servidor de juegos con el SDK del servidor](gamelift-sdk-server-api.md). Si utiliza el complemento de Amazon GameLift Servers para Unreal, consulte también [Complemento de Amazon GameLift Servers para Unreal Engine](unreal-plugin.md).

**nota**  
En este tema se describe la API de C\+\+ de Amazon GameLift Servers que puede utilizar al realizar la compilación para Unreal Engine. En concreto, esta documentación se aplica al código que se compila con la opción `-DBUILD_FOR_UNREAL=1`. 

[SDK del servidor de C\+\+ (Unreal) 5.x para Amazon GameLift Servers: tipos de datos](integration-server-sdk5-unreal-datatypes.md)

**Topics**
+ [SDK del servidor de C\+\+ (Unreal) 5.x para Amazon GameLift Servers: tipos de datos](integration-server-sdk5-unreal-datatypes.md)
+ [GetSdkVersion()](#integration-server-sdk5-unreal-getsdkversion)
+ [InitSDK()](#integration-server-sdk5-unreal-initsdk)
+ [InitSDK()](#integration-server-sdk5-unreal-initsdk-anywhere)
+ [ProcessReady()](#integration-server-sdk5-unreal-processready)
+ [ProcessEnding()](#integration-server-sdk5-unreal-processending)
+ [ActivateGameSession()](#integration-server-sdk5-unreal-activategamesession)
+ [UpdatePlayerSessionCreationPolicy()](#integration-server-sdk5-unreal-updateplayersessioncreationpolicy)
+ [GetGameSessionId()](#integration-server-sdk5-unreal-getgamesessionid)
+ [GetTerminationTime()](#integration-server-sdk5-unreal-getterm)
+ [AcceptPlayerSession()](#integration-server-sdk5-unreal-acceptplayersession)
+ [RemovePlayerSession()](#integration-server-sdk5-unreal-removeplayersession)
+ [DescribePlayerSessions()](#integration-server-sdk5-unreal-describeplayersessions)
+ [StartMatchBackfill()](#integration-server-sdk5-unreal-startmatchbackfill)
+ [StopMatchBackfill()](#integration-server-sdk5-unreal-stopmatchbackfill)
+ [GetComputeCertificate()](#integration-server-sdk5-unreal-getcomputecertificate)
+ [GetFleetRoleCredentials()](#integration-server-sdk5-unreal-getfleetrolecredentials)
+ [Destroy()](#integration-server-sdk5-unreal-ref-destroy)

## GetSdkVersion()
<a name="integration-server-sdk5-unreal-getsdkversion"></a>

Devuelve el número de versión actual del SDK integrado en el proceso del servidor.

### Sintaxis
<a name="integration-server-sdk5-unreal-getsdkversion-syntax"></a>

```
FGameLiftStringOutcome GetSdkVersion();
```

### Valor devuelto
<a name="integration-server-sdk5-unreal-getsdkversion-return"></a>

Si funciona correctamente, devuelve la versión del SDK actual como objeto [FGameLiftStringOutcome](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-awsstringoutcome). El objeto devuelto incluye el número de versión (por ejemplo, `5.0.0`). Si no funciona, devuelve un mensaje de error.

### Ejemplo
<a name="integration-server-sdk5-unreal-getsdkversion-example"></a>

```
Aws::GameLift::AwsStringOutcome SdkVersionOutcome = Aws::GameLift::Server::GetSdkVersion();  
```

## InitSDK()
<a name="integration-server-sdk5-unreal-initsdk"></a>

Inicializa el SDK de Amazon GameLift Servers para una flota de EC2 administrada. Llame a este método en el lanzamiento, antes de cualquier otra inicialización relacionada con Amazon GameLift Servers. Este método lee parámetros de servidor del entorno de host para configurar la comunicación entre el servidor y el servicio Amazon GameLift Servers. Utiliza un token de idempotencia, por lo que puede volver a intentar esta llamada de forma segura cuando falle.

### Sintaxis
<a name="integration-server-sdk5-unreal-initsdk-syntax"></a>

```
FGameLiftGenericOutcome InitSDK()
```

### Valor devuelto
<a name="integration-server-sdk5-unreal-initsdk-return"></a>

Si funciona correctamente, devuelve un objeto `InitSdkOutcome` e indica que el proceso del servidor está listo para llamar a [ProcessReady()](#integration-server-sdk5-unreal-processready). 

### Ejemplo
<a name="integration-server-sdk5-unreal-initsdk-example"></a>

```
//Call InitSDK to establish a local connection with the Amazon GameLift Servers Agent to enable further communication.
FGameLiftGenericOutcome initSdkOutcome = GameLiftSdkModule->InitSDK();
```

## InitSDK()
<a name="integration-server-sdk5-unreal-initsdk-anywhere"></a>

Inicializa el SDK de Amazon GameLift Servers para una flota de Anywhere o una flota de contenedores administrada. Llame a este método en el lanzamiento, antes de cualquier otra inicialización relacionada con Amazon GameLift Servers. Este método requiere que los parámetros del servidor explícito configure la comunicación entre el servidor y el servicio Amazon GameLift Servers. Utiliza un token de idempotencia, por lo que puede volver a intentar esta llamada de forma segura cuando falle.

### Sintaxis
<a name="integration-server-sdk5-unreal-initsdk-anywhere-syntax"></a>

```
FGameLiftGenericOutcome InitSDK(serverParameters)
```

### Parameters
<a name="integration-server-sdk5-unreal-initsdk-anywhere-parameter"></a>

[FServerParámetros](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-serverparameters)  
Para inicializar un servidor de juegos en una flota de Amazon GameLift Servers Anywhere, cree un objeto `ServerParameters` con la siguiente información:  
+ La URL WebSocket utilizada para conectarse a tu servidor de juegos. 
+ El ID del proceso utilizado para alojar su servidor de juegos. 
+ El ID del proceso utilizado para alojar los procesos del servidor de juegos. 
+ El ID de la flota de Amazon GameLift Servers que contiene su recurso de computación de Amazon GameLift Servers Anywhere.
+ El token de autorización generado por la operación de Amazon GameLift Servers. 

### Valor devuelto
<a name="integration-server-sdk5-unreal-initsdk-anywhere-return"></a>

Si funciona correctamente, devuelve un objeto `InitSdkOutcome` e indica que el proceso del servidor está listo para llamar a [ProcessReady()](#integration-server-sdk5-unreal-processready). 

**nota**  
Si las llamadas a `InitSDK()` no funcionan en las compilaciones de juegos implementadas en las flotas de Anywhere, compruebe el parámetro `ServerSdkVersion` que se utiliza al crear el recurso de compilación. Debe establecer este valor de forma explícita en la versión del SDK del servidor en uso. El valor predeterminado de este parámetro es 4.x, que no es compatible. Para resolver este problema, cree una compilación nueva e impleméntela en una flota nueva.

### Ejemplo
<a name="integration-server-sdk5-unreal-initsdk-anywhere-example"></a>

```
//Define the server parameters
FServerParameters serverParameters;
parameters.m_authToken = "1111aaaa-22bb-33cc-44dd-5555eeee66ff"; 
parameters.m_fleetId = "arn:aws:gamelift:us-west-1:111122223333:fleet/fleet-9999ffff-88ee-77dd-66cc-5555bbbb44aa";
parameters.m_hostId = "HardwareAnywhere"; 
parameters.m_processId = "PID1234";
parameters.m_webSocketUrl = "wss://us-west-1.api.amazongamelift.com"; 

//Call InitSDK to establish a local connection with the Amazon GameLift Servers Agent to enable further communication.
FGameLiftGenericOutcome initSdkOutcome = GameLiftSdkModule->InitSDK(serverParameters);
```

## ProcessReady()
<a name="integration-server-sdk5-unreal-processready"></a>

Notifica a Amazon GameLift Servers que el proceso del servidor de juegos está listo para alojar sesiones de juego. Llame a este método después de invocar [InitSDK()](#integration-server-sdk5-unreal-initsdk). Se debe llamar a este método solo una vez por proceso.

### Sintaxis
<a name="integration-server-sdk5-unreal-processready-syntax"></a>

`GenericOutcome ProcessReady(const Aws::GameLift::Server::ProcessParameters &processParameters);`

### Parameters
<a name="integration-server-sdk5-unreal-processready-parameter"></a>

**processParameters**  
Un objeto [FProcessParámetros](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-process) que comunica la siguiente información sobre el proceso del servidor:  
+ Nombres de métodos de devolución de llamada, implementados en el código de servidor de juegos, que el servicio Amazon GameLift Servers invoca para comunicarse con el proceso del servidor.
+ Número de puerto de escucha del servidor de proceso.
+ Ruta a cualquier archivo específico de la sesión de juego que desea que Amazon GameLift Servers capture y almacene.

### Valor devuelto
<a name="integration-server-sdk5-unreal-processready-return"></a>

Devuelve un resultado genérico correcto o erróneo con un mensaje de error.

### Ejemplo
<a name="integration-server-sdk5-unreal-processready-example"></a>

Este ejemplo ilustra las implementaciones tanto de la función de llamada [ProcessReady()](#integration-server-sdk5-unreal-processready) como de la función de delegación.

```
//Calling ProcessReady tells Amazon GameLift Servers this game server is ready to receive incoming game sessions!
UE_LOG(GameServerLog, Log, TEXT("Calling Process Ready"));
FGameLiftGenericOutcome processReadyOutcome = GameLiftSdkModule->ProcessReady(*params);
```

## ProcessEnding()
<a name="integration-server-sdk5-unreal-processending"></a>

Informa a Amazon GameLift Servers de que el proceso del servidor está finalizando. Llame a este método después de realizar todas las demás tareas de limpieza (lo que incluye el cierre de la sesión de juegos activa) y antes de finalizar el proceso. Según el resultado de `ProcessEnding()`, el proceso finaliza con éxito (0) o error (-1) y genera un evento de flota. Si el proceso termina con un error, el evento de flota generado es `SERVER_PROCESS_TERMINATED_UNHEALTHY`.

### Sintaxis
<a name="integration-server-sdk5-unreal-processending-syntax"></a>

```
FGameLiftGenericOutcome ProcessEnding()
```

### Valor devuelto
<a name="integration-server-sdk5-unreal-processending-return"></a>

Devuelve un resultado genérico correcto o erróneo con un mensaje de error.

### Ejemplo
<a name="integration-server-sdk5-unreal-processending-example"></a>

```
//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 shutdown.
params->OnTerminate.BindLambda([=]() {
  UE_LOG(GameServerLog, Log, TEXT("Game Server Process is terminating"));
  GameLiftSdkModule->ProcessEnding();
});
```

## ActivateGameSession()
<a name="integration-server-sdk5-unreal-activategamesession"></a>

Notifica a Amazon GameLift Servers que el proceso del servidor ha iniciado una sesión de juego y que está listo para recibir las conexiones de los jugadores. Esta acción debe llamarse como parte de la función de devolución de llamada `onStartGameSession()`, después de la inicialización de todas las sesiones de juego.

### Sintaxis
<a name="integration-server-sdk5-unreal-activategamesession-syntax"></a>

```
FGameLiftGenericOutcome ActivateGameSession()
```

### Valor devuelto
<a name="integration-server-sdk5-unreal-activategamesession-return"></a>

Devuelve un resultado genérico correcto o erróneo con un mensaje de error.

### Ejemplo
<a name="integration-server-sdk5-unreal-activategamesession-example"></a>

Este ejemplo muestra cómo se llama a `ActivateGameSession()` como parte de la función de delegación `onStartGameSession()`. 

```
//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()
auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession)
{
  FString gameSessionId = FString(gameSession.GetGameSessionId());
  UE_LOG(GameServerLog, Log, TEXT("GameSession Initializing: %s"), *gameSessionId);
  GameLiftSdkModule->ActivateGameSession();
};
```

## UpdatePlayerSessionCreationPolicy()
<a name="integration-server-sdk5-unreal-updateplayersessioncreationpolicy"></a>

Actualiza la capacidad de la sesión de juego actual para aceptar sesiones de jugador nuevas. Una sesión de juego se puede configurar para que acepte o deniegue todas las sesiones nuevas de los jugadores.

### Sintaxis
<a name="integration-server-sdk5-unreal-updateplayersessioncreationpolicy-syntax"></a>

```
FGameLiftGenericOutcome UpdatePlayerSessionCreationPolicy(EPlayerSessionCreationPolicy policy)
```

### Parameters
<a name="integration-server-sdk5-unreal-updateplayersessioncreationpolicy-parameter"></a>

**playerCreationSessionPolítica**  
Valor de cadena que indica si la sesión de juego acepta jugadores nuevos.   
Los valores válidos son:  
+ **ACCEPT\_ALL**: se aceptan todas las sesiones de jugador nuevas.
+ **DENY\_ALL**: se rechazan todas las sesiones de jugador nuevas.

### Valor devuelto
<a name="integration-server-sdk5-unreal-updateplayersessioncreationpolicy-return"></a>

Devuelve un resultado genérico correcto o erróneo con un mensaje de error.

### Ejemplo
<a name="integration-server-sdk5-unreal-updateplayersessioncreationpolicy-example"></a>

Este ejemplo establece la política de participación en la sesión de juego actual para aceptar todos los jugadores.

```
FGameLiftGenericOutcome outcome = GameLiftSdkModule->UpdatePlayerSessionCreationPolicy(Aws::GameLift::Model::EPlayerSessionCreationPolicy::ACCEPT_ALL);
```

## GetGameSessionId()
<a name="integration-server-sdk5-unreal-getgamesessionid"></a>

Recupera el ID de la sesión de juego alojada por el proceso del servidor. 

En el caso de los procesos inactivos que no se activan con una sesión de juego, la llamada devuelve [FGameLiftError](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-gamelifterror).

### Sintaxis
<a name="integration-server-sdk5-unreal-getgamesessionid-syntax"></a>

```
FGameLiftStringOutcome GetGameSessionId()
```

### Parameters
<a name="integration-server-sdk5-unreal-getgamesessionid-parameter"></a>

Esta acción no tiene parámetros.

### Valor devuelto
<a name="integration-server-sdk5-unreal-getgamesessionid-return"></a>

Si funciona correctamente, devuelve el ID de sesión del juego como objeto [FGameLiftStringOutcome](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-awsstringoutcome). Si no funciona, devuelve un mensaje de error.

En el caso de los procesos inactivos que no se activan con una sesión de juego, la llamada devuelve `Success`=`True` y `GameSessionId`=`""`.

### Ejemplo
<a name="integration-server-sdk5-unreal-getgamesessionid-example"></a>

```
//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()
auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession)
{
  FString gameSessionId = FString(gameSession.GetGameSessionId());
  UE_LOG(GameServerLog, Log, TEXT("GameSession Initializing: %s"), *gameSessionId);
  GameLiftSdkModule->ActivateGameSession();
};
```

## GetTerminationTime()
<a name="integration-server-sdk5-unreal-getterm"></a>

Devuelve la hora a la que está programada el cierre de un proceso de servidor, si hay una hora de terminación disponible. Un proceso del servidor realiza esta acción después de recibir una devolución de llamada `onProcessTerminate()` desde Amazon GameLift Servers. Amazon GameLift Servers llama a `onProcessTerminate()` por los motivos siguientes: 
+ Cuando el proceso del servidor informa de un mal estado o no responde a Amazon GameLift Servers.
+ Al finalizar la instancia durante un evento de reducción vertical.
+ [Cuando se finaliza una instancia debido a la interrupción de una instancia de spot](spot-tasks.md).

### Sintaxis
<a name="integration-server-sdk5-unreal-getterm-syntax"></a>

```
AwsDateTimeOutcome GetTerminationTime()
```

### Valor devuelto
<a name="integration-server-sdk5-unreal-getterm-return"></a>

Si el proceso se realiza correctamente, devuelve la hora de terminación como un objeto `AwsDateTimeOutcome`. El valor es la hora de terminación expresado en ciclos transcurridos desde `0001 00:00:00`. Por ejemplo, el valor de la fecha y hora `2020-09-13 12:26:40 -000Z` es igual a `637355968000000000` ciclos. Si no hay una hora de terminación disponible, devuelve un mensaje de error.

Si el proceso no ha recibido ninguna devolución de llamada ` ProcessParameters.OnProcessTerminate()`, se devuelve un mensaje de error. Para obtener más información sobre cómo cerrar un proceso de servidor, consulte [Respuesta a una notificación de cierre del proceso del servidor](gamelift-sdk-server-api.md#gamelift-sdk-server-terminate).

### Ejemplo
<a name="integration-server-sdk5-unreal-getterm-example"></a>

```
AwsDateTimeOutcome TermTimeOutcome = GameLiftSdkModule->GetTerminationTime();
```

## AcceptPlayerSession()
<a name="integration-server-sdk5-unreal-acceptplayersession"></a>

Notifica a Amazon GameLift Servers que un jugador con el ID de sesión de jugador especificado se ha conectado al proceso del servidor y requiere validación. Amazon GameLift Servers verifica que el ID de sesión de jugador es válido. Una vez validada la sesión del jugador, Amazon GameLift Servers cambia el estado del espacio de jugador de RESERVADO a ACTIVO. 

### Sintaxis
<a name="integration-server-sdk5-unreal-acceptplayersession-syntax"></a>

```
FGameLiftGenericOutcome AcceptPlayerSession(const FString& playerSessionId)
```

### Parameters
<a name="integration-server-sdk5-unreal-acceptplayersession-parameter"></a>

playerSessionId  
ID único emitido por Amazon GameLift Servers cuando se crea una nueva sesión de jugador.

### Valor devuelto
<a name="integration-server-sdk5-unreal-acceptplayersession-return"></a>

Devuelve un resultado genérico correcto o erróneo con un mensaje de error. 

### Ejemplo
<a name="integration-server-sdk5-unreal-acceptplayersession-example"></a>

Este ejemplo gestiona una solicitud de conexión que incluye la validación y el rechazo de una sesión de jugador no válida. IDs

```
bool GameLiftManager::AcceptPlayerSession(const FString& playerSessionId, const FString& playerId)
{
  #if WITH_GAMELIFT
  UE_LOG(GameServerLog, Log, TEXT("Accepting GameLift PlayerSession: %s . PlayerId: %s"), *playerSessionId, *playerId);
  FString gsId = GetCurrentGameSessionId();
  if (gsId.IsEmpty()) {
    UE_LOG(GameServerLog, Log, TEXT("No GameLift GameSessionId. Returning early!"));
    return false;
  }
  
  if (!GameLiftSdkModule->AcceptPlayerSession(playerSessionId).IsSuccess()) {
    UE_LOG(GameServerLog, Log, TEXT("PlayerSession not Accepted."));
    return false;
  }

  // Add PlayerSession from internal data structures keeping track of connected players
  connectedPlayerSessionIds.Add(playerSessionId);
  idToPlayerSessionMap.Add(playerSessionId, PlayerSession{ playerId, playerSessionId });
  return true;
  #else
  return false;
  #endif
}
```

## RemovePlayerSession()
<a name="integration-server-sdk5-unreal-removeplayersession"></a>

Informa a Amazon GameLift Servers de que un jugador se ha desconectado del proceso del servidor. Como respuesta, Amazon GameLift Servers cambia el espacio del jugador para que esté disponible. 

### Sintaxis
<a name="integration-server-sdk5-unreal-removeplayersession-syntax"></a>

```
FGameLiftGenericOutcome RemovePlayerSession(const FString& playerSessionId)
```

### Parameters
<a name="integration-server-sdk5-unreal-removeplayersession-parameter"></a>

**`playerSessionId`**  
ID único emitido por Amazon GameLift Servers cuando se crea una nueva sesión de jugador.

### Valor devuelto
<a name="integration-server-sdk5-unreal-removeplayersession-return"></a>

Devuelve un resultado genérico correcto o erróneo con un mensaje de error.

### Ejemplo
<a name="integration-server-sdk5-unreal-removeplayersession-example"></a>

```
bool GameLiftManager::RemovePlayerSession(const FString& playerSessionId)
{
  #if WITH_GAMELIFT
  UE_LOG(GameServerLog, Log, TEXT("Removing GameLift PlayerSession: %s"), *playerSessionId);

  if (!GameLiftSdkModule->RemovePlayerSession(playerSessionId).IsSuccess()) {
    UE_LOG(GameServerLog, Log, TEXT("PlayerSession Removal Failed"));
    return false;
  }

  // Remove PlayerSession from internal data structures that are keeping track of connected players
  connectedPlayerSessionIds.Remove(playerSessionId);
  idToPlayerSessionMap.Remove(playerSessionId);

  // end the session if there are no more players connected
  if (connectedPlayerSessionIds.Num() == 0) {
    EndSession();
  }

  return true;
  #else
  return false;
  #endif
}
```

## DescribePlayerSessions()
<a name="integration-server-sdk5-unreal-describeplayersessions"></a>

Recupera datos de sesión de jugador, incluida la configuración, los metadatos de la sesión y los datos de jugador. Utilice este método para obtener información sobre los siguientes elementos:
+ Una sesión para un jugador
+ Todas las sesiones del jugador en una sesión de juego
+ Todas las sesiones de jugador están asociadas a un único ID de jugador

### Sintaxis
<a name="integration-server-sdk5-unreal-describeplayersessions-syntax"></a>

```
FGameLiftDescribePlayerSessionsOutcome DescribePlayerSessions(const FGameLiftDescribePlayerSessionsRequest &describePlayerSessionsRequest)
```

### Parameters
<a name="integration-server-sdk5-unreal-describeplayersessions-parameter"></a>

**[FGameLiftDescribePlayerSessionsRequest](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-playersessions)**  
Un objeto [FGameLiftDescribePlayerSessionsRequest](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-playersessions) que describe las sesiones de jugador que recuperar.

### Valor devuelto
<a name="integration-server-sdk5-unreal-describeplayersessions-return"></a>

Si funciona correctamente, devuelve un objeto [FGameLiftDescribePlayerSessionsOutcome](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-describeplayersessionsoutcome) que contiene un conjunto de objetos de sesión de jugador que se ajusta a los parámetros de la solicitud.

### Ejemplo
<a name="integration-server-sdk5-unreal-describeplayersessions-example"></a>

En este ejemplo se solicitan todas las sesiones de jugador conectadas activamente a una sesión de juego específica. Al omitir *NextToken*y establecer el valor *límite* en 10, Amazon GameLift Servers devuelve los registros de las sesiones de los primeros 10 jugadores que coincidan con la solicitud.

```
void GameLiftManager::DescribePlayerSessions()
{
  #if WITH_GAMELIFT
  FString localPlayerSessions;
  for (auto& psId : connectedPlayerSessionIds)
  {
    PlayerSession ps = idToPlayerSessionMap[psId];
    localPlayerSessions += FString::Printf(TEXT("%s : %s  ; "), *(ps.playerSessionId), *(ps.playerId));
  }
  UE_LOG(GameServerLog, Log, TEXT("LocalPlayerSessions: %s"), *localPlayerSessions);

  UE_LOG(GameServerLog, Log, TEXT("Describing PlayerSessions in this GameSession"));
  FGameLiftDescribePlayerSessionsRequest request;
  request.m_gameSessionId = GetCurrentGameSessionId();

  FGameLiftDescribePlayerSessionsOutcome outcome = GameLiftSdkModule->DescribePlayerSessions(request);
  LogDescribePlayerSessionsOutcome(outcome);
  #endif
}
```

## StartMatchBackfill()
<a name="integration-server-sdk5-unreal-startmatchbackfill"></a>

Envía una solicitud para encontrar nuevos jugadores para ranuras abiertas en una sesión de juego creada con FlexMatch. Para obtener más información, consulte [Característica de reposición de FlexMatch](https://docs.aws.amazon.com/gameliftservers/latest/flexmatchguide/match-backfill.html).

Esta acción es asíncrona. Si se emparejan nuevos jugadores, Amazon GameLift Servers ofrece datos actualizados del emparejador mediante la función de devolución de llamada `OnUpdateGameSession()`.

Un proceso del servidor solo puede tener una solicitud de reposición de emparejamiento activa a la vez. Para enviar una nueva solicitud, en primer lugar llame a [StopMatchBackfill()](#integration-server-sdk5-unreal-stopmatchbackfill) para cancelar la solicitud original.

### Sintaxis
<a name="integration-server-sdk5-unreal-startmatchbackfill-syntax"></a>

```
FGameLiftStringOutcome StartMatchBackfill (FStartMatchBackfillRequest &startBackfillRequest);
```

### Parameters
<a name="integration-server-sdk5-unreal-startmatchbackfill-parameter"></a>

**[FStartMatchBackfillRequest](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-startmatchbackfillrequest)**  
 StartMatchBackfillRequest Objeto que comunica la siguiente información:  
+ Un ID de ticket que se asignará a la solicitud de reposición. Esta información es opcional; si no se proporciona ningún ID, Amazon GameLift Servers generará uno.
+ El creador de emparejamientos al que se enviará la solicitud. El ARN de configuración completo es obligatorio. Este valor se encuentra en los datos del emparejador de la sesión de juego.
+ El ID de la sesión de juego que se va a reponer.
+ Datos del emparejador disponibles para los jugadores actuales de la sesión de juego.

### Valor devuelto
<a name="integration-server-sdk5-unreal-startmatchbackfill-return"></a>

Devuelve un objeto `StartMatchBackfillOutcome` con el ID del ticket de reposición de emparejamiento o un error con un mensaje de error. 

### Ejemplo
<a name="integration-server-sdk5-unreal-startmatchbackfill-example"></a>

```
FGameLiftStringOutcome FGameLiftServerSDKModule::StartMatchBackfill(const FStartMatchBackfillRequest& request) 
{
  #if WITH_GAMELIFT
  Aws::GameLift::Server::Model::StartMatchBackfillRequest sdkRequest;
  sdkRequest.SetTicketId(TCHAR_TO_UTF8(*request.m_ticketId));
  sdkRequest.SetGameSessionArn(TCHAR_TO_UTF8(*request.m_gameSessionArn));
  sdkRequest.SetMatchmakingConfigurationArn(TCHAR_TO_UTF8(*request.m_matchmakingConfigurationArn));
  for (auto player : request.m_players) {
    Aws::GameLift::Server::Model::Player sdkPlayer;
    sdkPlayer.SetPlayerId(TCHAR_TO_UTF8(*player.m_playerId));
    sdkPlayer.SetTeam(TCHAR_TO_UTF8(*player.m_team));
    for (auto entry : player.m_latencyInMs) {
      sdkPlayer.WithLatencyMs(TCHAR_TO_UTF8(*entry.Key), entry.Value);
    }

    std::map<std::string, Aws::GameLift::Server::Model::AttributeValue> sdkAttributeMap;
    for (auto attributeEntry : player.m_playerAttributes) {
      FAttributeValue value = attributeEntry.Value;
      Aws::GameLift::Server::Model::AttributeValue attribute;
      switch (value.m_type) {
        case FAttributeType::STRING:
          attribute = Aws::GameLift::Server::Model::AttributeValue(TCHAR_TO_UTF8(*value.m_S));
        break;
        case FAttributeType::DOUBLE:
          attribute = Aws::GameLift::Server::Model::AttributeValue(value.m_N);
        break;
        case FAttributeType::STRING_LIST:
          attribute = Aws::GameLift::Server::Model::AttributeValue::ConstructStringList();
          for (auto sl : value.m_SL) {
            attribute.AddString(TCHAR_TO_UTF8(*sl));
          };
        break;
        case FAttributeType::STRING_DOUBLE_MAP:
          attribute = Aws::GameLift::Server::Model::AttributeValue::ConstructStringDoubleMap();
          for (auto sdm : value.m_SDM) {
            attribute.AddStringAndDouble(TCHAR_TO_UTF8(*sdm.Key), sdm.Value);
          };
        break;
      }
      sdkPlayer.WithPlayerAttribute((TCHAR_TO_UTF8(*attributeEntry.Key)), attribute);
    }
    sdkRequest.AddPlayer(sdkPlayer);
  }
  auto outcome = Aws::GameLift::Server::StartMatchBackfill(sdkRequest);
  if (outcome.IsSuccess()) {
    return FGameLiftStringOutcome(outcome.GetResult().GetTicketId());
  }
  else {
    return FGameLiftStringOutcome(FGameLiftError(outcome.GetError()));
  }
  #else
  return FGameLiftStringOutcome("");
  #endif
}
```

## StopMatchBackfill()
<a name="integration-server-sdk5-unreal-stopmatchbackfill"></a>

Cancela una solicitud de reposición de emparejamiento activa. Para obtener más información, consulte [Característica de reposición de FlexMatch](https://docs.aws.amazon.com/gameliftservers/latest/flexmatchguide/match-backfill.html).

### Sintaxis
<a name="integration-server-sdk5-unreal-stopmatchbackfill-syntax"></a>

```
FGameLiftGenericOutcome StopMatchBackfill (FStopMatchBackfillRequest &stopBackfillRequest);
```

### Parameters
<a name="integration-server-sdk5-unreal-stopmatchbackfill-parameter"></a>

**[FStopMatchBackfillRequest](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-stopmatchbackfillrequest)**  
Un StopMatchBackfillRequest objeto que identifique el billete de emparejamiento que se va a cancelar:   
+ ID del ticket que se asignará a la solicitud de reposición
+ El emparejador al que se envió la solicitud de reposición
+ La sesión de juego asociada a la solicitud de reposición.

### Valor devuelto
<a name="integration-server-sdk5-unreal-stopmatchbackfill-return"></a>

Devuelve un resultado genérico correcto o erróneo con un mensaje de error.

### Ejemplo
<a name="integration-server-sdk5-unreal-stopmatchbackfill-example"></a>

```
FGameLiftGenericOutcome FGameLiftServerSDKModule::StopMatchBackfill(const FStopMatchBackfillRequest& request)
{
  #if WITH_GAMELIFT
  Aws::GameLift::Server::Model::StopMatchBackfillRequest sdkRequest;
  sdkRequest.SetTicketId(TCHAR_TO_UTF8(*request.m_ticketId));
  sdkRequest.SetGameSessionArn(TCHAR_TO_UTF8(*request.m_gameSessionArn));
  sdkRequest.SetMatchmakingConfigurationArn(TCHAR_TO_UTF8(*request.m_matchmakingConfigurationArn));
  auto outcome = Aws::GameLift::Server::StopMatchBackfill(sdkRequest);
  if (outcome.IsSuccess()) {
    return FGameLiftGenericOutcome(nullptr);
  }
  else {
    return FGameLiftGenericOutcome(FGameLiftError(outcome.GetError()));
  }
  #else
  return FGameLiftGenericOutcome(nullptr);
  #endif
}
```

## GetComputeCertificate()
<a name="integration-server-sdk5-unreal-getcomputecertificate"></a>

Recupera la ruta al certificado TLS utilizado para cifrar la conexión de red entre el recurso de computación de Amazon GameLift Servers Anywhere y Amazon GameLift Servers. Puede utilizar la ruta del certificado al registrar el dispositivo informático en una flota de Amazon GameLift Servers Anywhere. Para obtener más información, consulte, [RegisterCompute](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_RegisterCompute.html).

### Sintaxis
<a name="integration-server-sdk5-unreal-getcomputecertificate-syntax"></a>

```
FGameLiftGetComputeCertificateOutcome FGameLiftServerSDKModule::GetComputeCertificate()
```

### Valor devuelto
<a name="integration-server-sdk5-unreal-getcomputecertificate-return"></a>

Devuelve un objeto `GetComputeCertificateResponse` que contiene los siguientes elementos: 
+ CertificatePath: La ruta al certificado TLS de su recurso informático. 
+ HostName: el nombre de host de su recurso informático.

### Ejemplo
<a name="integration-server-sdk5-unreal-getcomputecertificate-example"></a>

```
FGameLiftGetComputeCertificateOutcome FGameLiftServerSDKModule::GetComputeCertificate()
{
  #if WITH_GAMELIFT
  auto outcome = Aws::GameLift::Server::GetComputeCertificate();
  if (outcome.IsSuccess()) {
    auto& outres = outcome.GetResult();
    FGameLiftGetComputeCertificateResult result;
    result.m_certificate_path = UTF8_TO_TCHAR(outres.GetCertificatePath());
    result.m_computeName = UTF8_TO_TCHAR(outres.GetComputeName());
    return FGameLiftGetComputeCertificateOutcome(result);
  }
  else {
    return FGameLiftGetComputeCertificateOutcome(FGameLiftError(outcome.GetError()));
  }
  #else
  return FGameLiftGetComputeCertificateOutcome(FGameLiftGetComputeCertificateResult());
  #endif
}
```

## GetFleetRoleCredentials()
<a name="integration-server-sdk5-unreal-getfleetrolecredentials"></a>

Recupera las credenciales del rol de IAM que autorizan a Amazon GameLift Servers a interactuar con otros Servicios de AWS. Para obtener más información, consulte [Conecta tu servidor de juegos Amazon GameLift Servers alojado a otros AWS recursos](gamelift-sdk-server-resources.md).

### Sintaxis
<a name="integration-server-sdk5-unreal-getfleetrolecredentials-syntax"></a>

```
FGameLiftGetFleetRoleCredentialsOutcome FGameLiftServerSDKModule::GetFleetRoleCredentials(const FGameLiftGetFleetRoleCredentialsRequest &request)
```

### Parameters
<a name="integration-server-sdk5-unreal-getfleetrolecredentials-parameters"></a>

[FGameLiftGetFleetRoleCredentialsRequest](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-getfleetrolecredentialsrequest)

### Valor devuelto
<a name="integration-server-sdk5-unreal-getfleetrolecredentials-return"></a>

Devuelve un objeto [FGameLiftGetFleetRoleCredentialsOutcome](integration-server-sdk5-unreal-datatypes.md#integration-server-sdk5-unreal-dataypes-getfleetrolecredentialsoutcome).

### Ejemplo
<a name="integration-server-sdk5-unreal-getfleetrolecredentials-example"></a>

```
FGameLiftGetFleetRoleCredentialsOutcome FGameLiftServerSDKModule::GetFleetRoleCredentials(const FGameLiftGetFleetRoleCredentialsRequest &request)
{
  #if WITH_GAMELIFT
  Aws::GameLift::Server::Model::GetFleetRoleCredentialsRequest sdkRequest;
  sdkRequest.SetRoleArn(TCHAR_TO_UTF8(*request.m_roleArn));
  sdkRequest.SetRoleSessionName(TCHAR_TO_UTF8(*request.m_roleSessionName));

  auto outcome = Aws::GameLift::Server::GetFleetRoleCredentials(sdkRequest);

  if (outcome.IsSuccess()) {
    auto& outres = outcome.GetResult();
    FGameLiftGetFleetRoleCredentialsResult result;
    result.m_assumedUserRoleArn = UTF8_TO_TCHAR(outres.GetAssumedUserRoleArn());
    result.m_assumedRoleId = UTF8_TO_TCHAR(outres.GetAssumedRoleId());
    result.m_accessKeyId = UTF8_TO_TCHAR(outres.GetAccessKeyId());
    result.m_secretAccessKey = UTF8_TO_TCHAR(outres.GetSecretAccessKey());
    result.m_sessionToken = UTF8_TO_TCHAR(outres.GetSessionToken());
    result.m_expiration = FDateTime::FromUnixTimestamp(outres.GetExpiration());
    return FGameLiftGetFleetRoleCredentialsOutcome(result);
  }
  else {
    return FGameLiftGetFleetRoleCredentialsOutcome(FGameLiftError(outcome.GetError()));
  }
  #else
  return FGameLiftGetFleetRoleCredentialsOutcome(FGameLiftGetFleetRoleCredentialsResult());
  #endif
}
```

## Destroy()
<a name="integration-server-sdk5-unreal-ref-destroy"></a>

Libera de la memoria el SDK del servidor de juegos de Amazon GameLift Servers. Como práctica recomendada, llame a este método después de `ProcessEnding()` y antes de finalizar el proceso. Si utiliza una flota de Anywhere y no va a finalizar los procesos del servidor después de cada sesión de juego, llame a `Destroy()` y, a continuación, a `InitSDK()` para reinicializar antes de informar a Amazon GameLift Servers de que el proceso está listo para organizar una sesión de juego con `ProcessReady()`.

### Sintaxis
<a name="integration-server-sdk5-unreal-ref-destroy-syntax"></a>

```
FGameLiftGenericOutcome Destroy();
```

### Parameters
<a name="integration-server-sdk5-unreal-ref-destroy-parameter"></a>

No hay parámetros.

### Valor devuelto
<a name="integration-server-sdk5-unreal-ref-destroy-return"></a>

Devuelve un resultado genérico correcto o erróneo con un mensaje de error.

### Ejemplo
<a name="integration-server-sdk5-unreal-ref-destroy-example"></a>

```
// 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);
    }
}
```