Compare commits
8 Commits
3912fe52c6
...
new/API_Ga
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9fb60888ba | ||
|
|
acc105c84d | ||
|
|
d9eb52c047 | ||
|
|
e95360489b | ||
|
|
6f3e1d1f86 | ||
|
|
30c1e42379 | ||
|
|
7f154aa6f9 | ||
|
|
8d6f3f68f1 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Content/DedicatedServers/Portal/BP_PortalHUD.uasset
Normal file
BIN
Content/DedicatedServers/Portal/BP_PortalHUD.uasset
Normal file
Binary file not shown.
BIN
Content/DedicatedServers/Portal/BP_PortalManager.uasset
Normal file
BIN
Content/DedicatedServers/Portal/BP_PortalManager.uasset
Normal file
Binary file not shown.
BIN
Content/DedicatedServers/Portal/WBP_JoinGame.uasset
Normal file
BIN
Content/DedicatedServers/Portal/WBP_JoinGame.uasset
Normal file
Binary file not shown.
BIN
Content/DedicatedServers/Portal/WBP_SignInOverlay.uasset
Normal file
BIN
Content/DedicatedServers/Portal/WBP_SignInOverlay.uasset
Normal file
Binary file not shown.
@@ -24,7 +24,9 @@ public class DedicatedServers : ModuleRules
|
||||
"Slate",
|
||||
"SlateCore",
|
||||
"OpenSSL",
|
||||
"UMG"
|
||||
"UMG",
|
||||
"Json",
|
||||
"JsonUtilities"
|
||||
});
|
||||
|
||||
// Adds in the plugin for GameLiftServerSDK if it is the server build.
|
||||
|
||||
@@ -4,3 +4,5 @@
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
IMPLEMENT_MODULE( FDefaultModuleImpl, DedicateServers );
|
||||
|
||||
DEFINE_LOG_CATEGORY(LogDedicatedServers);
|
||||
|
||||
@@ -3,3 +3,5 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
|
||||
DECLARE_LOG_CATEGORY_EXTERN(LogDedicatedServers, Log, All)
|
||||
@@ -0,0 +1,4 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "UI/API/GameSessions/JoinGame.h"
|
||||
@@ -3,28 +3,46 @@
|
||||
|
||||
#include "UI/API_Test/APITestManager.h"
|
||||
#include "HttpModule.h"
|
||||
#include "JsonObjectConverter.h"
|
||||
#include "Data/API/APIData.h"
|
||||
#include "DedicatedServers/DedicatedServers.h"
|
||||
#include "GameplayTags/DedicatedServersTags.h"
|
||||
#include "Interfaces/IHttpResponse.h"
|
||||
#include "UI/HTTP/HTTPRequestTypes.h"
|
||||
|
||||
void UAPITestManager::ListFleetsButtonClicked()
|
||||
void UAPITestManager::ListFleets()
|
||||
{
|
||||
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");
|
||||
|
||||
TSharedPtr<FJsonObject> JsonObject;
|
||||
TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(Response->GetContentAsString());
|
||||
|
||||
if (FJsonSerializer::Deserialize(JsonReader, JsonObject))
|
||||
{
|
||||
const TSharedPtr<FJsonObject>* ErrorObjPtr = nullptr;;
|
||||
|
||||
if (ContainsErrors(JsonObject, false))
|
||||
{
|
||||
OnListFleetsResponseReceived.Broadcast(FDS_ListFleetsResponse(), false);
|
||||
return;
|
||||
}
|
||||
DumpMetaData(JsonObject);
|
||||
|
||||
FDS_ListFleetsResponse ListFleetsResponse;
|
||||
FJsonObjectConverter::JsonObjectToUStruct(JsonObject.ToSharedRef(), &ListFleetsResponse);
|
||||
ListFleetsResponse.Dump();
|
||||
OnListFleetsResponseReceived.Broadcast(ListFleetsResponse, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,11 @@
|
||||
|
||||
|
||||
#include "Components/Button.h"
|
||||
#include "Components/ScrollBox.h"
|
||||
#include "Components/TextBlock.h"
|
||||
#include "UI/API/ListFleets/FleetId.h"
|
||||
#include "UI/API/ListFleets/ListFleetsBox.h"
|
||||
#include "UI/HTTP/HTTPRequestTypes.h"
|
||||
|
||||
|
||||
void UAPITestOverlay::NativeConstruct()
|
||||
@@ -17,5 +21,40 @@ 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 (APITestManager->OnListFleetsResponseReceived.IsAlreadyBound(this, &UAPITestOverlay::OnListFleetsResponseReceived))
|
||||
{
|
||||
APITestManager->OnListFleetsResponseReceived.RemoveDynamic(this, &UAPITestOverlay::OnListFleetsResponseReceived);
|
||||
}
|
||||
check(FleetIdWidgetClass);
|
||||
ListFleetsBox->ScrollBox_ListFleets->ClearChildren();
|
||||
if (bWasSuccessful)
|
||||
{
|
||||
for (const FString& FleetId : ListFleetResponse.FleetIds)
|
||||
{
|
||||
UFleetId* FleetIdWidget = CreateWidget<UFleetId>(this, FleetIdWidgetClass);
|
||||
FleetIdWidget->TextBlock_FleetId->SetText(FText::FromString(FleetId));
|
||||
ListFleetsBox->ScrollBox_ListFleets->AddChild(FleetIdWidget);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UFleetId* FleetIdWidget = CreateWidget<UFleetId>(this, FleetIdWidgetClass);
|
||||
FleetIdWidget->TextBlock_FleetId->SetText(FText::FromString("Something went wrong!"));
|
||||
ListFleetsBox->ScrollBox_ListFleets->AddChild(FleetIdWidget);
|
||||
}
|
||||
ListFleetsBox->Button_ListFleets->SetIsEnabled(true);
|
||||
}
|
||||
|
||||
@@ -2,3 +2,44 @@
|
||||
|
||||
|
||||
#include "UI/HTTP/HTTPRequestManager.h"
|
||||
|
||||
#include "HTTPRequestTypes.h"
|
||||
#include "JsonObjectConverter.h"
|
||||
#include "DedicatedServers/DedicatedServers.h"
|
||||
|
||||
bool UHTTPRequestManager::ContainsErrors(TSharedPtr<FJsonObject> 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<FJsonObject> JsonObject)
|
||||
{
|
||||
if (JsonObject->HasField(TEXT("$metadata")))
|
||||
{
|
||||
TSharedPtr<FJsonObject> MetaDataJsonObject = JsonObject->GetObjectField(TEXT("$metadata"));
|
||||
FDS_MetaData DSMetaData;
|
||||
FJsonObjectConverter::JsonObjectToUStruct(MetaDataJsonObject.ToSharedRef(), &DSMetaData);
|
||||
DSMetaData.Dump();
|
||||
}
|
||||
}
|
||||
|
||||
24
Source/DedicatedServers/Private/UI/HTTP/HTTPRequestTypes.cpp
Normal file
24
Source/DedicatedServers/Private/UI/HTTP/HTTPRequestTypes.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include "UI/HTTP/HTTPRequestTypes.h"
|
||||
#include "DedicatedServers/DedicatedServers.h"
|
||||
|
||||
void FDS_MetaData::Dump() const
|
||||
{
|
||||
UE_LOGFMT(LogDedicatedServers, Log, "MetaData:");
|
||||
UE_LOGFMT(LogDedicatedServers, Log, "httpStatusCode: {httpStatusCode}", httpStatusCode);
|
||||
UE_LOGFMT(LogDedicatedServers, Log, "requestId: {requestId}", requestId);
|
||||
UE_LOGFMT(LogDedicatedServers, Log, "attemps: {attempts}", attempts);
|
||||
UE_LOGFMT(LogDedicatedServers, Log, "totalRetryDelay: {totalRetryDelay}", totalRetryDelay);
|
||||
}
|
||||
|
||||
void FDS_ListFleetsResponse::Dump() const
|
||||
{
|
||||
UE_LOGFMT(LogDedicatedServers, Log, "ListFleetsResponse:");
|
||||
for (const FString& FleetId : FleetIds)
|
||||
{
|
||||
UE_LOGFMT(LogDedicatedServers, Log, "FleetId: {FleetId}", FleetId);
|
||||
}
|
||||
if (!NextToken.IsEmpty())
|
||||
{
|
||||
UE_LOGFMT(LogDedicatedServers, Log, "NextToken: {NextToken}", NextToken);
|
||||
}
|
||||
}
|
||||
43
Source/DedicatedServers/Private/UI/HTTP/HTTPRequestTypes.h
Normal file
43
Source/DedicatedServers/Private/UI/HTTP/HTTPRequestTypes.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
// Because this is in the private section is is still usable by the DedicatedServer Module, but not outside of the module.
|
||||
|
||||
#include "HTTPRequestTypes.generated.h"
|
||||
|
||||
USTRUCT()
|
||||
struct FDS_MetaData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY()
|
||||
int32 httpStatusCode{};
|
||||
|
||||
UPROPERTY()
|
||||
FString requestId{};
|
||||
|
||||
UPROPERTY()
|
||||
int32 attempts{};
|
||||
|
||||
UPROPERTY()
|
||||
double totalRetryDelay{};
|
||||
|
||||
void Dump() const;
|
||||
};
|
||||
|
||||
USTRUCT()
|
||||
struct FDS_ListFleetsResponse
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY()
|
||||
TArray<FString> FleetIds{};
|
||||
|
||||
UPROPERTY()
|
||||
FString NextToken{};
|
||||
|
||||
void Dump() const;
|
||||
};
|
||||
23
Source/DedicatedServers/Private/UI/Portal/PortalHUD.cpp
Normal file
23
Source/DedicatedServers/Private/UI/Portal/PortalHUD.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "UI/Portal/PortalHUD.h"
|
||||
#include "UI/Portal/SignIn/SignInOverlay.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
|
||||
void APortalHUD::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
APlayerController* OwningPlayerController = GetOwningPlayerController();
|
||||
SignInOverlay = CreateWidget<USignInOverlay>(OwningPlayerController, SignInOverlayClass);
|
||||
if (IsValid(SignInOverlay))
|
||||
{
|
||||
SignInOverlay->AddToViewport();
|
||||
}
|
||||
|
||||
const FInputModeGameAndUI InputModeData;
|
||||
OwningPlayerController->SetInputMode(InputModeData);
|
||||
OwningPlayerController->SetShowMouseCursor(true);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "UI/Portal/PortalManager.h"
|
||||
@@ -0,0 +1,14 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "UI/Portal/SignIn/SignInOverlay.h"
|
||||
|
||||
#include "UI/Portal/PortalManager.h"
|
||||
|
||||
void USignInOverlay::NativeConstruct()
|
||||
{
|
||||
Super::NativeConstruct();
|
||||
check(PortalManagerClass);
|
||||
|
||||
PortalManager = NewObject<UPortalManager>(PortalManagerClass);
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "JoinGame.generated.h"
|
||||
|
||||
class UButton;
|
||||
class UTextBlock;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class DEDICATEDSERVERS_API UJoinGame : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
TObjectPtr<UButton> Button_JoinGame;
|
||||
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
TObjectPtr<UTextBlock> TextBlock_StatusMessage;
|
||||
};
|
||||
@@ -18,6 +18,6 @@ class DEDICATEDSERVERS_API UFleetId : public UUserWidget
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
UPROPERTY(meta = (BindWidget), BlueprintReadWrite)
|
||||
TObjectPtr<UTextBlock> TextBlock_FleetId;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
|
||||
class UAPITestManager;
|
||||
class UListFleetsBox;
|
||||
struct FDS_ListFleetsResponse;
|
||||
class UFleetId;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@@ -21,6 +24,9 @@ public:
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
TSubclassOf<UAPITestManager> APITestManagerClass;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
TSubclassOf<UFleetId> FleetIdWidgetClass;
|
||||
|
||||
protected:
|
||||
virtual void NativeConstruct() override;
|
||||
|
||||
@@ -32,6 +38,11 @@ private:
|
||||
UPROPERTY()
|
||||
TObjectPtr<UAPITestManager> APITestManager;
|
||||
|
||||
UFUNCTION()
|
||||
void ListFleetsButtonClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void OnListFleetsResponseReceived(const FDS_ListFleetsResponse& ListFleetResponse, bool bWasSuccessful);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "HTTPRequestManager.generated.h"
|
||||
|
||||
class UAPIData;
|
||||
class FJsonObject;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -21,5 +22,7 @@ protected:
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
TObjectPtr<UAPIData> APIData;
|
||||
|
||||
bool ContainsErrors(TSharedPtr<FJsonObject> JsonObject, bool bSuppressLog = true);
|
||||
void DumpMetaData(TSharedPtr<FJsonObject> JsonObject);
|
||||
|
||||
};
|
||||
|
||||
32
Source/DedicatedServers/Public/UI/Portal/PortalHUD.h
Normal file
32
Source/DedicatedServers/Public/UI/Portal/PortalHUD.h
Normal file
@@ -0,0 +1,32 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/HUD.h"
|
||||
#include "PortalHUD.generated.h"
|
||||
|
||||
class USignInOverlay;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class DEDICATEDSERVERS_API APortalHUD : public AHUD
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
TSubclassOf<USignInOverlay> SignInOverlayClass;
|
||||
|
||||
protected:
|
||||
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
private:
|
||||
|
||||
UPROPERTY()
|
||||
TObjectPtr<USignInOverlay> SignInOverlay;
|
||||
};
|
||||
16
Source/DedicatedServers/Public/UI/Portal/PortalManager.h
Normal file
16
Source/DedicatedServers/Public/UI/Portal/PortalManager.h
Normal file
@@ -0,0 +1,16 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "UI/HTTP/HTTPRequestManager.h"
|
||||
#include "PortalManager.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class DEDICATEDSERVERS_API UPortalManager : public UHTTPRequestManager
|
||||
{
|
||||
GENERATED_BODY()
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "SignInOverlay.generated.h"
|
||||
|
||||
class UJoinGame;
|
||||
class UPortalManager;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class DEDICATEDSERVERS_API USignInOverlay : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
TObjectPtr<UJoinGame> JoinGameWidget;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
TSubclassOf<UPortalManager> PortalManagerClass;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
virtual void NativeConstruct() override;
|
||||
private:
|
||||
|
||||
UPROPERTY()
|
||||
TObjectPtr<UPortalManager> PortalManager;
|
||||
};
|
||||
Reference in New Issue
Block a user