GameLiftPlugin/Source/GameLiftCore/Private/AwsScenarios/IAwsScenario.h (159 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include <sstream>
#include <string>
#include "IAWSAccountInstance.h"
#include "aws/gamelift/core/enums.h"
#include "Utils/StringConvertors.h"
namespace AwsScenarios
{
inline std::string GetLambdaS3Key(const std::string& GameName, const std::string& FunctionsReplacementId)
{
std::stringstream StringStream;
StringStream << GameName;
StringStream << "/functions/" << GameLift::GetFeatureTypeString(GameLift::FeatureType::Main);
StringStream << "/" << "requests" << "." << FunctionsReplacementId << ".zip";
return StringStream.str();
}
struct BaseInstanceTemplateParams
{
std::string AccountId;
std::string ApiGatewayStageNameParameter;
std::string BuildFolderPath;
std::string BuildS3BucketParameter;
std::string ExtraServerResourcesPath;
std::string GameNameParameter;
std::string LambdaZipS3BucketParameter;
std::string LambdaZipS3KeyParameter;
std::string LaunchPathParameter;
std::string UnrealEngineVersionParameter;
virtual ~BaseInstanceTemplateParams() = default;
virtual void FromMap(const TMap<FString, FString>& InMap) = 0;
virtual TMap<FString, FString> ToMap() const = 0;
};
struct ManagedEC2InstanceTemplateParams : BaseInstanceTemplateParams
{
std::string BuildOperatingSystemParameter;
ManagedEC2InstanceTemplateParams() = default;
virtual void FromMap(const TMap<FString, FString>& InMap) override
{
const FString* InGameNameParameter = InMap.Find("GameNameParameter");
const FString* InBuildOperatingSystemParameter = InMap.Find("BuildOperatingSystemParameter");
const FString* InBuildS3BucketParameter = InMap.Find("BuildS3BucketParameter");
const FString* InLambdaZipS3BucketParameter = InMap.Find("LambdaZipS3BucketParameter");
const FString* InLambdaZipS3KeyParameter = InMap.Find("LambdaZipS3KeyParameter");
const FString* InApiGatewayStageNameParameter = InMap.Find("ApiGatewayStageNameParameter");
const FString* InAccountId = InMap.Find("AccountId");
const FString* InLaunchPathParameter = InMap.Find("LaunchPathParameter");
const FString* InUnrealEngineVersionParameter = InMap.Find("UnrealEngineVersionParameter");
if (InGameNameParameter && InBuildOperatingSystemParameter && InBuildS3BucketParameter
&& InLambdaZipS3BucketParameter && InLambdaZipS3KeyParameter && InApiGatewayStageNameParameter
&& InApiGatewayStageNameParameter && InAccountId && InLaunchPathParameter && InUnrealEngineVersionParameter)
{
GameNameParameter = Convertors::FSToStdS(*InGameNameParameter);
BuildOperatingSystemParameter = Convertors::FSToStdS(*InBuildOperatingSystemParameter);
BuildS3BucketParameter = Convertors::FSToStdS(*InBuildS3BucketParameter);
LambdaZipS3BucketParameter = Convertors::FSToStdS(*InLambdaZipS3BucketParameter);
LambdaZipS3KeyParameter = Convertors::FSToStdS(*InLambdaZipS3KeyParameter);
ApiGatewayStageNameParameter = Convertors::FSToStdS(*InApiGatewayStageNameParameter);
AccountId = Convertors::FSToStdS(*InAccountId);
LaunchPathParameter = Convertors::FSToStdS(*InLaunchPathParameter);
UnrealEngineVersionParameter = Convertors::FSToStdS(*InUnrealEngineVersionParameter);
}
}
virtual TMap<FString, FString> ToMap() const override
{
TMap<FString, FString> ParamsMap = {};
ParamsMap.Emplace("GameNameParameter", GameNameParameter.c_str());
ParamsMap.Emplace("BuildOperatingSystemParameter", BuildOperatingSystemParameter.c_str());
ParamsMap.Emplace("BuildS3BucketParameter", BuildS3BucketParameter.c_str());
ParamsMap.Emplace("LambdaZipS3BucketParameter", LambdaZipS3BucketParameter.c_str());
ParamsMap.Emplace("LambdaZipS3KeyParameter", LambdaZipS3KeyParameter.c_str());
ParamsMap.Emplace("ApiGatewayStageNameParameter", ApiGatewayStageNameParameter.c_str());
ParamsMap.Emplace("AccountId", AccountId.c_str());
ParamsMap.Emplace("LaunchPathParameter", LaunchPathParameter.c_str());
ParamsMap.Emplace("UnrealEngineVersionParameter", UnrealEngineVersionParameter.c_str());
return ParamsMap;
}
};
struct ContainerInstanceTemplateParams : BaseInstanceTemplateParams
{
std::string ContainerGroupDefinitionNameParameter;
std::string ContainerImageNameParameter;
std::string ContainerImageUriParameter;
std::string FleetUdpFromPortParameter;
std::string FleetUdpToPortParameter;
std::string TotalVcpuLimitParameter;
std::string TotalMemoryLimitParameter;
ContainerInstanceTemplateParams() = default;
virtual void FromMap(const TMap<FString, FString>& InMap) override
{
const FString* InAccountId = InMap.Find("AccountId");
const FString* InApiGatewayStageNameParameter = InMap.Find("ApiGatewayStageNameParameter");
const FString* InContainerGroupDefinitionNameParameter = InMap.Find("ContainerGroupDefinitionNameParameter");
const FString* InContainerImageNameParameter = InMap.Find("ContainerImageNameParameter");
const FString* InContainerImageUriParameter = InMap.Find("ContainerImageUriParameter");
const FString* InGameNameParameter = InMap.Find("GameNameParameter");
const FString* InLambdaZipS3BucketParameter = InMap.Find("LambdaZipS3BucketParameter");
const FString* InLambdaZipS3KeyParameter = InMap.Find("LambdaZipS3KeyParameter");
const FString* InLaunchPathParameter = InMap.Find("LaunchPathParameter");
const FString* InFleetUdpFromPortParameter = InMap.Find("FleetUdpFromPortParameter");
const FString* InFleetUdpToPortParameter = InMap.Find("FleetUdpToPortParameter");
const FString* InTotalVcpuLimitParameter = InMap.Find("TotalVcpuLimitParameter");
const FString* InTotalMemoryLimitParameter = InMap.Find("TotalMemoryLimitParameter");
const FString* InUnrealEngineVersionParameter = InMap.Find("UnrealEngineVersionParameter");
if (InAccountId && InApiGatewayStageNameParameter && InContainerGroupDefinitionNameParameter
&& InContainerImageNameParameter && InContainerImageUriParameter && InGameNameParameter
&& InLambdaZipS3BucketParameter && InLambdaZipS3KeyParameter && InLaunchPathParameter
&& InFleetUdpFromPortParameter && InFleetUdpToPortParameter && InTotalVcpuLimitParameter
&& InTotalMemoryLimitParameter && InUnrealEngineVersionParameter)
{
AccountId = Convertors::FSToStdS(*InAccountId);
ApiGatewayStageNameParameter = Convertors::FSToStdS(*InApiGatewayStageNameParameter);
ContainerGroupDefinitionNameParameter = Convertors::FSToStdS(*InContainerGroupDefinitionNameParameter);
ContainerImageNameParameter = Convertors::FSToStdS(*InContainerImageNameParameter);
ContainerImageUriParameter = Convertors::FSToStdS(*InContainerImageUriParameter);
GameNameParameter = Convertors::FSToStdS(*InGameNameParameter);
LambdaZipS3BucketParameter = Convertors::FSToStdS(*InLambdaZipS3BucketParameter);
LambdaZipS3KeyParameter = Convertors::FSToStdS(*InLambdaZipS3KeyParameter);
LaunchPathParameter = Convertors::FSToStdS(*InLaunchPathParameter);
FleetUdpFromPortParameter = Convertors::FSToStdS(*InFleetUdpFromPortParameter);
FleetUdpToPortParameter = Convertors::FSToStdS(*InFleetUdpToPortParameter);
TotalVcpuLimitParameter = Convertors::FSToStdS(*InTotalVcpuLimitParameter);
TotalMemoryLimitParameter = Convertors::FSToStdS(*InTotalMemoryLimitParameter);
UnrealEngineVersionParameter = Convertors::FSToStdS(*InUnrealEngineVersionParameter);
}
}
virtual TMap<FString, FString> ToMap() const override
{
TMap<FString, FString> ParamsMap = {};
ParamsMap.Emplace("AccountId", AccountId.c_str());
ParamsMap.Emplace("ApiGatewayStageNameParameter", ApiGatewayStageNameParameter.c_str());
ParamsMap.Emplace("ContainerGroupDefinitionNameParameter", ContainerGroupDefinitionNameParameter.c_str());
ParamsMap.Emplace("ContainerImageNameParameter", ContainerImageNameParameter.c_str());
ParamsMap.Emplace("ContainerImageUriParameter", ContainerImageUriParameter.c_str());
ParamsMap.Emplace("GameNameParameter", GameNameParameter.c_str());
ParamsMap.Emplace("LambdaZipS3BucketParameter", LambdaZipS3BucketParameter.c_str());
ParamsMap.Emplace("LambdaZipS3KeyParameter", LambdaZipS3KeyParameter.c_str());
ParamsMap.Emplace("LaunchPathParameter", LaunchPathParameter.c_str());
ParamsMap.Emplace("FleetUdpFromPortParameter", FleetUdpFromPortParameter.c_str());
ParamsMap.Emplace("FleetUdpToPortParameter", FleetUdpToPortParameter.c_str());
ParamsMap.Emplace("TotalVcpuLimitParameter", TotalVcpuLimitParameter.c_str());
ParamsMap.Emplace("TotalMemoryLimitParameter", TotalMemoryLimitParameter.c_str());
ParamsMap.Emplace("UnrealEngineVersionParameter", UnrealEngineVersionParameter.c_str());
return ParamsMap;
}
};
class IAWSScenario
{
public:
virtual ~IAWSScenario() = default;
virtual const char* const* GetParamNames() const = 0;
virtual FText GetTooltip() const = 0;
virtual FString GetFolderName() const = 0;
virtual FText GetUserName() const = 0;
virtual FString GetScenarioPath() const = 0;
virtual FString GetScenarioInstancePath() const = 0;
virtual int SaveFeatureInstanceTemplate(IAWSAccountInstance* AwsAccountInstance, const TMap<FString, FString>& InParams) = 0;
virtual int UploadGameServer(IAWSAccountInstance* AwsAccountInstance, const std::string& ServerFolderPath, const std::string& ExtraServerResourcesPath) = 0;
};
} // namespace AwsScenarios