From e95360489b6f141f55df3f595b5a2183e517f82a Mon Sep 17 00:00:00 2001 From: Norman Lansing Date: Mon, 16 Mar 2026 22:30:26 -0400 Subject: [PATCH] Lesson 65 - ListFleets Callback --- .../Private/UI/API_Test/APITestManager.cpp | 35 +++------------- .../Private/UI/API_Test/APITestOverlay.cpp | 24 ++++++++++- .../Private/UI/HTTP/HTTPRequestManager.cpp | 41 +++++++++++++++++++ .../Public/UI/API_Test/APITestManager.h | 7 +++- .../Public/UI/API_Test/APITestOverlay.h | 6 +++ .../Public/UI/HTTP/HTTPRequestManager.h | 5 ++- 6 files changed, 86 insertions(+), 32 deletions(-) diff --git a/Source/DedicatedServers/Private/UI/API_Test/APITestManager.cpp b/Source/DedicatedServers/Private/UI/API_Test/APITestManager.cpp index b026f39a..a75ea7d6 100644 --- a/Source/DedicatedServers/Private/UI/API_Test/APITestManager.cpp +++ b/Source/DedicatedServers/Private/UI/API_Test/APITestManager.cpp @@ -10,22 +10,16 @@ #include "Interfaces/IHttpResponse.h" #include "UI/HTTP/HTTPRequestTypes.h" -void UAPITestManager::ListFleetsButtonClicked() +void UAPITestManager::ListFleets() { check(APIData); - TSharedRef 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) @@ -39,33 +33,16 @@ void UAPITestManager::ListFleets_Response(FHttpRequestPtr Request, FHttpResponse { const TSharedPtr* ErrorObjPtr = nullptr;; - if (JsonObject->HasField(TEXT("errorType")) || JsonObject->HasField(TEXT("errorMessage"))) + if (ContainsErrors(JsonObject, false)) { - FString ErrorType = JsonObject->HasField(TEXT("errorType")) ? JsonObject->GetStringField(TEXT("errorType")) : TEXT("Unknown Error"); - FString ErrorMessage = JsonObject->HasField(TEXT("errorMessage")) ? JsonObject->GetStringField(TEXT("errorMessage")) : TEXT("Unknown Error Message"); - - UE_LOGFMT(LogDedicatedServers, Error, "Error Type: {ErrorType}", ErrorType); - UE_LOGFMT(LogDedicatedServers, Error, "Error Message: {ErrorMessage}", ErrorMessage); + OnListFleetsResponseReceived.Broadcast(FDS_ListFleetsResponse(), false); return; } - if (JsonObject->HasField(TEXT("$fault"))) - { - FString ErrorType = JsonObject->HasField(TEXT("name")) ? JsonObject->GetStringField(TEXT("name")) : TEXT("Unknown Error"); - UE_LOGFMT(LogDedicatedServers, Error, "Error Type: {ErrorType}", ErrorType); - return; - } - - - if (JsonObject->HasField(TEXT("$metadata"))) - { - TSharedPtr MetaDataJsonObject = JsonObject->GetObjectField(TEXT("$metadata")); - FDS_MetaData DSMetaData; - FJsonObjectConverter::JsonObjectToUStruct(MetaDataJsonObject.ToSharedRef(), &DSMetaData); - DSMetaData.Dump(); - } - + DumpMetaData(JsonObject); + FDS_ListFleetsResponse ListFleetsResponse; FJsonObjectConverter::JsonObjectToUStruct(JsonObject.ToSharedRef(), &ListFleetsResponse); ListFleetsResponse.Dump(); + OnListFleetsResponseReceived.Broadcast(ListFleetsResponse, true); } } diff --git a/Source/DedicatedServers/Private/UI/API_Test/APITestOverlay.cpp b/Source/DedicatedServers/Private/UI/API_Test/APITestOverlay.cpp index 1b36dad4..3a416cef 100644 --- a/Source/DedicatedServers/Private/UI/API_Test/APITestOverlay.cpp +++ b/Source/DedicatedServers/Private/UI/API_Test/APITestOverlay.cpp @@ -17,5 +17,27 @@ void UAPITestOverlay::NativeConstruct() check (ListFleetsBox) check (ListFleetsBox->Button_ListFleets) - ListFleetsBox->Button_ListFleets->OnClicked.AddDynamic(APITestManager, &UAPITestManager::ListFleetsButtonClicked); + ListFleetsBox->Button_ListFleets->OnClicked.AddDynamic(this, &UAPITestOverlay::ListFleetsButtonClicked); +} + +void UAPITestOverlay::ListFleetsButtonClicked() +{ + check(APITestManager); + APITestManager->OnListFleetsResponseReceived.AddDynamic(this, &UAPITestOverlay::OnListFleetsResponseReceived); + APITestManager->ListFleets(); + + ListFleetsBox->Button_ListFleets->SetIsEnabled(false); +} + +void UAPITestOverlay::OnListFleetsResponseReceived(const FDS_ListFleetsResponse& ListFleetResponse, bool bWasSuccessful) +{ + if (bWasSuccessful) + { + + } + else + { + + } + ListFleetsBox->Button_ListFleets->SetIsEnabled(true); } diff --git a/Source/DedicatedServers/Private/UI/HTTP/HTTPRequestManager.cpp b/Source/DedicatedServers/Private/UI/HTTP/HTTPRequestManager.cpp index 2b3deca6..55696b92 100644 --- a/Source/DedicatedServers/Private/UI/HTTP/HTTPRequestManager.cpp +++ b/Source/DedicatedServers/Private/UI/HTTP/HTTPRequestManager.cpp @@ -2,3 +2,44 @@ #include "UI/HTTP/HTTPRequestManager.h" + +#include "HTTPRequestTypes.h" +#include "JsonObjectConverter.h" +#include "DedicatedServers/DedicatedServers.h" + +bool UHTTPRequestManager::ContainsErrors(TSharedPtr JsonObject, bool bSuppressLog) +{ + if (JsonObject->HasField(TEXT("errorType")) || JsonObject->HasField(TEXT("errorMessage"))) + { + if (!bSuppressLog) + { + FString ErrorType = JsonObject->HasField(TEXT("errorType")) ? JsonObject->GetStringField(TEXT("errorType")) : TEXT("Unknown Error"); + FString ErrorMessage = JsonObject->HasField(TEXT("errorMessage")) ? JsonObject->GetStringField(TEXT("errorMessage")) : TEXT("Unknown Error Message"); + + UE_LOGFMT(LogDedicatedServers, Error, "Error Type: {ErrorType}", ErrorType); + UE_LOGFMT(LogDedicatedServers, Error, "Error Message: {ErrorMessage}", ErrorMessage); + } + return true; + } + if (JsonObject->HasField(TEXT("$fault"))) + { + if (!bSuppressLog) + { + FString ErrorType = JsonObject->HasField(TEXT("name")) ? JsonObject->GetStringField(TEXT("name")) : TEXT("Unknown Error"); + UE_LOGFMT(LogDedicatedServers, Error, "Error Type: {ErrorType}", ErrorType); + } + return true; + } + return false; +} + +void UHTTPRequestManager::DumpMetaData(TSharedPtr JsonObject) +{ + if (JsonObject->HasField(TEXT("$metadata"))) + { + TSharedPtr MetaDataJsonObject = JsonObject->GetObjectField(TEXT("$metadata")); + FDS_MetaData DSMetaData; + FJsonObjectConverter::JsonObjectToUStruct(MetaDataJsonObject.ToSharedRef(), &DSMetaData); + DSMetaData.Dump(); + } +} diff --git a/Source/DedicatedServers/Public/UI/API_Test/APITestManager.h b/Source/DedicatedServers/Public/UI/API_Test/APITestManager.h index 8ed458f5..860e2108 100644 --- a/Source/DedicatedServers/Public/UI/API_Test/APITestManager.h +++ b/Source/DedicatedServers/Public/UI/API_Test/APITestManager.h @@ -7,6 +7,8 @@ #include "UI/HTTP/HTTPRequestManager.h" #include "APITestManager.generated.h" +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnListFleetsResponseReceived, const FDS_ListFleetsResponse&, ListFleetResponse, bool, bWasSuccessful); + /** * */ @@ -18,7 +20,10 @@ class DEDICATEDSERVERS_API UAPITestManager : public UHTTPRequestManager public: UFUNCTION() - void ListFleetsButtonClicked(); + void ListFleets(); + + UPROPERTY() + FOnListFleetsResponseReceived OnListFleetsResponseReceived; void ListFleets_Response(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful); }; diff --git a/Source/DedicatedServers/Public/UI/API_Test/APITestOverlay.h b/Source/DedicatedServers/Public/UI/API_Test/APITestOverlay.h index f6bde917..2227edab 100644 --- a/Source/DedicatedServers/Public/UI/API_Test/APITestOverlay.h +++ b/Source/DedicatedServers/Public/UI/API_Test/APITestOverlay.h @@ -8,6 +8,7 @@ class UAPITestManager; class UListFleetsBox; +class FDS_ListFleetsResponse; /** * */ @@ -32,6 +33,11 @@ private: UPROPERTY() TObjectPtr APITestManager; + UFUNCTION() + void ListFleetsButtonClicked(); + + UFUNCTION() + void OnListFleetsResponseReceived(const FDS_ListFleetsResponse& ListFleetResponse, bool bWasSuccessful); diff --git a/Source/DedicatedServers/Public/UI/HTTP/HTTPRequestManager.h b/Source/DedicatedServers/Public/UI/HTTP/HTTPRequestManager.h index a90a0d39..925b282b 100644 --- a/Source/DedicatedServers/Public/UI/HTTP/HTTPRequestManager.h +++ b/Source/DedicatedServers/Public/UI/HTTP/HTTPRequestManager.h @@ -7,6 +7,7 @@ #include "HTTPRequestManager.generated.h" class UAPIData; +class FJsonObject; /** * @@ -21,5 +22,7 @@ protected: UPROPERTY(EditDefaultsOnly) TObjectPtr APIData; - + bool ContainsErrors(TSharedPtr JsonObject, bool bSuppressLog = true); + void DumpMetaData(TSharedPtr JsonObject); + };