3 Commits

Author SHA1 Message Date
Norman Lansing
3912fe52c6 Lesson 60 - Making an HTTP Request 2026-03-15 21:46:18 -04:00
Norman Lansing
d989960b41 Lesson 59 - Game Sessions API Data Asset 2026-03-15 17:31:56 -04:00
Norman Lansing
3407b94731 Lesson 58 - HTTP Request Manager 2026-03-15 17:02:22 -04:00
14 changed files with 197 additions and 2 deletions

View File

@@ -14,7 +14,9 @@ public class DedicatedServers : ModuleRules
{
"Core",
"CoreUObject",
"Engine"
"Engine",
"GameplayTags",
"HTTP"
});
PrivateDependencyModuleNames.AddRange(new string[]

View File

@@ -0,0 +1,11 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "Data/API/APIData.h"
FString UAPIData::GetAPIEndpoint(const FGameplayTag& APIEndpoint)
{
const FString ResourceName = Resources.FindChecked(APIEndpoint);
return InvokeUrl + "/" + Stage + "/" + ResourceName;
}

View File

@@ -0,0 +1,9 @@
#include "GameplayTags/DedicatedServersTags.h"
namespace DedicatedServersTags
{
namespace GameSessionsAPI
{
UE_DEFINE_GAMEPLAY_TAG_COMMENT(ListFleets, "DedicatedServersTags.GameSessionsAPI.ListFleets", "List Fleets resource on the Game Session Resource")
}
}

View File

@@ -0,0 +1,30 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "UI/API_Test/APITestManager.h"
#include "HttpModule.h"
#include "Data/API/APIData.h"
#include "GameplayTags/DedicatedServersTags.h"
void UAPITestManager::ListFleetsButtonClicked()
{
check(APIData);
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
Request->OnProcessRequestComplete().BindUObject(this, &UAPITestManager::ListFleets_Response);
const FString APIUrl = APIData->GetAPIEndpoint(DedicatedServersTags::GameSessionsAPI::ListFleets);
Request->SetURL(APIUrl);
Request->SetVerb(TEXT("GET"));
Request->SetHeader(TEXT("Content-Type"), TEXT("application/json"));
Request->ProcessRequest();
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "List Fleets Request Made");
}
void UAPITestManager::ListFleets_Response(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, "List Fleets Response Received");
}

View File

@@ -1,4 +1,21 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "UI/API_Test/APITestOverlay.h"
#include "UI/API_Test/APITestManager.h"
#include "Components/Button.h"
#include "UI/API/ListFleets/ListFleetsBox.h"
void UAPITestOverlay::NativeConstruct()
{
Super::NativeConstruct();
check(APITestManagerClass);
APITestManager = NewObject<UAPITestManager>(this, APITestManagerClass);
check (ListFleetsBox)
check (ListFleetsBox->Button_ListFleets)
ListFleetsBox->Button_ListFleets->OnClicked.AddDynamic(APITestManager, &UAPITestManager::ListFleetsButtonClicked);
}

View File

@@ -0,0 +1,4 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "UI/HTTP/HTTPRequestManager.h"

View File

@@ -0,0 +1,38 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "GameplayTags/DedicatedServersTags.h"
#include "APIData.generated.h"
/**
*
*/
UCLASS()
class DEDICATEDSERVERS_API UAPIData : public UDataAsset
{
GENERATED_BODY()
public:
FString GetAPIEndpoint(const FGameplayTag& APIEndpoint);
protected:
// Name of the API - for labeling in the Data Asset; this is not used by any code.
UPROPERTY(EditAnywhere)
FString Name;
UPROPERTY(EditDefaultsOnly)
FString InvokeUrl;
UPROPERTY(EditDefaultsOnly)
FString Stage;
UPROPERTY(EditDefaultsOnly)
TMap<FGameplayTag, FString> Resources;
};

View File

@@ -0,0 +1,12 @@
#pragma once
#include "CoreMinimal.h"
#include "NativeGameplayTags.h"
namespace DedicatedServersTags
{
namespace GameSessionsAPI
{
UE_DECLARE_GAMEPLAY_TAG_EXTERN(ListFleets)
}
}

View File

@@ -0,0 +1,24 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Interfaces/IHttpRequest.h"
#include "UI/HTTP/HTTPRequestManager.h"
#include "APITestManager.generated.h"
/**
*
*/
UCLASS()
class DEDICATEDSERVERS_API UAPITestManager : public UHTTPRequestManager
{
GENERATED_BODY()
public:
UFUNCTION()
void ListFleetsButtonClicked();
void ListFleets_Response(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
};

View File

@@ -6,6 +6,8 @@
#include "Blueprint/UserWidget.h"
#include "APITestOverlay.generated.h"
class UAPITestManager;
class UListFleetsBox;
/**
*
*/
@@ -13,4 +15,25 @@ UCLASS()
class DEDICATEDSERVERS_API UAPITestOverlay : public UUserWidget
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly)
TSubclassOf<UAPITestManager> APITestManagerClass;
protected:
virtual void NativeConstruct() override;
private:
UPROPERTY(meta = (BindWidget))
TObjectPtr<UListFleetsBox> ListFleetsBox;
UPROPERTY()
TObjectPtr<UAPITestManager> APITestManager;
};

View File

@@ -0,0 +1,25 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "HTTPRequestManager.generated.h"
class UAPIData;
/**
*
*/
UCLASS(Blueprintable)
class DEDICATEDSERVERS_API UHTTPRequestManager : public UObject
{
GENERATED_BODY()
protected:
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UAPIData> APIData;
};