in GameLiftPlugin/Source/GameLiftPlugin/Private/SMenu/Containers/SCreateContainerFleetSection.cpp [421:476]
void SCreateContainerFleetSection::PollDescribeContainerFleet()
{
Async(EAsyncExecution::Thread,
[this]() mutable
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
FString StackIdentifier = ContainersStatus->StackIdentifier;
int i = 0;
for (; i < WaitTimesCount; ++i) {
// If the cgd is not setup, it means the whole thing is reset
auto ContainerState = EDeploymentMessageStateFromString(ContainersStatus->Status.ToString());
if (!ContainersStatus->IsCgdConfigurationFinished || ContainerState != EDeploymentMessageState::InProgressMessage) {
return;
}
IGameLiftContainersHandler& Handler = IGameLiftCoreModule::Get().GetGameLiftContainersHandler();
// Pass in StackIdentifier for the GameName field in the deployer as a quick workaround
// to decouple containers and ec2 stack deployments and fix describe container fleet calls
GameLiftDescribeContainerFleetResult DescribeContainerFleetResult = Handler.DescribeContainerFleet(StackIdentifier);
Async(EAsyncExecution::TaskGraphMainThread,
[this, DescribeContainerFleetResult = MoveTemp(DescribeContainerFleetResult)]() mutable
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
// Populate fields only when describe call is successful
if (DescribeContainerFleetResult.bIsSuccessful) {
ContainersStatus->FleetId = DescribeContainerFleetResult.FleetId;
ContainersStatus->FleetStatus = DescribeContainerFleetResult.FleetStatus;
ContainersStatus->FleetType = DescribeContainerFleetResult.FleetType;
ContainersStatus->InstanceType = DescribeContainerFleetResult.InstanceType;
PopulateFleetDetails();
ContainersStatus->SaveConfig();
}
});
if (DescribeContainerFleetResult.bIsSuccessful) {
return;
}
FPlatformProcess::Sleep(WaitIntervalSeconds);
}
if (i == WaitTimesCount) {
Async(EAsyncExecution::TaskGraphMainThread,
[this]() mutable
{
UGameLiftContainersStatus* ContainersStatus = GetMutableDefault<UGameLiftContainersStatus>();
UpdateStepStatusUI(EDeploymentMessageState::FailureMessage);
ContainersStatus->ErrorCreatingContainerFleet = true;
ErrorTextBlock->SetText(Menu::DeployContainers::kTimedOutPollingDeploymentStatusErrorMessage);
ContainersStatus->ErrorMessageCreatingContainerFleet = Menu::DeployContainers::kTimedOutPollingDeploymentStatusErrorMessage;
UE_LOG(GameLiftPluginLog, Display, TEXT("Timed out polling for deployment status"));
ContainersStatus->SaveConfig();
});
}
});
}