From 2ec989d34a786dc662cf4b6f1b325f5395530606 Mon Sep 17 00:00:00 2001 From: Norman Lansing Date: Sun, 15 Mar 2026 08:53:18 -0400 Subject: [PATCH] Lesson 55 - Dedicated Servers Game Mode --- Config/DefaultEngine.ini | 5 +- .../Blueprints/Game/BP_ShooterGameMode.uasset | Bin 22253 -> 0 bytes .../Game/BP_ShooterGameModeBase.uasset | Bin 0 -> 21989 bytes Content/ThirdPerson/Maps/ThirdPersonMap.umap | Bin 22602 -> 21855 bytes FPSTemplate.uproject | 4 - .../DedicatedServers.Build.cs | 15 +- .../Private/Game/DS_GameMode.cpp} | 145 ++++++++---------- .../Private/GameLift/GameLiftClp.cpp | 0 .../Private/GameLiftClpTypes.cpp | 0 .../Public/Game/DS_GameMode.h} | 22 +-- .../Public/GameLift/GameLiftClp.h | 0 .../Public/GameLiftClpTypes.h | 0 Source/FPSTemplate/FPSTemplate.Build.cs | 12 -- .../Public/Game/ShooterGameModeBase.h | 4 +- 14 files changed, 93 insertions(+), 114 deletions(-) delete mode 100644 Content/Blueprints/Game/BP_ShooterGameMode.uasset create mode 100644 Content/Blueprints/Game/BP_ShooterGameModeBase.uasset rename Source/{FPSTemplate/Private/Game/ShooterGameMode.cpp => DedicatedServers/Private/Game/DS_GameMode.cpp} (65%) rename Source/{FPSTemplate => DedicatedServers}/Private/GameLift/GameLiftClp.cpp (100%) rename Source/{FPSTemplate => DedicatedServers}/Private/GameLiftClpTypes.cpp (100%) rename Source/{FPSTemplate/Public/Game/ShooterGameMode.h => DedicatedServers/Public/Game/DS_GameMode.h} (76%) rename Source/{FPSTemplate => DedicatedServers}/Public/GameLift/GameLiftClp.h (100%) rename Source/{FPSTemplate => DedicatedServers}/Public/GameLiftClpTypes.h (100%) diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 9f9551ab..e9a9348e 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -4,7 +4,7 @@ CommonUI.Debug.CheckGameViewportClientValid=0 [/Script/EngineSettings.GameMapsSettings] GameDefaultMap=/Game/ThirdPerson/Maps/ThirdPersonMap.ThirdPersonMap EditorStartupMap=/Game/ThirdPerson/Maps/ThirdPersonMap.ThirdPersonMap -GlobalDefaultGameMode=/Game/Blueprints/Game/BP_ShooterGameMode.BP_ShooterGameMode_C +GlobalDefaultGameMode=/Game/Blueprints/Game/BP_ShooterGameModeBase.BP_ShooterGameModeBase_C ServerDefaultMap=/Game/ThirdPerson/Maps/ThirdPersonMap.ThirdPersonMap [/Script/WindowsTargetPlatform.WindowsTargetSettings] @@ -185,4 +185,5 @@ DefaultPort=7777 [CoreRedirects] +EnumRedirects=(OldName="/Script/FPSTemplate.EvalidationError",NewName="/Script/FPSTemplate.EValidationError") +FunctionRedirects=(OldName="/Script/FPSTemplate.GameLiftValidators.LogValidataErrorMessage",NewName="/Script/FPSTemplate.GameLiftValidators.LogValidationErrorMessage") -;+PropertyRedirects=(OldName="/Script/FPSTemplate.CommandLineArgs.Arguments",NewName="/Script/FPSTemplate.CommandLineArgs.CmdArguments") \ No newline at end of file +;+PropertyRedirects=(OldName="/Script/FPSTemplate.CommandLineArgs.Arguments",NewName="/Script/FPSTemplate.CommandLineArgs.CmdArguments") + diff --git a/Content/Blueprints/Game/BP_ShooterGameMode.uasset b/Content/Blueprints/Game/BP_ShooterGameMode.uasset deleted file mode 100644 index fc6bb9b84f96bd7880a96356c52ace8090bcf236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22253 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 b4?7pI;ZOIvj$Qqtx+dkfcSGQ#*=zp?9u_o% delta 6266 zcmeHLdr(y86~7-Y$Rdj@0=o+fECS2&47j_zAG?b@L{U~&Yiw1PxQbE12Z%Z`#J5#y zz@yce7&Xm|6YETMXyfRp!PF+LwQZcH=Fy2t>#H^|O-z%tk)Ct+-sQ4z^Z2LJnfB~_ z_xtYoo!>dvvUKP`Cb1>lXdgKJC`~&f24Cmfm_sAhY3W_^6JDZcGf_ch2z$uB4!r21E%-( z2UIDv;dnpMv%uZHq^;V$)Kk|w-^01=XFu#s9X&w-e+bw1K00PJgC|1|_U5V1vfMPZ ze}pU_aV%-~EL*XtrER5fUq7#*xwW;;v%=?S?{7~B!W5RSP?Y2s!6#vh;-Zl57-l%H zf?IP$^KEep34qKQSVY0$<7ES+N2aP`g}b-0C$@pzJT6Ma;{@a(BAa=HhKGcnmgHSTx<*9a zK?G!x-6JBD!3J4mqbw3Di^RzyTV#<8S!9PS(j$vh$|6;=NWCoLl11FI$X;1wpDgm6 zEV5b_IVg)9l10{xh`fdKV5=;0m`B7py3;!mxvR)|dPL+sM7oC{l>&$6+YbqWQ=0I= zYj}5nw-aai9>I>PwS*{r2<+D+MEUL{c2D@(-IcL>QZ~|4vIvt!0%Vc(giIBCt3${% z1Z%OqPLll>*a!Eph^l9W2JJmgp^XQDIv^fOb(uywYD81oMmAy*JLRAN%p>y{G!KRo zI@5?0agP!y4~J6zA&EkXQzVK)r{>p1J);Kqs6m?hUSO>?{@ftyAujv zQha1UafMHHIl&S`EEg8BFC79iXrj;TUcAZpfg~47+l__tpkQh&BsGH+8nKZm)ayja zrSU*{bSUM0Nt76b_hJzf>mqxU?KQr{7!LAC6mi8}^D?;TNj{2QXUP7up#HmGw0)=- zqrEEFJQ$>&FqmMzJv@550OevW_SVT-j9`R4iI(VR1TXZM;u83RVDCC)<4wl9lECCl zoC7rDB56IKJUN-CEE=C<{F}s_hHEtz%9A39)Lqkk5&AL09SKE?X0*D+UJ(~qW`mDH z!*$z_atJA66ndQ{DIBDnPcj*ANhmZap2s3mUK1!4Gkj4_7!tDt?F|W&7S3S_Q_N2} z%f~#NoRdOtX`;~5A~SJ1k=L)#r3x7uP^E+xkR_!e&P}=}A>DOJaMBT*^!=zu2YNON zuSu{c#Tqci2$xb4f;9N@`lT7}r8Kf%fGsT^U(J^rV^{}t8Fl*Rg?78WvevV-u({gR zl(TsGTB$O;5lJUYDw=;(!-g`lAW8I zos*Z9o1dLy?d{9x3Q9?*`EX}p#Tz&|Xl_v9X3|9vI;nA*L+VgKQV0gw5-D4?u3fiZZ~Vqk&rz+z^6tTOT$FC;OH-Xs9hUKrX} z%cexZZfh=^$0vE!s#dNNI60mj?v~2gr(gFh7}rMcK%e> z2>k`g%AxwtWc0fVMzU`i(Z|KYk!%gHph(ceJ4HH{iEo3E>~VTH)xU7|(DqHDgRJ5l z?9I8wS<3NV73y{ur?D_NS8QVZ!-K6R6m7w0 zeqFK?auT-oH! zeK7$S7N^wgx6Lt~?(Uhh$A-ryFH%QCc0K{8N()a+(X(Xus6nfGaG|R*Rls!cv0eN4 ze=a3hHpTQ`o<`?)?u`v^Km7Hp)t$ELGpBZJ>o{U-c_nuLGc&e+w*kTdq1jPnjx=ZV zah&b)rAtn%y+Q-03$^L1hKyU{H)cxRo%oIO#5X8@A#j`ee+Xd&Xn$Z|(@`t~x~ENz zr@b{npbXn*7w}sIZPm2BljtC^K27mgdfWNP9v8wb@~UyuRy&hu+X(671EV^PKT+s| zjNkQ?b%Nf-b?HWtQ~>6sSP4F;CY zr;I5LKyHJ9`U>VWKYBSyK*I4`s*&* J((kxB{tYN=r>p<~ diff --git a/FPSTemplate.uproject b/FPSTemplate.uproject index 5607a620..e4b4dd27 100644 --- a/FPSTemplate.uproject +++ b/FPSTemplate.uproject @@ -58,10 +58,6 @@ { "Name": "PerforceSourceControl", "Enabled": false - }, - { - "Name": "GameLiftPlugin", - "Enabled": true } ] } \ No newline at end of file diff --git a/Source/DedicatedServers/DedicatedServers.Build.cs b/Source/DedicatedServers/DedicatedServers.Build.cs index 03573b13..f0aa3850 100644 --- a/Source/DedicatedServers/DedicatedServers.Build.cs +++ b/Source/DedicatedServers/DedicatedServers.Build.cs @@ -20,7 +20,20 @@ public class DedicatedServers : ModuleRules PrivateDependencyModuleNames.AddRange(new string[] { "Slate", - "SlateCore" + "SlateCore", + "OpenSSL" }); + + // Adds in the plugin for GameLiftServerSDK if it is the server build. + + if (Target.Type == TargetType.Server) + { + PublicDependencyModuleNames.Add("GameLiftServerSDK"); + } + else + { + PublicDefinitions.Add("WITH_GAMELIFT=0"); + } + bEnableExceptions = true; } } diff --git a/Source/FPSTemplate/Private/Game/ShooterGameMode.cpp b/Source/DedicatedServers/Private/Game/DS_GameMode.cpp similarity index 65% rename from Source/FPSTemplate/Private/Game/ShooterGameMode.cpp rename to Source/DedicatedServers/Private/Game/DS_GameMode.cpp index 1aba5edb..7100ae8a 100644 --- a/Source/FPSTemplate/Private/Game/ShooterGameMode.cpp +++ b/Source/DedicatedServers/Private/Game/DS_GameMode.cpp @@ -1,33 +1,21 @@ // Fill out your copyright notice in the Description page of Project Settings. -#include "Game/ShooterGameMode.h" -#include "GenericPlatform/GenericPlatformMisc.h" -#include "Containers/UnrealString.h" -#include "GameLiftClpTypes.h" -#include "GameLift/GameLiftClp.h" + +#include "DedicatedServers/Public/Game/DS_GameMode.h" #include "openssl/sha.h" +#include "GameLift/GameLiftClp.h" +#if WITH_GAMELIFT #include "GameLiftServerSDK.h" -#include "GameLiftServerSDKModels.h" +#endif +DEFINE_LOG_CATEGORY(LogDS_GameMode); - -DEFINE_LOG_CATEGORY(LogShooterGameMode); - -// Function implementations. - -AShooterGameMode::AShooterGameMode() -{ -} - -void AShooterGameMode::BeginPlay() +void ADS_GameMode::BeginPlay() { Super::BeginPlay(); -#if WITH_GAMELIFT - InitGameLift(); -#endif } -void AShooterGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) +void ADS_GameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) { Super::InitGame(MapName, Options, ErrorMessage); CachedCommandLine = FCommandLine::Get(); @@ -35,27 +23,27 @@ void AShooterGameMode::InitGame(const FString& MapName, const FString& Options, const FPortResult PortResult = cmdlineparser::details::GetConfiguredOrDefaultPort(CachedCommandLine, TEXT("port"));; if (PortResult.bUsedDefaultPort) { - UE_LOGFMT (LogShooterGameMode, Warning, "{0}", PortResult.WarningMessage); + UE_LOGFMT (LogDS_GameMode, Warning, "{0}", PortResult.WarningMessage); } GameLiftConfig.ServerPort = PortResult.Port; if (FParse::Param(*CachedCommandLine, TEXT("glAnywhereFleet"))) { - UE_LOGFMT(LogShooterGameMode, Log, "Fleet type: Anywhere"); + UE_LOGFMT(LogDS_GameMode, Log, "Fleet type: Anywhere"); GameLiftConfig.bIsAnywhereFleet = true; GameLiftConfig.bAllOptionsFound = GetAnywhereFleetParameters(CachedCommandLine); LogAnywhereFleetParameters(); } else { - UE_LOGFMT(LogShooterGameMode, Log, "Fleet type: EC2"); + UE_LOGFMT(LogDS_GameMode, Log, "Fleet type: EC2"); // TODO: EC2 configuration } } -FString AShooterGameMode::GetSHA256Hash(const FString& InString) +FString ADS_GameMode::GetSHA256Hash(const FString& InString) { - + if (InString.IsEmpty()) return TEXT("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); @@ -76,16 +64,16 @@ FString AShooterGameMode::GetSHA256Hash(const FString& InString) return Hash.ToString(); } -void AShooterGameMode::InitGameLift() +void ADS_GameMode::InitGameLift() { -#if WITH_GAMELIFT - UE_LOGFMT(LogShooterGameMode, Log, "Calling InitGameLift..."); + #if WITH_GAMELIFT + UE_LOGFMT(LogDS_GameMode, Log, "Calling InitGameLift..."); // Get the module first FGameLiftServerSDKModule* GameLiftSdkModule = &FModuleManager::LoadModuleChecked("GameLiftServerSDK"); FGameLiftGenericOutcome InitSdkOutcome; - UE_LOGFMT(LogShooterGameMode, Log, "Initializing the GameLift Server..."); + UE_LOGFMT(LogDS_GameMode, Log, "Initializing the GameLift Server..."); if (GameLiftConfig.bIsAnywhereFleet) { // Define the server parameters for an Anywhere fleet. These are not needed for a GameLift managed EC2 fleet. @@ -94,7 +82,7 @@ void AShooterGameMode::InitGameLift() uint32 PID = FPlatformProcess::GetCurrentProcessId(); FString PIDString = FString::FromInt(static_cast(PID)); - UE_LOGFMT(LogShooterGameMode, Log, "Configuring server parameters for Anywhere..."); + UE_LOGFMT(LogDS_GameMode, Log, "Configuring server parameters for Anywhere..."); // If AnywhereFleets are being used load the command line arguments parsed earlier. ServerParametersForAnywhere.m_webSocketUrl = TCHAR_TO_UTF8(*GameLiftConfig.WebSocketUrlResult.Value); ServerParametersForAnywhere.m_fleetId = TCHAR_TO_UTF8((*GameLiftConfig.FleetIdResult.Value)); @@ -113,17 +101,17 @@ void AShooterGameMode::InitGameLift() if (InitSdkOutcome.IsSuccess()) { - UE_LOG(LogShooterGameMode, SetColor, TEXT("%s"), COLOR_GREEN); - UE_LOG(LogShooterGameMode, Log, TEXT("GameLift InitSDK succeeded!")); - UE_LOG(LogShooterGameMode, SetColor, TEXT("%s"), COLOR_NONE); + UE_LOG(LogDS_GameMode, SetColor, TEXT("%s"), COLOR_GREEN); + UE_LOG(LogDS_GameMode, Log, TEXT("GameLift InitSDK succeeded!")); + UE_LOG(LogDS_GameMode, SetColor, TEXT("%s"), COLOR_NONE); } else { - UE_LOG(LogShooterGameMode, SetColor, TEXT("%s"), COLOR_RED); - UE_LOG(LogShooterGameMode, Log, TEXT("ERROR: InitSDK failed : (")); + UE_LOG(LogDS_GameMode, SetColor, TEXT("%s"), COLOR_RED); + UE_LOG(LogDS_GameMode, Log, TEXT("ERROR: InitSDK failed : (")); FGameLiftError GameLiftError = InitSdkOutcome.GetError(); - UE_LOG(LogShooterGameMode, Log, TEXT("ERROR: %s"), *GameLiftError.m_errorMessage); - UE_LOG(LogShooterGameMode, SetColor, TEXT("%s"), COLOR_NONE); + UE_LOG(LogDS_GameMode, Log, TEXT("ERROR: %s"), *GameLiftError.m_errorMessage); + UE_LOG(LogDS_GameMode, SetColor, TEXT("%s"), COLOR_NONE); return; } @@ -135,7 +123,7 @@ void AShooterGameMode::InitGameLift() ProcessParameters->OnStartGameSession.BindLambda([=](Aws::GameLift::Server::Model::GameSession InGameSession) { const FString GameSessionId = FString(InGameSession.GetGameSessionId()); - UE_LOG(LogShooterGameMode, Log, TEXT("GameSession Initializing: %s"), *GameSessionId); + UE_LOG(LogDS_GameMode, Log, TEXT("GameSession Initializing: %s"), *GameSessionId); GameLiftSdkModule->ActivateGameSession(); }); @@ -144,24 +132,24 @@ void AShooterGameMode::InitGameLift() //In this case, we simply tell Amazon GameLift Servers we are indeed going to shut down. ProcessParameters->OnTerminate.BindLambda([=]() { - UE_LOG(LogShooterGameMode, Log, TEXT("Game Server Process is terminating")); + UE_LOG(LogDS_GameMode, Log, TEXT("Game Server Process is terminating")); // 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(LogShooterGameMode, Log, TEXT("Server process ending successfully")); + UE_LOG(LogDS_GameMode, Log, TEXT("Server process ending successfully")); } else { if (!processEndingOutcome.IsSuccess()) { const FGameLiftError& error = processEndingOutcome.GetError(); - UE_LOG(LogShooterGameMode, Error, TEXT("ProcessEnding() failed. Error: %s"), + UE_LOG(LogDS_GameMode, 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(LogShooterGameMode, Error, TEXT("Destroy() failed. Error: %s"), + UE_LOG(LogDS_GameMode, Error, TEXT("Destroy() failed. Error: %s"), error.m_errorMessage.IsEmpty() ? TEXT("Unknown error") : *error.m_errorMessage); } } @@ -177,7 +165,7 @@ void AShooterGameMode::InitGameLift() //In this case, we're always healthy! ProcessParameters->OnHealthCheck.BindLambda([]() { - UE_LOG(LogShooterGameMode, Log, TEXT("Performing Health Check")); + UE_LOG(LogDS_GameMode, Log, TEXT("Performing Health Check")); return true; }); @@ -187,31 +175,31 @@ void AShooterGameMode::InitGameLift() Logfiles.Add(TEXT("FPSTemplate/Saved/Log/server.log")); ProcessParameters->logParameters = Logfiles; - UE_LOGFMT(LogShooterGameMode, Log, "Calling Process Ready..."); + UE_LOGFMT(LogDS_GameMode, Log, "Calling Process Ready..."); FGameLiftGenericOutcome ProcessReadyOutcome = GameLiftSdkModule->ProcessReady(*ProcessParameters); if (ProcessReadyOutcome.IsSuccess()) { - UE_LOG(LogShooterGameMode, SetColor, TEXT("%s"), COLOR_GREEN); - UE_LOG(LogShooterGameMode, Log, TEXT("Process Ready!")); - UE_LOG(LogShooterGameMode, SetColor, TEXT("%s"), COLOR_NONE); + UE_LOG(LogDS_GameMode, SetColor, TEXT("%s"), COLOR_GREEN); + UE_LOG(LogDS_GameMode, Log, TEXT("Process Ready!")); + UE_LOG(LogDS_GameMode, SetColor, TEXT("%s"), COLOR_NONE); } else { - UE_LOG(LogShooterGameMode, SetColor, TEXT("%s"), COLOR_RED); - UE_LOG(LogShooterGameMode, Log, TEXT("ERROR: Process Ready Failed!")); + UE_LOG(LogDS_GameMode, SetColor, TEXT("%s"), COLOR_RED); + UE_LOG(LogDS_GameMode, Log, TEXT("ERROR: Process Ready Failed!")); FGameLiftError ProcessReadyError = ProcessReadyOutcome.GetError(); - UE_LOG(LogShooterGameMode, Log, TEXT("ERROR: %s"), *ProcessReadyError.m_errorMessage); - UE_LOG(LogShooterGameMode, SetColor, TEXT("%s"), COLOR_NONE); + UE_LOG(LogDS_GameMode, Log, TEXT("ERROR: %s"), *ProcessReadyError.m_errorMessage); + UE_LOG(LogDS_GameMode, SetColor, TEXT("%s"), COLOR_NONE); return; } - UE_LOGFMT(LogShooterGameMode, Log, "InitGameLift completed!"); + UE_LOGFMT(LogDS_GameMode, Log, "InitGameLift completed!"); #endif } -bool AShooterGameMode::GetAnywhereFleetParameters(const FString& CommandLineString) +bool ADS_GameMode::GetAnywhereFleetParameters(const FString& CommandLineString) { bool bAllAnywhereFleetParametersValid = true; GameLiftConfig.AuthTokenResult = cmdlineparser::GetValueOfToken(CommandLineString, cmdlineparser::details::EAvailableTokens::AuthToken); @@ -229,23 +217,23 @@ bool AShooterGameMode::GetAnywhereFleetParameters(const FString& CommandLineStri return bAllAnywhereFleetParametersValid; } -void AShooterGameMode::LogAnywhereFleetParameters() +void ADS_GameMode::LogAnywhereFleetParameters() { - // Lambda for getting the token name from token + // Lambda for getting the token name from token auto GetTokenName = [](const cmdlineparser::details::FParseResult& Result) -> FString { return cmdlineparser::details::CLI_TOKENS[static_cast(Result.Token)]; }; - UE_LOGFMT(LogShooterGameMode, Log, "Anywhere Fleet Parameters:"); + UE_LOGFMT(LogDS_GameMode, Log, "Anywhere Fleet Parameters:"); if (GameLiftConfig.AuthTokenResult.bIsValid) { - UE_LOGFMT(LogShooterGameMode, Log, "AuthToken: {0}", GetValueOrHash(GameLiftConfig.AuthTokenResult.Value)); + UE_LOGFMT(LogDS_GameMode, Log, "AuthToken: {0}", GetValueOrHash(GameLiftConfig.AuthTokenResult.Value)); } else { UE_LOGFMT( - LogShooterGameMode, + LogDS_GameMode, Error, "AuthToken: {0}", FString::Format( @@ -260,12 +248,12 @@ void AShooterGameMode::LogAnywhereFleetParameters() if (GameLiftConfig.FleetIdResult.bIsValid) { - UE_LOGFMT(LogShooterGameMode, Log, "FleetId: {0}", GameLiftConfig.FleetIdResult.Value); + UE_LOGFMT(LogDS_GameMode, Log, "FleetId: {0}", GameLiftConfig.FleetIdResult.Value); } else { UE_LOGFMT( - LogShooterGameMode, + LogDS_GameMode, Error, "FleetId: {0}", FString::Format( @@ -280,12 +268,12 @@ void AShooterGameMode::LogAnywhereFleetParameters() if (GameLiftConfig.HostIdResult.bIsValid) { - UE_LOGFMT(LogShooterGameMode, Log, "HostId: {0}", GameLiftConfig.HostIdResult.Value); + UE_LOGFMT(LogDS_GameMode, Log, "HostId: {0}", GameLiftConfig.HostIdResult.Value); } else { UE_LOGFMT( - LogShooterGameMode, + LogDS_GameMode, Error, "HostId: {0}", FString::Format( @@ -300,12 +288,12 @@ void AShooterGameMode::LogAnywhereFleetParameters() if (GameLiftConfig.WebSocketUrlResult.bIsValid) { - UE_LOGFMT(LogShooterGameMode, Log, "WebSocketUrl: {0}", GameLiftConfig.WebSocketUrlResult.Value); + UE_LOGFMT(LogDS_GameMode, Log, "WebSocketUrl: {0}", GameLiftConfig.WebSocketUrlResult.Value); } else { UE_LOGFMT( - LogShooterGameMode, + LogDS_GameMode, Error, "WebSocketUrl: {0}", FString::Format( @@ -318,49 +306,48 @@ void AShooterGameMode::LogAnywhereFleetParameters() ); } - UE_LOGFMT(LogShooterGameMode, Log, "Server Port: {0}", GameLiftConfig.ServerPort); + UE_LOGFMT(LogDS_GameMode, Log, "Server Port: {0}", GameLiftConfig.ServerPort); if (GameLiftConfig.bAllOptionsFound) { - UE_LOGFMT(LogShooterGameMode, Log, "Anywhere Fleet Parameters Loaded Successfully...."); + UE_LOGFMT(LogDS_GameMode, Log, "Anywhere Fleet Parameters Loaded Successfully...."); } else { - UE_LOGFMT(LogShooterGameMode, Error, "Anywhere Fleet Parameters Load FAILED...."); + UE_LOGFMT(LogDS_GameMode, Error, "Anywhere Fleet Parameters Load FAILED...."); } } -void AShooterGameMode::LogServerParameters(const FServerParameters& InServerParameters) +void ADS_GameMode::LogServerParameters(const FServerParameters& InServerParameters) { - - UE_LOGFMT(LogShooterGameMode, Log, ">>>> WebSocket URL: {WebSocketUrl}", InServerParameters.m_webSocketUrl); - UE_LOGFMT(LogShooterGameMode, Log, ">>>> Fleet ID: {FleetId}", InServerParameters.m_fleetId); - UE_LOGFMT(LogShooterGameMode, Log, ">>>> Process ID: {ProcessId}", InServerParameters.m_processId); - UE_LOGFMT(LogShooterGameMode, Log, ">>>> Host ID (Compute Name): {HostId}", InServerParameters.m_hostId); - UE_LOGFMT(LogShooterGameMode, Log, ">>>> Auth Token: {AuthToken}", GetValueOrHash(InServerParameters.m_authToken)); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> WebSocket URL: {WebSocketUrl}", InServerParameters.m_webSocketUrl); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> Fleet ID: {FleetId}", InServerParameters.m_fleetId); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> Process ID: {ProcessId}", InServerParameters.m_processId); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> Host ID (Compute Name): {HostId}", InServerParameters.m_hostId); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> Auth Token: {AuthToken}", GetValueOrHash(InServerParameters.m_authToken)); if (!InServerParameters.m_awsRegion.IsEmpty()) { - UE_LOGFMT(LogShooterGameMode, Log, ">>>> Aws Region: {AwsRegion}", InServerParameters.m_awsRegion); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> Aws Region: {AwsRegion}", InServerParameters.m_awsRegion); } if (!InServerParameters.m_accessKey.IsEmpty()) { - UE_LOGFMT(LogShooterGameMode, Log, ">>>> Access Key: {AccessKey}", GetValueOrHash(InServerParameters.m_accessKey)); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> Access Key: {AccessKey}", GetValueOrHash(InServerParameters.m_accessKey)); } if (!InServerParameters.m_secretKey.IsEmpty()) { - UE_LOGFMT(LogShooterGameMode, Log, ">>>> Secret Key: {SecretKey}", GetValueOrHash(InServerParameters.m_secretKey)); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> Secret Key: {SecretKey}", GetValueOrHash(InServerParameters.m_secretKey)); } if (!InServerParameters.m_sessionToken.IsEmpty()) { - UE_LOGFMT(LogShooterGameMode, Log, ">>>> Session Token: {SessionToken}", GetValueOrHash(InServerParameters.m_sessionToken)); + UE_LOGFMT(LogDS_GameMode, Log, ">>>> Session Token: {SessionToken}", GetValueOrHash(InServerParameters.m_sessionToken)); } } -FString AShooterGameMode::GetValueOrHash(const FString& Value) +FString ADS_GameMode::GetValueOrHash(const FString& Value) { #if UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT return Value; diff --git a/Source/FPSTemplate/Private/GameLift/GameLiftClp.cpp b/Source/DedicatedServers/Private/GameLift/GameLiftClp.cpp similarity index 100% rename from Source/FPSTemplate/Private/GameLift/GameLiftClp.cpp rename to Source/DedicatedServers/Private/GameLift/GameLiftClp.cpp diff --git a/Source/FPSTemplate/Private/GameLiftClpTypes.cpp b/Source/DedicatedServers/Private/GameLiftClpTypes.cpp similarity index 100% rename from Source/FPSTemplate/Private/GameLiftClpTypes.cpp rename to Source/DedicatedServers/Private/GameLiftClpTypes.cpp diff --git a/Source/FPSTemplate/Public/Game/ShooterGameMode.h b/Source/DedicatedServers/Public/Game/DS_GameMode.h similarity index 76% rename from Source/FPSTemplate/Public/Game/ShooterGameMode.h rename to Source/DedicatedServers/Public/Game/DS_GameMode.h index 7cf1bf72..e4e721b5 100644 --- a/Source/FPSTemplate/Public/Game/ShooterGameMode.h +++ b/Source/DedicatedServers/Public/Game/DS_GameMode.h @@ -3,11 +3,11 @@ #pragma once #include "CoreMinimal.h" -#include "GameLiftClpTypes.h" -#include "ShooterGameModeBase.h" -#include "ShooterGameMode.generated.h" +#include "DedicatedServers/Public/GameLiftClpTypes.h" +#include "GameFramework/GameMode.h" +#include "DS_GameMode.generated.h" -DECLARE_LOG_CATEGORY_EXTERN(LogShooterGameMode, Log, All); +DECLARE_LOG_CATEGORY_EXTERN(LogDS_GameMode, Log, All); struct FProcessParameters; struct FServerParameters; @@ -25,16 +25,11 @@ struct FGameLiftConfig cmdlineparser::details::FParseResult WebSocketUrlResult; }; -/** - * - */ + UCLASS() -class FPSTEMPLATE_API AShooterGameMode : public AShooterGameModeBase +class DEDICATEDSERVERS_API ADS_GameMode : public AGameMode { GENERATED_BODY() -public: - - AShooterGameMode(); protected: virtual void BeginPlay() override; @@ -43,14 +38,13 @@ protected: private: FGameLiftConfig GameLiftConfig; FString CachedCommandLine; + TSharedPtr ProcessParameters; - static FString GetSHA256Hash(const FString& CommandLineString); + static FString GetSHA256Hash(const FString& InString); void InitGameLift(); bool GetAnywhereFleetParameters(const FString& CommandLineString); void LogAnywhereFleetParameters(); static void LogServerParameters(const FServerParameters& InServerParameters); static FString GetValueOrHash(const FString& Value); - - TSharedPtr ProcessParameters; }; diff --git a/Source/FPSTemplate/Public/GameLift/GameLiftClp.h b/Source/DedicatedServers/Public/GameLift/GameLiftClp.h similarity index 100% rename from Source/FPSTemplate/Public/GameLift/GameLiftClp.h rename to Source/DedicatedServers/Public/GameLift/GameLiftClp.h diff --git a/Source/FPSTemplate/Public/GameLiftClpTypes.h b/Source/DedicatedServers/Public/GameLiftClpTypes.h similarity index 100% rename from Source/FPSTemplate/Public/GameLiftClpTypes.h rename to Source/DedicatedServers/Public/GameLiftClpTypes.h diff --git a/Source/FPSTemplate/FPSTemplate.Build.cs b/Source/FPSTemplate/FPSTemplate.Build.cs index ecdcec2b..3c6b3b42 100644 --- a/Source/FPSTemplate/FPSTemplate.Build.cs +++ b/Source/FPSTemplate/FPSTemplate.Build.cs @@ -30,18 +30,6 @@ public class FPSTemplate : ModuleRules "OpenSSL", }); - // Adds in the plugin for GameLiftServerSDK if it is the server build. - - if (Target.Type == TargetType.Server) - { - PublicDependencyModuleNames.Add("GameLiftServerSDK"); - } - else - { - PublicDefinitions.Add("WITH_GAMELIFT=0"); - } - bEnableExceptions = true; - // Uncomment if you are using Slate UI // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); diff --git a/Source/FPSTemplate/Public/Game/ShooterGameModeBase.h b/Source/FPSTemplate/Public/Game/ShooterGameModeBase.h index 244a8496..a2abc309 100644 --- a/Source/FPSTemplate/Public/Game/ShooterGameModeBase.h +++ b/Source/FPSTemplate/Public/Game/ShooterGameModeBase.h @@ -3,14 +3,14 @@ #pragma once #include "CoreMinimal.h" -#include "GameFramework/GameMode.h" +#include "Game/DS_GameMode.h" #include "ShooterGameModeBase.generated.h" /** * */ UCLASS() -class FPSTEMPLATE_API AShooterGameModeBase : public AGameMode +class FPSTEMPLATE_API AShooterGameModeBase : public ADS_GameMode { GENERATED_BODY() public: