diff --git a/Source/FPSTemplate/Private/Game/ShooterGameMode.cpp b/Source/FPSTemplate/Private/Game/ShooterGameMode.cpp index 828f56fa..1aba5edb 100644 --- a/Source/FPSTemplate/Private/Game/ShooterGameMode.cpp +++ b/Source/FPSTemplate/Private/Game/ShooterGameMode.cpp @@ -8,8 +8,7 @@ #include "openssl/sha.h" #include "GameLiftServerSDK.h" #include "GameLiftServerSDKModels.h" -#include "DSP/BufferDiagnostics.h" -#include "Misc/TypeContainer.h" + DEFINE_LOG_CATEGORY(LogShooterGameMode); @@ -32,7 +31,14 @@ void AShooterGameMode::InitGame(const FString& MapName, const FString& Options, { Super::InitGame(MapName, Options, ErrorMessage); CachedCommandLine = FCommandLine::Get(); - GameLiftConfig.ServerPort = cmdlineparser::details::GetConfiguredOrDefaultPort(CachedCommandLine, TEXT("port")); + + const FPortResult PortResult = cmdlineparser::details::GetConfiguredOrDefaultPort(CachedCommandLine, TEXT("port"));; + if (PortResult.bUsedDefaultPort) + { + UE_LOGFMT (LogShooterGameMode, Warning, "{0}", PortResult.WarningMessage); + } + + GameLiftConfig.ServerPort = PortResult.Port; if (FParse::Param(*CachedCommandLine, TEXT("glAnywhereFleet"))) { UE_LOGFMT(LogShooterGameMode, Log, "Fleet type: Anywhere"); @@ -59,7 +65,7 @@ FString AShooterGameMode::GetSHA256Hash(const FString& InString) FTCHARToUTF8 Utf8(InString); const uint8* Bytes = reinterpret_cast(Utf8.Get()); - uint32 Length = Utf8.Length() * sizeof(UTF8CHAR); + uint32 Length = Utf8.Length(); SHA256_CTX Sha256Context; diff --git a/Source/FPSTemplate/Private/GameLift/GameLiftClp.cpp b/Source/FPSTemplate/Private/GameLift/GameLiftClp.cpp index 3f431846..9fb3774a 100644 --- a/Source/FPSTemplate/Private/GameLift/GameLiftClp.cpp +++ b/Source/FPSTemplate/Private/GameLift/GameLiftClp.cpp @@ -1,11 +1,11 @@ #include "GameLift/GameLiftClp.h" -int32 cmdlineparser::GetConfiguredOrDefaultPort(const FString& Token) +FPortResult cmdlineparser::GetConfiguredOrDefaultPort(const FString& Token) { return details::GetConfiguredOrDefaultPort(FCommandLine::Get(), Token); } -int32 cmdlineparser::GetConfiguredOrDefaultPort(const FString& CommandLine, const FString& Token) +FPortResult cmdlineparser::GetConfiguredOrDefaultPort(const FString& CommandLine, const FString& Token) { return details::GetConfiguredOrDefaultPort(CommandLine, Token); } @@ -16,6 +16,7 @@ cmdlineparser::details::FParseResult cmdlineparser::GetValueOfToken(const FStrin FString ValueOfToken; Result.Token = Token; + ensure(Token != details::EAvailableTokens::Unknown); ensure(Token < details::EAvailableTokens::MaxToken); const bool bTokenFound = FParse::Value( *CommandLine, @@ -58,7 +59,6 @@ cmdlineparser::details::FParseResult cmdlineparser::GetValueOfToken(const FStrin FString ErrorMessage = details::ERROR_MESSAGES[static_cast(Result.ErrorCode)]; FString TokenName = details::CLI_TOKENS[static_cast(Result.Token)]; FString Value = Result.Value; -// Result.ErrorMessage = FString::Format(*ErrorMessage, {FStringFormatArg(TokenName), FStringFormatArg(Value)}); Result.ErrorMessage = ErrorMessage; return Result; @@ -72,18 +72,24 @@ FString cmdlineparser::details::EnsureEndsWith(const FString& Token, const TCHAR return Token.EndsWith(Suffix) ? Token : Token + Suffix; } -int32 cmdlineparser::details::GetConfiguredOrDefaultPort(const FString& CommandLine, const FString& Token) +FPortResult cmdlineparser::details::GetConfiguredOrDefaultPort(const FString& CommandLine, const FString& Token) { - const int32 Port = FURL::UrlConfig.DefaultPort; + FPortResult PortResult; + PortResult.Port = FURL::UrlConfig.DefaultPort; if (int32 CliPort; FParse::Value(*CommandLine, *EnsureEndsWith(Token, TEXT("=")), CliPort)) { if (CliPort >= details::MIN_PORT && CliPort <= details::MAX_PORT) { - return CliPort; + PortResult.Port = CliPort; + PortResult.bUsedDefaultPort = false; + PortResult.WarningMessage = FString(); + return PortResult; } } - return Port; + PortResult.bUsedDefaultPort = true; + PortResult.WarningMessage = FString("Command Line Option for Port is out of ranged... Using Default Port %s", PortResult.Port); + return PortResult; } bool cmdlineparser::details::DoesRegExMatch(const FString& Text, const FString& Pattern) diff --git a/Source/FPSTemplate/Private/GameLiftClpTypes.cpp b/Source/FPSTemplate/Private/GameLiftClpTypes.cpp index fcbdfd08..7be75175 100644 --- a/Source/FPSTemplate/Private/GameLiftClpTypes.cpp +++ b/Source/FPSTemplate/Private/GameLiftClpTypes.cpp @@ -14,6 +14,7 @@ const TArray& cmdlineparser::details::ERROR_MESSAGES = []() -> const TA const TArray& cmdlineparser::details::CLI_TOKENS = []() -> const TArray& { static TArray Cli_Tokens; + Cli_Tokens.Add(TEXT("unknown")); // Unknown = 0; Cli_Tokens.Add(TEXT("authtoken")); Cli_Tokens.Add(TEXT("hostid")); Cli_Tokens.Add(TEXT("fleetid")); @@ -24,6 +25,7 @@ const TArray& cmdlineparser::details::CLI_TOKENS = []() -> const TArray const TArray& cmdlineparser::details::REGEX_PATTERNS = []() -> const TArray& { static TArray Cli_Tokens; + Cli_Tokens.Add(TEXT(".*")); // unknown = 0 Cli_Tokens.Add(TEXT("^[a-zA-Z0-9\\-]+$")); Cli_Tokens.Add(TEXT("^[a-zA-Z0-9][a-zA-Z0-9\\-]{0,62}[a-zA-Z0-9]?$")); Cli_Tokens.Add(TEXT("^[a-z]*fleet-[a-zA-Z0-9\\-]+$|^arn:.*:[a-z]*fleet\\/[a-z]*fleet-[a-zA-Z0-9\\-]+$")); diff --git a/Source/FPSTemplate/Public/Game/ShooterGameMode.h b/Source/FPSTemplate/Public/Game/ShooterGameMode.h index d5f9f207..7cf1bf72 100644 --- a/Source/FPSTemplate/Public/Game/ShooterGameMode.h +++ b/Source/FPSTemplate/Public/Game/ShooterGameMode.h @@ -53,5 +53,4 @@ private: static FString GetValueOrHash(const FString& Value); TSharedPtr ProcessParameters; -// TSharedPtr ServerParameters; }; diff --git a/Source/FPSTemplate/Public/GameLift/GameLiftClp.h b/Source/FPSTemplate/Public/GameLift/GameLiftClp.h index bb6313ca..e8ccfcb9 100644 --- a/Source/FPSTemplate/Public/GameLift/GameLiftClp.h +++ b/Source/FPSTemplate/Public/GameLift/GameLiftClp.h @@ -2,11 +2,17 @@ #include "GameLiftClpTypes.h" #include "CoreMinimal.h" +struct FPortResult +{ + int32 Port; + bool bUsedDefaultPort; + FString WarningMessage; +}; + namespace cmdlineparser { -// int32 GetConfiguredOrDefaultPort(); - int32 GetConfiguredOrDefaultPort(const FString& Token = TEXT("port=")); - int32 GetConfiguredOrDefaultPort(const FString& CommandLine, const FString& Token = TEXT("port=")); + FPortResult GetConfiguredOrDefaultPort(const FString& Token = TEXT("port=")); + FPortResult GetConfiguredOrDefaultPort(const FString& CommandLine, const FString& Token = TEXT("port=")); details::FParseResult GetValueOfToken(const FString& CommandLine, const details::EAvailableTokens Token); } @@ -18,7 +24,7 @@ namespace cmdlineparser::details inline static constexpr const TCHAR* DEFAULT_PORT_TOKEN = TEXT("port="); FString EnsureEndsWith(const FString& Token, const TCHAR* Suffix); - int32 GetConfiguredOrDefaultPort(const FString& CommandLine, const FString& Token); + FPortResult GetConfiguredOrDefaultPort(const FString& CommandLine, const FString& Token); bool DoesRegExMatch(const FString& Text, const FString& Pattern); } diff --git a/Source/FPSTemplate/Public/GameLiftClpTypes.h b/Source/FPSTemplate/Public/GameLiftClpTypes.h index f599c4cd..bef5dea1 100644 --- a/Source/FPSTemplate/Public/GameLiftClpTypes.h +++ b/Source/FPSTemplate/Public/GameLiftClpTypes.h @@ -4,6 +4,7 @@ namespace cmdlineparser::details { enum EAvailableTokens { + Unknown = 0, AuthToken, HostId, FleetId, @@ -26,11 +27,11 @@ namespace cmdlineparser::details struct FParseResult { - EAvailableTokens Token; - FString Value; - bool bIsValid; - EErrorCodes ErrorCode; - FString ErrorMessage; + EAvailableTokens Token = EAvailableTokens::Unknown; + FString Value = FString(); + bool bIsValid = false; + EErrorCodes ErrorCode = EErrorCodes::TokenNotFound; + FString ErrorMessage = FString(); }; } \ No newline at end of file