Fixing Various Bugs On Delegates
This commit is contained in:
@ -1,41 +1,54 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
// ================================================================================================
|
||||
// DTFluxNetworkSubsystem.h - Interface UObject avec compatibilité Blueprint
|
||||
// ================================================================================================
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "DTFluxQueuedManager.h"
|
||||
#include "Struct/DTFluxServerResponseStruct.h"
|
||||
#include "Subsystems/EngineSubsystem.h"
|
||||
#include "Types/DTFluxNetworkSettingsTypes.h"
|
||||
#include "Types/Enum/DTFluxCoreEnum.h"
|
||||
#include "Types/Struct/DTFluxRaceDataStructs.h"
|
||||
#include "Types/Struct/DTFluxRankingStructs.h"
|
||||
#include "Types/Struct/DTFluxSplitSensor.h"
|
||||
#include "Types/Struct/DTFluxTeamListStruct.h"
|
||||
#include "DTFluxQueuedManager.h"
|
||||
#include "DTFluxNetworkSubsystem.generated.h"
|
||||
|
||||
|
||||
// Forward declarations
|
||||
class FDTFluxWebSocketClient;
|
||||
class UDTFluxQueuedManager;
|
||||
class FDTFluxQueuedRequestManager;
|
||||
|
||||
typedef TSharedPtr<FDTFluxWebSocketClient> FDTFluxWebSocketClientSP;
|
||||
class FDTFluxHttpClient;
|
||||
typedef TSharedPtr<FDTFluxHttpClient> FDTFluxHttpClientSP;
|
||||
|
||||
// ================================================================================================
|
||||
// DELEGATES BLUEPRINT POUR LES REQUÊTES TRACKÉES
|
||||
// ================================================================================================
|
||||
|
||||
// Delegates pour les requêtes avec callback
|
||||
DECLARE_DELEGATE_TwoParams(FOnDTFluxRequestResponseError, const FGuid&, const FString&);
|
||||
DECLARE_DELEGATE_TwoParams(FOnDTFluxTrackedRequestResponse, const FGuid&, FDTFluxServerResponse&);
|
||||
DECLARE_DELEGATE_TwoParams(FOnDTFluxTrackedRequestTimeout, const FGuid&, const FString& /*ErrorMessage*/);
|
||||
// Delegates Blueprint pour les requêtes avec tracking
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnDTFluxTrackedRequestCompleted, const FGuid&, RequestId,
|
||||
EDTFluxApiDataType, RequestType, const FString&, ResponseData);
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnDTFluxTrackedRequestFailed, const FGuid&, RequestId,
|
||||
EDTFluxApiDataType, RequestType, const FString&, ErrorMessage);
|
||||
|
||||
// ================================================================================================
|
||||
// DELEGATES LEGACY POUR LA COMPATIBILITÉ
|
||||
// ================================================================================================
|
||||
|
||||
DECLARE_DELEGATE_OneParam(FOnRaceDataReceived, const FDTFluxRaceData& /*RaceDataDefinition*/);
|
||||
DECLARE_DELEGATE_OneParam(FOnTeamListReceived, const FDTFluxTeamListDefinition& /*TeamListDefinition*/);
|
||||
DECLARE_DELEGATE_OneParam(FOnStageRankingReceived, const FDTFluxStageRankings& /*StageRankings*/);
|
||||
DECLARE_DELEGATE_OneParam(FOnSplitRankingReceived, const FDTFluxSplitRankings& /*SplitRankings*/);
|
||||
DECLARE_DELEGATE_OneParam(FOnContestRankingReceived, const FDTFluxContestRankings& /*ContestRankings*/);
|
||||
DECLARE_DELEGATE_OneParam(FOnSplitSensorReceived, const FDTFluxSplitSensorInfo& /*SplitSensorInfo*/);
|
||||
DECLARE_DELEGATE_OneParam(FOnTeamUpdateReceived, const FDTFluxTeamListDefinition& /*ParticipantToUpdate*/);
|
||||
DECLARE_DELEGATE_OneParam(FOnTeamStatusUpdateReceived, const FDTFluxTeamStatusUpdate& /*TeamToUpdate*/);
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnWebSocketConnected);
|
||||
|
||||
// ================================================================================================
|
||||
// NETWORK SUBSYSTEM - Interface UObject avec compatibilité Blueprint
|
||||
// ================================================================================================
|
||||
|
||||
/**
|
||||
*
|
||||
* Subsystem réseau DTFlux avec support complet des requêtes trackées et compatibilité legacy
|
||||
* Combine l'efficacité du RequestManager C++ avec l'interface Blueprint UObject
|
||||
*/
|
||||
UCLASS(Blueprintable)
|
||||
class DTFLUXNETWORK_API UDTFluxNetworkSubsystem : public UEngineSubsystem
|
||||
@ -43,180 +56,236 @@ class DTFLUXNETWORK_API UDTFluxNetworkSubsystem : public UEngineSubsystem
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
UPROPERTY()
|
||||
// === ÉTAT DE CONNEXION ===
|
||||
UPROPERTY(BlueprintReadOnly, Category = "DTFlux|Network")
|
||||
EDTFluxConnectionStatus WsStatus = EDTFluxConnectionStatus::Unset;
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnWebSocketConnected);
|
||||
// === CONNEXION WEBSOCKET (Legacy) ===
|
||||
|
||||
UPROPERTY(BlueprintAssignable, Category="DTFlux|Network")
|
||||
FOnWebSocketConnected OnWebSocketConnected;
|
||||
|
||||
DECLARE_DELEGATE_OneParam(FOnRaceDataReceived, const FDTFluxRaceData& /*RaceDataDefinition*/);
|
||||
FOnRaceDataReceived OnRaceDataReceived;
|
||||
|
||||
FOnRaceDataReceived& OnReceivedRaceData()
|
||||
{
|
||||
return OnRaceDataReceived;
|
||||
};
|
||||
|
||||
// === DELEGATES POUR LES DONNÉES REÇUES (PUSH) ===
|
||||
DECLARE_DELEGATE_OneParam(FOnTeamListReceived, const FDTFluxTeamListDefinition& /*TeamListDefinition*/);
|
||||
FOnTeamListReceived OnTeamListReceived;
|
||||
|
||||
FOnTeamListReceived& OnReceivedTeamList()
|
||||
{
|
||||
return OnTeamListReceived;
|
||||
};
|
||||
|
||||
DECLARE_DELEGATE_OneParam(FOnStageRankingReceived, const FDTFluxStageRankings& /*StageRankings*/);
|
||||
FOnStageRankingReceived OnStageRankingReceived;
|
||||
|
||||
FOnStageRankingReceived& OnReceivedStageRanking()
|
||||
{
|
||||
return OnStageRankingReceived;
|
||||
}
|
||||
|
||||
DECLARE_DELEGATE_OneParam(FOnSplitRankingReceived, const FDTFluxSplitRankings& /*SplitRankings*/);
|
||||
FOnSplitRankingReceived OnSplitRankingReceived;
|
||||
|
||||
FOnSplitRankingReceived& OnReceivedSplitRanking()
|
||||
{
|
||||
return OnSplitRankingReceived;
|
||||
}
|
||||
|
||||
DECLARE_DELEGATE_OneParam(FOnContestRankingReceived, const FDTFluxContestRankings& /*ContestRankings*/);
|
||||
FOnContestRankingReceived OnContestRankingReceived;
|
||||
|
||||
FOnContestRankingReceived& OnReceivedContestRanking()
|
||||
{
|
||||
return OnContestRankingReceived;
|
||||
};
|
||||
|
||||
// === DELEGATES POUR LES DONNÉES REÇUES (PULL) ===
|
||||
DECLARE_DELEGATE_OneParam(FOnSplitSensorReceived, const FDTFluxSplitSensorInfo& /*ContestRankings*/);
|
||||
FOnSplitSensorReceived OnSplitSensorReceived;
|
||||
|
||||
FOnSplitSensorReceived& OnReceivedSplitSensor()
|
||||
{
|
||||
return OnSplitSensorReceived;
|
||||
};
|
||||
|
||||
DECLARE_DELEGATE_OneParam(FOnTeamUpdateReceived, const FDTFluxTeamListDefinition& /*ParticipantToUpdate*/);
|
||||
FOnTeamUpdateReceived OnTeamUpdateReceived;
|
||||
|
||||
FOnTeamUpdateReceived& OnReceivedTeamUpdate()
|
||||
{
|
||||
return OnTeamUpdateReceived;
|
||||
};
|
||||
|
||||
DECLARE_DELEGATE_OneParam(FOnTeamStatusUpdateReceived, const FDTFluxTeamStatusUpdate& /*TeamToUpdate*/);
|
||||
FOnTeamStatusUpdateReceived OnTeamStatusUpdateReceived;
|
||||
|
||||
FOnTeamStatusUpdateReceived& OnReceivedTeamStatusUpdate()
|
||||
{
|
||||
return OnTeamStatusUpdateReceived;
|
||||
};
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Network")
|
||||
/**
|
||||
* Se connecter au serveur WebSocket
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Network")
|
||||
void Connect();
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Network")
|
||||
|
||||
/**
|
||||
* Se déconnecter du serveur WebSocket
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Network")
|
||||
void Disconnect();
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Network")
|
||||
|
||||
/**
|
||||
* Reconnecter au serveur WebSocket
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Network")
|
||||
void Reconnect();
|
||||
|
||||
// === REQUÊTES TRACKÉES (Nouveau système optimisé) ===
|
||||
|
||||
// === REQUÊTES AVEC QUEUE ET TRACKING ===
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Tracked Requests")
|
||||
FGuid SendTrackedRequest(EDTFluxApiDataType RequestType, int32 ContestId = -1, int32 StageId = -1,
|
||||
int32 SplitId = -1, float TimeoutSeconds = 30.0f);
|
||||
/**
|
||||
* Envoyer une requête trackée avec cache, timeout et retry
|
||||
* @param RequestType Type de requête (ContestRanking, StageRanking, etc.)
|
||||
* @param ContestId ID du contest (-1 si non applicable)
|
||||
* @param StageId ID du stage (-1 si non applicable)
|
||||
* @param SplitId ID du split (-1 si non applicable)
|
||||
* @param TimeoutSeconds Timeout en secondes
|
||||
* @param MaxRetries Nombre maximum de tentatives
|
||||
* @param bEnableCache Activer le cache pour cette requête
|
||||
* @return GUID de la requête pour le suivi
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Tracked Requests")
|
||||
FGuid SendTrackedRequest(
|
||||
EDTFluxApiDataType RequestType,
|
||||
int32 ContestId = -1,
|
||||
int32 StageId = -1,
|
||||
int32 SplitId = -1,
|
||||
float TimeoutSeconds = 5.0f,
|
||||
int32 MaxRetries = 3,
|
||||
bool bEnableCache = true
|
||||
);
|
||||
|
||||
FGuid SendTrackedRequestWithCallback(EDTFluxApiDataType RequestType, int32 ContestId, int32 StageId, int32 SplitId,
|
||||
FOnDTFluxTrackedRequestResponse OnCompleted,
|
||||
FOnDTFluxTrackedRequestTimeout OnTimeout,
|
||||
TOptional<FOnDTFluxRequestResponseError> OnError = TOptional<
|
||||
FOnDTFluxRequestResponseError>(),
|
||||
float TimeoutSeconds = 30.0f);
|
||||
/**
|
||||
* Envoyer une requête trackée avec callbacks C++ (non Blueprint)
|
||||
* @param RequestType Type de requête
|
||||
* @param ContestId ID du contest
|
||||
* @param StageId ID du stage
|
||||
* @param SplitId ID du split
|
||||
* @param OnSuccess Callback appelé en cas de succès
|
||||
* @param OnError Callback appelé en cas d'erreur
|
||||
* @param TimeoutSeconds Timeout en secondes
|
||||
* @param MaxRetries Nombre maximum de tentatives
|
||||
* @param bEnableCache Activer le cache
|
||||
* @return GUID de la requête
|
||||
*/
|
||||
FGuid SendTrackedRequestWithCallbacks(
|
||||
EDTFluxApiDataType RequestType,
|
||||
int32 ContestId,
|
||||
int32 StageId,
|
||||
int32 SplitId,
|
||||
FOnDTFluxRequestSuccess& OnSuccess,
|
||||
FOnDTFluxRequestError& OnError,
|
||||
float TimeoutSeconds = 5.0f,
|
||||
int32 MaxRetries = 3,
|
||||
bool bEnableCache = true
|
||||
);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Tracked Requests")
|
||||
bool GetTrackedRequest(const FGuid& RequestId, FDTFluxQueuedRequest& OutRequest) const;
|
||||
const FDTFluxQueuedRequest* GetTrackedRequestPtr(const FGuid& RequestId) const;
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Tracked Requests", CallInEditor)
|
||||
// === ACCESSEURS BLUEPRINT POUR LES REQUÊTES TRACKÉES ===
|
||||
|
||||
/**
|
||||
* Récupérer une requête trackée par son ID
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Tracked Requests")
|
||||
bool GetTrackedRequest(const FGuid& RequestId, FDTFluxTrackedRequest& OutRequest) const;
|
||||
|
||||
/**
|
||||
* Vérifier si une requête a reçu une réponse
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Tracked Requests")
|
||||
bool HasRequestReceivedResponse(const FGuid& RequestId) const;
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Tracked Requests")
|
||||
|
||||
/**
|
||||
* Récupérer les données de réponse d'une requête
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Tracked Requests")
|
||||
FString GetRequestResponseData(const FGuid& RequestId) const;
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Tracked Requests")
|
||||
|
||||
/**
|
||||
* Vérifier si une requête similaire est en attente
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Tracked Requests")
|
||||
bool IsRequestPending(EDTFluxApiDataType RequestType, int32 ContestId = -1, int32 StageId = -1,
|
||||
int32 SplitId = -1) const;
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Tracked Requests")
|
||||
|
||||
/**
|
||||
* Compter le nombre de requêtes en attente
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Tracked Requests")
|
||||
int32 GetPendingRequestCount() const;
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Tracked Requests")
|
||||
UDTFluxQueuedManager* GetQueueManager() const;
|
||||
|
||||
// === EVENTS BLUEPRINT POUR LE TRACKING ===
|
||||
UPROPERTY(BlueprintAssignable, Category="DTFlux|Tracked Requests")
|
||||
FOnDTFluxTrackedRequestCompleted OnTrackedRequestCompleted;
|
||||
UPROPERTY(BlueprintAssignable, Category="DTFlux|Tracked Requests")
|
||||
FOnDTFluxTrackedRequestFailed OnTrackedRequestFailed;
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
/**
|
||||
* Récupérer les statistiques du gestionnaire de requêtes
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Tracked Requests")
|
||||
void GetRequestStatistics(int32& OutPending, int32& OutCached, int32& OutCompleted, int32& OutFailed,
|
||||
float& OutHitRate) const;
|
||||
|
||||
// === REQUÊTES DIRECTES (LEGACY) ===
|
||||
// === REQUÊTES LEGACY (Compatibilité totale) ===
|
||||
|
||||
/**
|
||||
* Envoyer une requête en mode legacy (pour compatibilité)
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Legacy")
|
||||
void SendRequest(const EDTFluxApiDataType RequestType, int InContestId = -1, int InStageId = -1,
|
||||
int InSplitId = -1);
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Network")
|
||||
|
||||
/**
|
||||
* Envoyer un message brut via WebSocket
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "DTFlux|Network")
|
||||
void SendMessage(const FString& Message);
|
||||
|
||||
// === EVENTS BLUEPRINT ===
|
||||
|
||||
/**
|
||||
* Event déclenché lors de la connexion WebSocket
|
||||
*/
|
||||
UPROPERTY(BlueprintAssignable, Category = "DTFlux|Network")
|
||||
FOnWebSocketConnected OnWebSocketConnected;
|
||||
|
||||
/**
|
||||
* Event déclenché quand une requête trackée se termine avec succès
|
||||
*/
|
||||
UPROPERTY(BlueprintAssignable, Category = "DTFlux|Tracked Requests")
|
||||
FOnDTFluxTrackedRequestCompleted OnTrackedRequestCompleted;
|
||||
|
||||
/**
|
||||
* Event déclenché quand une requête trackée échoue
|
||||
*/
|
||||
UPROPERTY(BlueprintAssignable, Category = "DTFlux|Tracked Requests")
|
||||
FOnDTFluxTrackedRequestFailed OnTrackedRequestFailed;
|
||||
|
||||
// === DELEGATES LEGACY (Compatibilité totale) ===
|
||||
|
||||
FOnRaceDataReceived OnRaceDataReceived;
|
||||
FOnTeamListReceived OnTeamListReceived;
|
||||
FOnStageRankingReceived OnStageRankingReceived;
|
||||
FOnSplitRankingReceived OnSplitRankingReceived;
|
||||
FOnContestRankingReceived OnContestRankingReceived;
|
||||
FOnSplitSensorReceived OnSplitSensorReceived;
|
||||
FOnTeamUpdateReceived OnTeamUpdateReceived;
|
||||
FOnTeamStatusUpdateReceived OnTeamStatusUpdateReceived;
|
||||
|
||||
// Accesseurs pour la compatibilité legacy
|
||||
FOnRaceDataReceived& OnReceivedRaceData() { return OnRaceDataReceived; }
|
||||
FOnTeamListReceived& OnReceivedTeamList() { return OnTeamListReceived; }
|
||||
FOnStageRankingReceived& OnReceivedStageRanking() { return OnStageRankingReceived; }
|
||||
FOnSplitRankingReceived& OnReceivedSplitRanking() { return OnSplitRankingReceived; }
|
||||
FOnContestRankingReceived& OnReceivedContestRanking() { return OnContestRankingReceived; }
|
||||
FOnSplitSensorReceived& OnReceivedSplitSensor() { return OnSplitSensorReceived; }
|
||||
FOnTeamUpdateReceived& OnReceivedTeamUpdate() { return OnTeamUpdateReceived; }
|
||||
FOnTeamStatusUpdateReceived& OnReceivedTeamStatusUpdate() { return OnTeamStatusUpdateReceived; }
|
||||
|
||||
// === ACCESSEUR PUBLIC POUR LE REQUEST MANAGER ===
|
||||
|
||||
/**
|
||||
* Accéder au gestionnaire de requêtes (pour usage avancé)
|
||||
*/
|
||||
TSharedPtr<FDTFluxQueuedRequestManager> GetRequestManager() const { return RequestManager; }
|
||||
|
||||
protected:
|
||||
// ~Subsystem Interface
|
||||
// === LIFECYCLE DU SUBSYSTEM ===
|
||||
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
||||
virtual void Deinitialize() override;
|
||||
// ~Subsystem Interface
|
||||
|
||||
|
||||
private:
|
||||
// === CONFIGURATION ===
|
||||
FDTFluxWsSettings WsSettings;
|
||||
FDTFluxHttpSettings HttpSettings;
|
||||
|
||||
UPROPERTY()
|
||||
UDTFluxQueuedManager* QueueManager;
|
||||
|
||||
// === MAPPING DES CALLBACKS C++ ===
|
||||
TMap<FGuid, FOnDTFluxTrackedRequestResponse> PendingCallbacks;
|
||||
TMap<FGuid, FOnDTFluxTrackedRequestTimeout> PendingTimeoutCallbacks;
|
||||
TMap<FGuid, FOnDTFluxRequestResponseError> PendingErrorCallbacks;
|
||||
|
||||
// === CLIENTS RÉSEAU ===
|
||||
FDTFluxWebSocketClientSP WsClient = nullptr;
|
||||
FDTFluxHttpClientSP HttpClient = nullptr;
|
||||
|
||||
// === MÉTHODES DE CONFIGURATION ===
|
||||
UFUNCTION()
|
||||
void WsSettingsChanged(const FDTFluxWsSettings& NewWsSettings);
|
||||
UFUNCTION()
|
||||
void HttpSettingsChanged(const FDTFluxHttpSettings& NewHttpSettings);
|
||||
void ReconnectWs(const FName WsClientId);
|
||||
void ReconnectHttp(const FName WsClientId);
|
||||
// === REQUEST MANAGER C++ ===
|
||||
TSharedPtr<FDTFluxQueuedRequestManager> RequestManager;
|
||||
|
||||
// === GESTION DES ÉVÉNEMENTS WEBSOCKET ===
|
||||
void RegisterWebSocketEvents();
|
||||
void UnregisterWebSocketEvents();
|
||||
|
||||
void OnWebSocketConnected_Subsystem();
|
||||
void OnWebSocketConnectionError_Subsystem(const FString& Error);
|
||||
void OnWebSocketClosedEvent_Subsystem(int32 StatusCode, const FString& Reason, bool bWasClean);
|
||||
void OnWebSocketMessageEvent_Subsystem(const FString& MessageString);
|
||||
void OnWebSocketMessageSentEvent_Subsystem(const FString& MessageSent);
|
||||
|
||||
// Handles pour les événements WebSocket
|
||||
FDelegateHandle OnWsConnectedEventDelegateHandle;
|
||||
FDelegateHandle OnWsConnectionErrorEventDelegateHandle;
|
||||
FDelegateHandle OnWsClosedEventDelegateHandle;
|
||||
FDelegateHandle OnWsMessageEventDelegateHandle;
|
||||
FDelegateHandle OnWsMessageSentEventDelegateHandle;
|
||||
|
||||
// === GESTION DES ÉVÉNEMENTS HTTP ===
|
||||
void RegisterHttpEvents();
|
||||
void UnregisterHttpEvents();
|
||||
// === PARSING ET TRAITEMENT DES RÉPONSES ===
|
||||
|
||||
// === PARSING DES RÉPONSES ===
|
||||
void ParseTeamListResponse(FDTFluxServerResponse& ServerResponse);
|
||||
/**
|
||||
* Essayer de matcher une réponse à une requête trackée
|
||||
* @param MessageString Message JSON reçu
|
||||
* @return true si la réponse correspond à une requête trackée
|
||||
*/
|
||||
bool TryMatchResponseToQueuedRequest(const FString& MessageString);
|
||||
|
||||
/**
|
||||
* Traiter une réponse en mode legacy
|
||||
* @param MessageString Message JSON à traiter
|
||||
*/
|
||||
void ProcessLegacyResponse(const FString& MessageString);
|
||||
|
||||
/**
|
||||
* Traiter une réponse déjà parsée
|
||||
* @param ParsedResponse Réponse parsée à traiter
|
||||
*/
|
||||
void ProcessParsedResponse(TSharedPtr<FDTFluxServerResponse> ParsedResponse);
|
||||
|
||||
// === MÉTHODES DE PARSING LEGACY (pour compatibilité) ===
|
||||
void ParseTeamListResponse(FDTFluxServerResponse& Response);
|
||||
void ParseRaceData(FDTFluxServerResponse& Response);
|
||||
void ParseContestRanking(FDTFluxServerResponse& Response);
|
||||
void ParseStageRankingResponse(FDTFluxServerResponse& Response);
|
||||
@ -225,19 +294,45 @@ private:
|
||||
void ParseSplitSensorResponse(FDTFluxServerResponse& Response);
|
||||
EDTFluxResponseStatus ProcessPushMessage(FDTFluxServerResponse& Response);
|
||||
|
||||
void Parse(FDTFluxServerResponse& Response);
|
||||
void OnWebSocketMessageEvent_Subsystem(const FString& MessageString);
|
||||
void OnWebSocketMessageSentEvent_Subsystem(const FString& MessageSent);
|
||||
bool CleanRequestCallbacks(const FGuid& RequestId);
|
||||
// === CALLBACKS POUR LE REQUEST MANAGER ===
|
||||
|
||||
// === GESTION DES REQUÊTES TRACKÉES ===
|
||||
/**
|
||||
* Callback appelé quand une requête trackée se termine
|
||||
*/
|
||||
void OnRequestCompleted_Internal(const FDTFluxTrackedRequest& CompletedRequest);
|
||||
|
||||
/**
|
||||
* Callback appelé quand une requête trackée échoue
|
||||
*/
|
||||
void OnRequestFailed_Internal(const FDTFluxTrackedRequest& FailedRequest);
|
||||
|
||||
// === CONFIGURATION DYNAMIQUE ===
|
||||
|
||||
/**
|
||||
* Callback appelé quand les paramètres WebSocket changent
|
||||
*/
|
||||
UFUNCTION()
|
||||
void OnRequestTimedOut_Internal(const FDTFluxQueuedRequest& TimedOutRequest);
|
||||
bool TryMatchResponseToQueuedRequest(FDTFluxServerResponse& Response);
|
||||
void CompleteTrackedRequest(const FGuid& RequestId, const FString& ResponseData, EDTFluxRequestType RequestType);
|
||||
void FailTrackedRequest(const FGuid& RequestId, const FString& ErrorMessage, EDTFluxRequestType RequestType);
|
||||
void SendQueuedRequest(const FDTFluxQueuedRequest& QueuedRequest);
|
||||
void WsSettingsChanged(const FDTFluxWsSettings& NewWsSettings);
|
||||
|
||||
/**
|
||||
* Reconnecter le client WebSocket
|
||||
*/
|
||||
void ReconnectWs(const FName WsClientId);
|
||||
|
||||
// === UTILITAIRES ===
|
||||
|
||||
/**
|
||||
* Construire une adresse WebSocket complète
|
||||
*/
|
||||
static FString ConstructWsAddress(const FString& Address, const FString& Path, const int& Port);
|
||||
|
||||
/**
|
||||
* Envoyer une requête trackée via le réseau
|
||||
*/
|
||||
void SendQueuedRequest(const FDTFluxTrackedRequest& QueuedRequest);
|
||||
|
||||
/**
|
||||
* Déterminer si on doit utiliser le parsing asynchrone
|
||||
*/
|
||||
bool ShouldUseAsyncParsing(const FString& JsonData) const;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user