Lesson 35 - Get Compute Auth Token Working

This commit is contained in:
Norman Lansing
2026-02-28 12:32:28 -05:00
parent 1d477ee42a
commit 4fde462bce
7743 changed files with 1397833 additions and 18 deletions

View File

@@ -2,6 +2,8 @@
#include "Game/ShooterGameMode.h"
#include "DSP/BufferDiagnostics.h"
#include "UObject/ConstructorHelpers.h"
#include "Kismet/GameplayStatics.h"
@@ -34,18 +36,19 @@ void AShooterGameMode::SetServerParameters(TSharedPtr<FServerParameters> OutServ
FString GameLiftAnywhereAuthToken = "";
if (FParse::Value(FCommandLine::Get(), TEXT("-authtoken="), GameLiftAnywhereAuthToken))
{
OutServerParameters->m_authToken = TCHAR_TO_UTF8(*GameLiftAnywhereAuthToken);
OutServerParameters->m_authToken = GameLiftAnywhereAuthToken;
}
else
{
UE_LOG(LogShooterGameMode, Warning, TEXT("-authtoken not found in command line."));
}
// The Host/compute-name of the GameLift Anywhere instance
FString GameLiftAnywhereHostId = "";
if (FParse::Value(FCommandLine::Get(), TEXT("-hostid="), GameLiftAnywhereHostId))
{
OutServerParameters->m_hostId = TCHAR_TO_UTF8(*GameLiftAnywhereHostId);
OutServerParameters->m_hostId = GameLiftAnywhereHostId;
}
else
{
@@ -56,7 +59,7 @@ void AShooterGameMode::SetServerParameters(TSharedPtr<FServerParameters> OutServ
FString GameLiftAnywhereFleetId = "";
if (FParse::Value(FCommandLine::Get(), TEXT("-fleetid="), GameLiftAnywhereFleetId))
{
OutServerParameters->m_fleetId = TCHAR_TO_UTF8(*GameLiftAnywhereFleetId);
OutServerParameters->m_fleetId = GameLiftAnywhereFleetId;
}
else
{
@@ -67,7 +70,7 @@ void AShooterGameMode::SetServerParameters(TSharedPtr<FServerParameters> OutServ
FString GameLiftAnywhereWebSocketUrl = "";
if (FParse::Value(FCommandLine::Get(), TEXT("-websocketurl="), GameLiftAnywhereWebSocketUrl))
{
OutServerParameters->m_webSocketUrl = TCHAR_TO_UTF8(*GameLiftAnywhereWebSocketUrl);
OutServerParameters->m_webSocketUrl = GameLiftAnywhereWebSocketUrl;
}
else
{
@@ -75,7 +78,13 @@ void AShooterGameMode::SetServerParameters(TSharedPtr<FServerParameters> OutServ
}
// The PID of the running process
OutServerParameters->m_processId = FString::Printf(TEXT("%d"), GetCurrentProcessId());
#if PLATFORM_WINDOWS
OutServerParameters->m_processId = FString::Printf(TEXT("%d"), GetCurrentProcessId());
#else
OutServerParameters->m_processId = FString::Printf(TEXT("%d"), FGenericPlatformProcess::GetCurrentProcessId());
#endif
}
void AShooterGameMode::LogServerParameters(TSharedPtr<FServerParameters> ServerParameters)
@@ -124,6 +133,7 @@ void AShooterGameMode::InitGameLift()
#if WITH_GAMELIFT
UE_LOG(LogShooterGameMode, Log, TEXT("Calling InitGameLift"));
FProcessParameters LocalProcessParameters;
// Getting the module first.
FGameLiftServerSDKModule* GameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));
@@ -143,8 +153,11 @@ void AShooterGameMode::InitGameLift()
// If GameLift Anywhere is enabled, parse command line arguments and pass them in the ServerParameters object.
SetServerParameters(MakeShared<FServerParameters>(ServerParameters));
LogServerParameters(MakeShared<FServerParameters>(ServerParameters));
TSharedPtr<FServerParameters> ServerParams = MakeShared<FServerParameters>(ServerParameters);
SetServerParameters(ServerParams);
LogServerParameters(ServerParams);
ServerParameters = *ServerParams;
}
UE_LOG(LogShooterGameMode, Log, TEXT("Initializing the GameLift Server..."));
@@ -182,8 +195,8 @@ void AShooterGameMode::InitGameLift()
UE_LOG(LogShooterGameMode, Log, TEXT("GameSession Initializing: %s"), *GameSessionId);
GameLiftSdkModule->ActivateGameSession();
};
ProcessParameters->OnStartGameSession.BindLambda(OnGameSession);
LocalProcessParameters.OnStartGameSession.BindLambda(OnGameSession);
auto OnTerminate = [=]()
{
@@ -191,7 +204,7 @@ void AShooterGameMode::InitGameLift()
GameLiftSdkModule->ProcessEnding();
};
ProcessParameters->OnTerminate.BindLambda(OnTerminate);
LocalProcessParameters.OnTerminate.BindLambda(OnTerminate);
auto OnHealthCheck = [=]()
{
@@ -200,13 +213,12 @@ void AShooterGameMode::InitGameLift()
};
ProcessParameters->OnHealthCheck.BindLambda(OnHealthCheck);
LocalProcessParameters.OnHealthCheck.BindLambda(OnHealthCheck);
int32 Port = FURL::UrlConfig.DefaultPort;
ParseCommandLinePort(Port);
ProcessParameters->port = Port;
LocalProcessParameters.port = Port;
// Here, the game server tells GameLift where to find game session Log files.
// At the end of a game session, GameLift uploads everything in the specified
@@ -214,12 +226,14 @@ void AShooterGameMode::InitGameLift()
TArray<FString> LogFiles;
LogFiles.Add(TEXT("FPSTemplate/Saved/Logs/FPSTemplate.log"));
ProcessParameters->logParameters = LogFiles;
UE_LOG(LogShooterGameMode, Log, TEXT("Before Adding Log Files"));
LocalProcessParameters.logParameters = LogFiles;
// The game server calls ProcessReady() to tell Amazon GameLift Servers it's ready to host game sessions.
UE_LOG(LogShooterGameMode, Log, TEXT("Calling Process Ready..."));
FGameLiftGenericOutcome ProcessReadyOutcome = GameLiftSdkModule->ProcessReady(*ProcessParameters);
FGameLiftGenericOutcome ProcessReadyOutcome = GameLiftSdkModule->ProcessReady(LocalProcessParameters);
if (ProcessReadyOutcome.IsSuccess())
{