Amazon GameLift サーバー SDK (Unreal) 5.x リファレンス: アクション - Amazon GameLift

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon GameLift サーバー SDK (Unreal) 5.x リファレンス: アクション

この Amazon GameLift Unreal サーバー SDK リファレンスを使用すると、Amazon で使用するマルチプレイヤーゲームを準備するのに役立ちます GameLift。統合プロセスの詳細については、「Amazon GameLift をゲームサーバーに追加する」を、Unreal SDK サーバープラグインの使用方法については「Amazon GameLift を Unreal Engine プロジェクトに統合する」を参照してください。

注記

このトピックでは、Unreal Engine 用に構築するときに使用できる Amazon GameLift C++ API について説明します。特に、このドキュメントは -DBUILD_FOR_UNREAL=1 オプションを使用してコンパイルするコードが対象です。

GetSdkVersion()

サーバープロセスに組み込まれた SDK の現在のバージョン番号を返します。

Syntax

FGameLiftStringOutcome GetSdkVersion();

戻り値

成功した場合、FGameLiftStringOutcome オブジェクトとして現在の SDK バージョンを返します。返されるオブジェクトには、バージョン番号が含まれます (例: 5.0.0)。成功しなかった場合、エラーメッセージを返します。

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

InitSDK()

マネージド EC2 フリートの Amazon GameLift SDK を初期化します。Amazon に関連する他の初期化 GameLift が発生する前に、起動時にこのメソッドを呼び出します。このメソッドは、ホスト環境からサーバーパラメータを読み取り、サーバーと Amazon GameLift サービス間の通信を設定します。

Syntax

FGameLiftGenericOutcome InitSDK()

戻り値

成功した場合は、サーバープロセスが ProcessReady() を呼び出す準備ができていることを示す InitSdkOutcome オブジェクトを返します。

//Call InitSDK to establish a local connection with the GameLift agent to enable further communication. FGameLiftGenericOutcome initSdkOutcome = gameLiftSdkModule->InitSDK();

InitSDK()

Anywhere フリートの Amazon GameLift SDK を初期化します。Amazon に関連する他の初期化 GameLift が発生する前に、起動時にこのメソッドを呼び出します。この方法では、サーバーと Amazon GameLift サービス間の通信を設定するには、明示的なサーバーパラメータが必要です。

Syntax

FGameLiftGenericOutcome InitSDK(serverParameters)

パラメータ

FServerParameters

Amazon GameLift Anywhere フリートでゲームサーバーを初期化するには、次の情報を使用して ServerParameters オブジェクトを作成します。

  • ゲームサーバーへの接続 WebSocket に使用される の URL。

  • ゲームサーバーのホストに使用されるプロセスの ID。

  • ゲームサーバープロセスをホスティングするコンピューティングの ID。

  • Amazon コンピューティングを含む Amazon GameLift Anywhere GameLift フリートの ID。

  • Amazon GameLift オペレーションによって生成された認証トークン。

戻り値

成功した場合は、サーバープロセスが ProcessReady() を呼び出す準備ができていることを示す InitSdkOutcome オブジェクトを返します。

注記

Anywhere フリートにデプロイされたゲームビルドに対して InitSDK() への呼び出しが失敗する場合は、ビルドリソースの作成時に使用した ServerSdkVersion パラメータを確認してください。この値は、使用中のサーバー SDK バージョンに明示的に設定する必要があります。このパラメータのデフォルト値は 4.x で、互換性がありません。この問題を解決するには、新しいビルドを作成して新しいフリートにデプロイします。

//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 GameLift agent to enable further communication. FGameLiftGenericOutcome initSdkOutcome = gameLiftSdkModule->InitSDK(serverParameters);

ProcessReady()

サーバープロセス GameLift がゲームセッションをホストする準備ができたことを Amazon に通知します。InitSDK() を呼び出した後にこのメソッドを呼び出します このメソッドは、プロセスごとに 1 回だけ呼び出す必要があります。

Syntax

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

パラメータ

processParameters

サーバープロセスに関する以下の情報を伝える FProcessParameters オブジェクト。

  • Amazon GameLift サービスがサーバープロセスと通信するために呼び出すゲームサーバーコードに実装されているコールバックメソッドの名前。

  • サーバープロセスがリッスンするポートの番号。

  • Amazon がキャプチャして保存するゲームセッション固有のファイル GameLift へのパス。

戻り値

正常またはエラーメッセージを伴うエラーの、一般的な結果を返します。

この例では、ProcessReady() 呼び出しと委任関数の実装の両方を示します。

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

ProcessEnding()

サーバープロセスが終了中であることを Amazon に通知 GameLift します。他のすべてのクリーンアップタスク (アクティブなゲームセッションのシャットダウンを含む) の後、およびプロセスを終了する前に、このメソッドを呼び出します。ProcessEnding() の結果に応じて、プロセスは成功 (0) またはエラー (-1) で終了し、フリートイベントを生成します。プロセスがエラーで終了した場合、生成されるフリートイベントは SERVER_PROCESS_TERMINATED_UNHEALTHY です。

Syntax

FGameLiftGenericOutcome ProcessEnding()

戻り値

正常またはエラーメッセージを伴うエラーの、一般的な結果を返します。

//OnProcessTerminate callback. GameLift 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 GameLift we are indeed going to shutdown. params->OnTerminate.BindLambda([=]() { UE_LOG(GameServerLog, Log, TEXT("Game Server Process is terminating")); gameLiftSdkModule->ProcessEnding(); });

ActivateGameSession()

サーバープロセスがゲームセッションをアクティブ化し、プレイヤー接続を受信する準備ができた GameLift ことを Amazon に通知します。このアクションは、すべてのゲームセッションの初期化の後、onStartGameSession() コールバック関数の一部として呼び出されます。

Syntax

FGameLiftGenericOutcome ActivateGameSession()

戻り値

正常またはエラーメッセージを伴うエラーの、一般的な結果を返します。

この例では、onStartGameSession() 委任関数の一部として呼び出された ActivateGameSession() を示しています。

//When a game session is created, GameLift 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()

現在のゲームセッションの機能を更新し、新しいプレイヤーセッションを承諾します。ゲームセッションは、新しいプレイヤーセッションをすべて受け入れるか拒否するかを設定できます。

Syntax

FGameLiftGenericOutcome UpdatePlayerSessionCreationPolicy(EPlayerSessionCreationPolicy policy)

パラメータ

playerCreationSessionポリシー

ゲームセッションで新しいプレイヤーを承諾するかどうかを示す文字列値。

有効な値を次に示します。

  • ACCEPT_ALL – すべての新しいプレイヤーセッションを承諾します。

  • DENY_ALL – すべての新しいプレイヤーセッションを拒否します。

戻り値

正常またはエラーメッセージを伴うエラーの、一般的な結果を返します。

この例は、現在のゲームセッションの参加ポリシーを、すべてのプレイヤーを受け入れるように設定します。

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

GetGameSessionId()

アクティブなサーバープロセスにホストされたゲームセッションの ID を取得します。

ゲームセッションでアクティブ化されていないアイドル状態のプロセスの場合、呼び出しは FGameLiftError を返します。

Syntax

FGameLiftStringOutcome GetGameSessionId()

パラメータ

このアクションにはパラメータがありません。

戻り値

成功した場合、ゲームセッション ID を FGameLiftStringOutcome オブジェクトとして返します。成功しなかった場合、エラーメッセージを返します。

ゲームセッションでまだアクティブ化されていないアイドルプロセスの場合、呼び出しは Success=True および GameSessionId="" を返します。

//When a game session is created, GameLift 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()

終了時刻が判る場合に、サーバープロセスがシャットダウンを予定している時刻を返します。サーバープロセスは、Amazon から onProcessTerminate()コールバックを受信した後にアクションを実行します GameLift。Amazon onProcessTerminate() は、次の理由で を GameLift 呼び出します。

  • サーバープロセスが正常性の低下を報告した場合、または Amazon に応答しなかった場合 GameLift。

  • スケールダウンイベント中にインスタンスを終了する場合。

  • スポットインスタンスの中断によりインスタンスが終了した場合。

Syntax

AwsDateTimeOutcome GetTerminationTime()

戻り値

成功した場合、終了時刻を AwsDateTimeOutcome オブジェクトとして返します。値は終了時間で、0001 00:00:00 以降の経過ティックで表現されます。例えば、日付時刻の値 2020-09-13 12:26:40 -000Z は、637355968000000000 ティックに等しくなります。終了時間がない場合は、エラーメッセージを返します。

プロセスが ProcessParameters.OnProcessTerminate() コールバックを受信していない場合、エラーメッセージが返されます。サーバープロセスのシャットダウンの詳細については、「サーバープロセスのシャットダウン通知に応答する」を参照してください。

AwsDateTimeOutcome TermTimeOutcome = gameLiftSdkModule->GetTerminationTime();

AcceptPlayerSession()

指定されたプレイヤーセッション ID を持つプレイヤーがサーバープロセスに接続し、検証が必要である GameLift ことを Amazon に通知します。Amazon は、プレイヤーセッション ID が有効 GameLift であることを確認します。プレイヤーセッションが検証されると、Amazon はプレイヤースロットのステータスを RESERVED から ACTIVE GameLift に変更します。

Syntax

FGameLiftGenericOutcome AcceptPlayerSession(const FString& playerSessionId)

パラメータ

playerSessionId

新しいプレイヤーセッションの作成 GameLift 時に Amazon によって発行される一意の ID。

戻り値

正常またはエラーメッセージを伴うエラーの、一般的な結果を返します。

この例では、無効なプレイヤーセッション ID の検証と拒否を含む接続リクエストを処理します。

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()

プレイヤーがサーバープロセスから切断された GameLift ことを Amazon に通知します。それに応じて、Amazon GameLift はプレイヤースロットを利用可能に変更します。

Syntax

FGameLiftGenericOutcome RemovePlayerSession(const FString& playerSessionId)

パラメータ

playerSessionId

新しいプレイヤーセッションの作成 GameLift 時に Amazon によって発行される一意の ID。

戻り値

正常またはエラーメッセージを伴うエラーの、一般的な結果を返します。

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()

設定、セッションメタデータ、プレイヤーデータを含む、プレイヤーセッションデータを取得します。このメソッドを使用して、以下に関する情報を取得します。

  • シングルプレイヤーセッション

  • ゲームセッションのすべてのプレイヤーセッション

  • 1 つのプレイヤー ID に関連付けられているすべてのプレイヤーセッション

Syntax

FGameLiftDescribePlayerSessionsOutcome DescribePlayerSessions(const FGameLiftDescribePlayerSessionsRequest &describePlayerSessionsRequest)

パラメータ

FGameLiftDescribePlayerSessionsRequest

取得するプレイヤーセッションを記述する FGameLiftDescribePlayerSessionsRequest オブジェクト。

戻り値

成功した場合は、リクエストのパラメータに適合したプレイヤーセッションオブジェクトのセットを含む FGameLiftDescribePlayerSessionsOutcome オブジェクトを返します。

この例は、指定したゲームセッションにアクティブに接続されているすべてのプレイヤーセッションのリクエストします。を省略NextTokenし、Limit 値を 10 に設定することで、Amazon はリクエストに一致する最初の 10 個のプレイヤーセッションレコード GameLift を返します。

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()

FlexMatch で作成されたゲームセッションの空きスロット用に新規プレイヤーを検索するリクエストを送信します。詳細については、FlexMatch 「バックフィル機能」を参照してください。

このアクションは非同期です。新しいプレイヤーがマッチングされると、Amazon はコールバック関数 を使用して更新されたマッチメーカーデータを GameLift 配信しますOnUpdateGameSession()

サーバープロセスではアクティブなマッチバックフィルリクエストは一度に 1 つだけです。新しいリクエストを送信するには、まず StopMatchBackfill() を呼び出して元のリクエストをキャンセルする必要があります。

Syntax

FGameLiftStringOutcome StartMatchBackfill (FStartMatchBackfillRequest &startBackfillRequest);

パラメータ

FStartMatchBackfillRequest

次の情報を伝える StartMatchBackfillRequest オブジェクト。

  • バックフィルリクエストに割り当てるチケット ID。この情報はオプションです。ID が指定されていない場合、Amazon GameLift は ID を生成します。

  • リクエストを送信するマッチメーカー。完全な設定 ARN が必要です。この値はゲームセッションのマッチメーカーデータに含まれています。

  • バックフィルするゲームセッションの ID。

  • ゲームセッションの現在のプレイヤーに利用可能なマッチメーキングデータ。

戻り値

StartMatchBackfillOutcome オブジェクトを、マッチバックフィルチケット ID またはエラーメッセージを伴うエラーとともに返します。

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()

アクティブなマッチバックフィルリクエストをキャンセルします。詳細については、FlexMatch「バックフィル機能」を参照してください。

Syntax

FGameLiftGenericOutcome StopMatchBackfill (FStopMatchBackfillRequest &stopBackfillRequest);

パラメータ

FStopMatchBackfillRequest

キャンセルするマッチメーキングチケットを識別する StopMatchBackfillRequest オブジェクト:

  • バックフィルリクエストに割り当てるチケット ID。

  • バックフィルリクエストが送信されたマッチメーカー。

  • バックフィルリクエストに関連付けられたゲームセッション。

戻り値

正常またはエラーメッセージを伴うエラーの、一般的な結果を返します。

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()

Amazon コンピューティングリソースと Amazon GameLift Anywhere 間のネットワーク接続の暗号化に使用される TLS 証明書へのパスを取得します GameLift。コンピューティングデバイスを Amazon GameLift Anywhere フリートに登録するときに、証明書パスを使用できます。詳細については、「」を参照してくださいRegisterCompute

Syntax

FGameLiftGetComputeCertificateOutcome FGameLiftServerSDKModule::GetComputeCertificate()

戻り値

以下を含む GetComputeCertificateResponse オブジェクトを返します。

  • CertificatePath: コンピューティングリソースの TLS 証明書へのパス。

  • HostName: コンピューティングリソースのホスト名。

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()

Amazon が他の とやり取り GameLift することを許可する IAM ロール認証情報を取得しますAWS のサービス。詳細については、「フリートの他の AWS リソースと通信する」を参照してください。

構文

FGameLiftGetFleetRoleCredentialsOutcome FGameLiftServerSDKModule::GetFleetRoleCredentials(const FGameLiftGetFleetRoleCredentialsRequest &request)

パラメータ

FGameLiftGetFleetRoleCredentialsRequest

戻り値

FGameLiftGetFleetRoleCredentialsOutcome オブジェクトを返します。

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 }