Added Module Remote To add HTTP basic RemoteControl
This commit is contained in:
75
Source/DTFluxRemote/Public/DTFluxRemoteMessage.h
Normal file
75
Source/DTFluxRemote/Public/DTFluxRemoteMessage.h
Normal file
@ -0,0 +1,75 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "DTFluxRemoteMessage.generated.h"
|
||||
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FDTFluxRemoteBasicData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="DTFlux|Remote")
|
||||
FDateTime UpdateAt = FDateTime::Now();
|
||||
FDTFluxRemoteBasicData() = default;
|
||||
FDTFluxRemoteBasicData(const FDateTime& InUpdateAt): UpdateAt(InUpdateAt){};
|
||||
};
|
||||
|
||||
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FDTFluxRemoteTitleData : public FDTFluxRemoteBasicData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="DTFlux|Remote")
|
||||
FString FirstName = "";
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="DTFlux|Remote")
|
||||
FString LastName = "";
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="DTFlux|Remote")
|
||||
FString Function1 = "";
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="DTFlux|Remote")
|
||||
FString Function2 = "";
|
||||
|
||||
FDTFluxRemoteTitleData() = default;
|
||||
FDTFluxRemoteTitleData(const FString InFirstName, const FString InLastName, const FString InFunction1, const FString InFunction2):
|
||||
FirstName(InFirstName), LastName(InLastName), Function1(InFunction1), Function2(InFunction2){};
|
||||
};
|
||||
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FDTFluxRemoteBibData : public FDTFluxRemoteBasicData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="DTFlux|Remote")
|
||||
int Bib = -1;
|
||||
|
||||
FDTFluxRemoteBibData() = default;
|
||||
FDTFluxRemoteBibData(int InBib): Bib(InBib){};
|
||||
};
|
||||
USTRUCT(BlueprintType)
|
||||
struct FDTFluxRemoteCommandData : public FDTFluxRemoteBasicData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
FDTFluxRemoteCommandData() = default;
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="DTFlux|Remote")
|
||||
int Type = -1;
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="DTFlux|Remote")
|
||||
FString Data = "";
|
||||
|
||||
FDTFluxRemoteCommandData(int InType, FString InData):
|
||||
Type(InType), Data(InData){};
|
||||
};
|
||||
|
||||
13
Source/DTFluxRemote/Public/DTFluxRemoteModule.h
Normal file
13
Source/DTFluxRemote/Public/DTFluxRemoteModule.h
Normal file
@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
DTFLUXREMOTE_API DECLARE_LOG_CATEGORY_EXTERN(logDTFluxRemote, Log, All);
|
||||
|
||||
class DTFLUXREMOTE_API FDTFluxRemoteModule : public IModuleInterface
|
||||
{
|
||||
public:
|
||||
virtual void StartupModule() override;
|
||||
virtual void ShutdownModule() override;
|
||||
};
|
||||
82
Source/DTFluxRemote/Public/DTFluxRemoteSubsystem.h
Normal file
82
Source/DTFluxRemote/Public/DTFluxRemoteSubsystem.h
Normal file
@ -0,0 +1,82 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Subsystems/EngineSubsystem.h"
|
||||
#include "DTFluxRemoteMessage.h"
|
||||
#include "HttpRouteHandle.h"
|
||||
#include "IHttpRouter.h"
|
||||
#include "DTFluxRemoteSubsystem.generated.h"
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnTitleReceived, const FDTFluxRemoteTitleData&, TitleData);
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnTitleBibReceived, const FDTFluxRemoteBibData&, TitleBibData);
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnCommandReceived, const FDTFluxRemoteCommandData&, CommandData);
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS(BlueprintType, Category="DTFlux|Remote")
|
||||
class DTFLUXREMOTE_API UDTFluxRemoteSubsystem : public UEngineSubsystem
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
public:
|
||||
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
||||
virtual void Deinitialize() override;
|
||||
|
||||
UPROPERTY(BlueprintAssignable, Category = "DTFlux API")
|
||||
FOnTitleReceived OnTitleReceived;
|
||||
|
||||
UPROPERTY(BlueprintAssignable, Category = "DTFlux API")
|
||||
FOnTitleBibReceived OnTitleBibReceived;
|
||||
|
||||
UPROPERTY(BlueprintAssignable, Category = "DTFlux API")
|
||||
FOnCommandReceived OnCommandReceived;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux API")
|
||||
bool StartHTTPServer(int32 Port = 63350);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux API")
|
||||
void StopHTTPServer();
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux API", BlueprintPure)
|
||||
bool IsHTTPServerRunning() const;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux API", BlueprintPure)
|
||||
int32 GetServerPort() const { return ServerPort; }
|
||||
|
||||
// Manual data processing (for testing)
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux API")
|
||||
bool ProcessTitleData(const FString& JsonString);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux API")
|
||||
bool ProcessTitleBibData(const FString& JsonString);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux API")
|
||||
bool ProcessCommandData(const FString& JsonString);
|
||||
|
||||
private:
|
||||
void SetupRoutes();
|
||||
|
||||
bool HandleTitleRequest(const FHttpServerRequest& Request, const FHttpResultCallback& OnComplete);
|
||||
bool HandleTitleBibRequest(const FHttpServerRequest& Request, const FHttpResultCallback& OnComplete);
|
||||
bool HandleCommandsRequest(const FHttpServerRequest& Request, const FHttpResultCallback& OnComplete);
|
||||
|
||||
TSharedPtr<FJsonObject> ParseJsonFromRequest(const FHttpServerRequest& Request);
|
||||
FString CreateSuccessResponse(const FString& Message = TEXT("Success"));
|
||||
FString CreateErrorResponse(const FString& Error, int32 Code = 400);
|
||||
|
||||
bool ParseTitleData(const TSharedPtr<FJsonObject>& JsonObject, FDTFluxRemoteTitleData& OutData);
|
||||
bool ParseTitleBibData(const TSharedPtr<FJsonObject>& JsonObject, FDTFluxRemoteBibData& OutData);
|
||||
bool ParseCommandData(const TSharedPtr<FJsonObject>& JsonObject, FDTFluxRemoteCommandData& OutData);
|
||||
|
||||
private:
|
||||
TSharedPtr<IHttpRouter> HttpRouter;
|
||||
int32 ServerPort = 63350;
|
||||
bool bServerRunning = false;
|
||||
|
||||
FHttpRouteHandle TitleRouteHandle;
|
||||
FHttpRouteHandle TitleBibRouteHandle;
|
||||
FHttpRouteHandle CommandsRouteHandle;
|
||||
};
|
||||
Reference in New Issue
Block a user