diff --git a/Source/DedicatedServers/Private/UI/APITest/APITestManager.cpp b/Source/DedicatedServers/Private/UI/APITest/APITestManager.cpp index c30774cf..1f7295b4 100644 --- a/Source/DedicatedServers/Private/UI/APITest/APITestManager.cpp +++ b/Source/DedicatedServers/Private/UI/APITest/APITestManager.cpp @@ -5,13 +5,12 @@ #include "HttpModule.h" #include "JsonObjectConverter.h" #include "Data/API/APIData.h" -#include "DedicatedServers/DedicatedServers.h" #include "GameplayTags/DedicatedServerTags.h" #include "Interfaces/IHttpResponse.h" #include "UI/HTTP/HTTPRequestTypes.h" -void UAPITestManager::ListFleetsButtonClicked() +void UAPITestManager::ListFleets() { check(APIData); @@ -24,50 +23,26 @@ void UAPITestManager::ListFleetsButtonClicked() Request->SetVerb("GET"); Request->SetHeader("Content-Type", "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::Red, "List Fleets Response Received"); - TSharedPtr JsonObject; TSharedRef> JsonReader = TJsonReaderFactory<>::Create(Response->GetContentAsString()); if (FJsonSerializer::Deserialize(JsonReader, JsonObject)) { - if (JsonObject->HasField(TEXT("errorType")) || JsonObject->HasField(TEXT("errorMessage"))) + if (ContainsErrors(JsonObject)) { - FString ErrorType = JsonObject->HasField(TEXT("errorType")) ? JsonObject->GetStringField(TEXT("errorType")) : FString("Unknown Error"); - FString ErrorMessage = JsonObject->HasField(TEXT("errorMessage")) ? JsonObject->GetStringField(TEXT("errorMessage")) : FString("Unknown Error Message"); - - UE_LOGFMT(LogDedicatedServers, Error, "Error Type: {ErrorType}", ErrorType); - UE_LOGFMT(LogDedicatedServers, Error, "Error Message: {ErrorMessage}", ErrorMessage); - + OnListFleetsResponseReceived.Broadcast(FDSListFleetsResponse(), false); return; } - if (JsonObject->HasField(TEXT("$fault"))) - { - FString ErrorType = JsonObject->HasField(TEXT("name")) ? JsonObject->GetStringField(TEXT("name")) : FString("Unknown Error"); - UE_LOGFMT(LogDedicatedServers, Error, "Error Type: {ErrorType}", ErrorType); - return; - } - - - - if (JsonObject->HasField(TEXT("$metadata"))) - { - TSharedPtr MetaDataJsonObject = JsonObject->GetObjectField(TEXT("$metadata")); - FDSMetaData DSMetaData; - FJsonObjectConverter::JsonObjectToUStruct(MetaDataJsonObject.ToSharedRef(), &DSMetaData); - - DSMetaData.Dump(); - } - + DumpMetadata(JsonObject); + FDSListFleetsResponse ListFleetsResponse; FJsonObjectConverter::JsonObjectToUStruct(JsonObject.ToSharedRef(), &ListFleetsResponse); + OnListFleetsResponseReceived.Broadcast(ListFleetsResponse, true); ListFleetsResponse.Dump(); } } diff --git a/Source/DedicatedServers/Private/UI/APITest/APITestOverlay.cpp b/Source/DedicatedServers/Private/UI/APITest/APITestOverlay.cpp index 586cf167..084cfadb 100644 --- a/Source/DedicatedServers/Private/UI/APITest/APITestOverlay.cpp +++ b/Source/DedicatedServers/Private/UI/APITest/APITestOverlay.cpp @@ -16,6 +16,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 FDSListFleetsResponse& ListFleetsResponse, 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 edc6b29e..e4d4f29d 100644 --- a/Source/DedicatedServers/Private/UI/HTTP/HTTPRequestManager.cpp +++ b/Source/DedicatedServers/Private/UI/HTTP/HTTPRequestManager.cpp @@ -2,3 +2,47 @@ #include "UI/HTTP/HTTPRequestManager.h" + +#include "JsonObjectConverter.h" +#include "DedicatedServers/DedicatedServers.h" +#include "UI/HTTP/HTTPRequestTypes.h" + +bool UHTTPRequestManager::ContainsErrors(TSharedPtr JsonObject, bool bLogErrors) +{ + if (JsonObject->HasField(TEXT("errorType")) || JsonObject->HasField(TEXT("errorMessage"))) + { + FString ErrorType = JsonObject->HasField(TEXT("errorType")) ? JsonObject->GetStringField(TEXT("errorType")) : FString("Unknown Error"); + FString ErrorMessage = JsonObject->HasField(TEXT("errorMessage")) ? JsonObject->GetStringField(TEXT("errorMessage")) : FString("Unknown Error Message"); + + if (bLogErrors) + { + UE_LOGFMT(LogDedicatedServers, Error, "Error Type: {ErrorType}", ErrorType); + UE_LOGFMT(LogDedicatedServers, Error, "Error Message: {ErrorMessage}", ErrorMessage); + } + return true; + } + + if (JsonObject->HasField(TEXT("$fault"))) + { + FString ErrorType = JsonObject->HasField(TEXT("name")) ? JsonObject->GetStringField(TEXT("name")) : FString("Unknown Error"); + + if (bLogErrors) + { + 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")); + FDSMetaData DSMetaData; + FJsonObjectConverter::JsonObjectToUStruct(MetaDataJsonObject.ToSharedRef(), &DSMetaData); + + DSMetaData.Dump(); + } +} diff --git a/Source/DedicatedServers/Public/UI/APITest/APITestManager.h b/Source/DedicatedServers/Public/UI/APITest/APITestManager.h index 981b7064..814f9805 100644 --- a/Source/DedicatedServers/Public/UI/APITest/APITestManager.h +++ b/Source/DedicatedServers/Public/UI/APITest/APITestManager.h @@ -7,6 +7,9 @@ #include "UI/HTTP/HTTPRequestManager.h" #include "APITestManager.generated.h" +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnListFleetsResponseReceived, const FDSListFleetsResponse&, ListFleetsResponse, bool, bWasSuccessful); + + /** * */ @@ -18,7 +21,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/APITest/APITestOverlay.h b/Source/DedicatedServers/Public/UI/APITest/APITestOverlay.h index 3289e2df..e5eada62 100644 --- a/Source/DedicatedServers/Public/UI/APITest/APITestOverlay.h +++ b/Source/DedicatedServers/Public/UI/APITest/APITestOverlay.h @@ -8,6 +8,7 @@ class UListFleetsBox; class UAPITestManager; +struct FDSListFleetsResponse; /** * */ @@ -33,4 +34,10 @@ private: UPROPERTY() TObjectPtr APITestManager; + UFUNCTION() + void ListFleetsButtonClicked(); + + UFUNCTION() + void OnListFleetsResponseReceived(const FDSListFleetsResponse& ListFleetsResponse, bool bWasSuccessful); + }; diff --git a/Source/DedicatedServers/Public/UI/HTTP/HTTPRequestManager.h b/Source/DedicatedServers/Public/UI/HTTP/HTTPRequestManager.h index 99135b5f..7b260533 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; /** * @@ -20,4 +21,7 @@ protected: UPROPERTY(EditDefaultsOnly) TObjectPtr APIData; + + bool ContainsErrors(TSharedPtr JsonObject, bool bLogErrors = true); + void DumpMetadata(TSharedPtr JsonObject); };