// DTFluxRemotedLevelController.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "DTFluxRemoteSubsystem.h" #include "DTFluxRemotedLevelController.generated.h" UCLASS(BlueprintType, Blueprintable) class DTFLUXREMOTE_API ADTFluxRemotedLevelController : public AActor { GENERATED_BODY() public: ADTFluxRemotedLevelController(); protected: virtual void PostInitializeComponents() override; virtual void BeginPlay() override; virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; // Subsystem et binding UPROPERTY(BlueprintReadOnly, Category = "DTFlux") UDTFluxRemoteSubsystem* RemoteSubsystem; FDelegateHandle TitleReceivedHandle; FDelegateHandle TitleBibReceivedHandle; FDelegateHandle CommandReceivedHandle; bool bEventsBound; // Fonctions de binding void InitializeSubsystemBinding(); // ✅ CORRECTION : Callbacks avec UFUNCTION() UFUNCTION() void OnTitleDataReceived(const FDTFluxRemoteTitleData& TitleData); UFUNCTION() void OnTitleBibDataReceived(const FDTFluxRemoteBibData& BibData); UFUNCTION() void OnCommandDataReceived(const FDTFluxRemoteCommandData& CommandData); public: // Events Blueprint-friendly UPROPERTY(BlueprintAssignable, Category = "DTFlux Events") FOnTitleReceived OnTitleReceived; UPROPERTY(BlueprintAssignable, Category = "DTFlux Events") FOnTitleBibReceived OnTitleBibReceived; UPROPERTY(BlueprintAssignable, Category = "DTFlux Events") FOnCommandReceived OnCommandReceived; // Fonctions utilitaires UFUNCTION(BlueprintCallable, Category = "DTFlux") bool IsSubsystemAvailable() const; UFUNCTION(BlueprintCallable, Category = "DTFlux") bool IsHTTPServerRunning() const; UFUNCTION(BlueprintCallable, Category = "DTFlux") void StartHTTPServer(int32 Port = 63350); UFUNCTION(BlueprintCallable, Category = "DTFlux") void StopHTTPServer(); UFUNCTION(BlueprintCallable, Category = "DTFlux") void EnsureSubsystemBinding(); protected: // Events Blueprint implémentables UFUNCTION(BlueprintImplementableEvent, Category = "DTFlux Events") void BP_OnTitleDataReceived(const FDTFluxRemoteTitleData& TitleData); UFUNCTION(BlueprintImplementableEvent, Category = "DTFlux Events") void BP_OnTitleBibDataReceived(const FDTFluxRemoteBibData& BibData); UFUNCTION(BlueprintImplementableEvent, Category = "DTFlux Events") void BP_OnCommandDataReceived(const FDTFluxRemoteCommandData& CommandData); // Fonctions virtuelles C++ UFUNCTION(BlueprintNativeEvent, Category = "DTFlux Events") void HandleTitleData(const FDTFluxRemoteTitleData& TitleData); virtual void HandleTitleData_Implementation(const FDTFluxRemoteTitleData& TitleData); UFUNCTION(BlueprintNativeEvent, Category = "DTFlux Events") void HandleTitleBibData(const FDTFluxRemoteBibData& BibData); virtual void HandleTitleBibData_Implementation(const FDTFluxRemoteBibData& BibData); UFUNCTION(BlueprintNativeEvent, Category = "DTFlux Events") void HandleCommandData(const FDTFluxRemoteCommandData& CommandData); virtual void HandleCommandData_Implementation(const FDTFluxRemoteCommandData& CommandData); };