Added Module Remote To add HTTP basic RemoteControl
This commit is contained in:
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