2025-07-08 16:50:31 +02:00
|
|
|
|
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "CoreMinimal.h"
|
|
|
|
|
|
#include "UObject/Object.h"
|
|
|
|
|
|
#include "Containers/Queue.h"
|
|
|
|
|
|
#include "Tickable.h"
|
|
|
|
|
|
#include "Struct/DTFluxRequestStructs.h"
|
|
|
|
|
|
#include "Struct/DTFluxServerResponseStruct.h"
|
|
|
|
|
|
#include "Types/Enum/DTFluxCoreEnum.h"
|
|
|
|
|
|
#include "DTFluxQueuedManager.generated.h"
|
|
|
|
|
|
|
|
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRequestTimedOut, const FDTFluxQueuedRequest&, TimedOutRequest);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief Classe Tickable gérant les requêtes WebSockets qui ne sont pas traçables nativement par l'API.
|
|
|
|
|
|
* Cette classe utilise TQueue pour gérer efficacement les requêtes en attente et vérifie leur état dans le tick.
|
|
|
|
|
|
*/
|
|
|
|
|
|
UCLASS()
|
|
|
|
|
|
class DTFLUXNETWORK_API UDTFluxQueuedManager : public UObject, public FTickableGameObject
|
|
|
|
|
|
{
|
|
|
|
|
|
GENERATED_BODY()
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
/** Constructeur par défaut */
|
|
|
|
|
|
UDTFluxQueuedManager();
|
|
|
|
|
|
virtual ~UDTFluxQueuedManager() override;
|
|
|
|
|
|
void Initialize();
|
|
|
|
|
|
FGuid QueueRequest(EDTFluxRequestType RequestType, int32 ContestId = -1, int32 StageId = -1, int32 SplitId = -1,
|
|
|
|
|
|
const FString& RawMessage = "");
|
2025-07-09 03:27:23 +02:00
|
|
|
|
bool MarkRequestAsError(const FGuid& TargetRequestGuid);
|
2025-07-08 16:50:31 +02:00
|
|
|
|
bool MarkRequestAsResponded(const FGuid& TargetRequestGuid);
|
|
|
|
|
|
bool MarkRequestAsResponded(const FDTFluxQueuedRequest& TargetRequest);
|
2025-07-09 03:27:23 +02:00
|
|
|
|
bool IsRequestPending(FGuid& OutRequestId, EDTFluxRequestType RequestType, int32 ContestId = -1, int32 StageId = -1,
|
|
|
|
|
|
int32 SplitId = -1);
|
2025-07-08 16:50:31 +02:00
|
|
|
|
FDTFluxQueuedRequest* GetRequestPending(EDTFluxRequestType RequestType, int32 ContestId = -1, int32 StageId = -1,
|
|
|
|
|
|
int32 SplitId = -1);
|
|
|
|
|
|
const FDTFluxQueuedRequest* GetRequest(const FGuid& SearchedGuid);
|
|
|
|
|
|
int32 GetPendingRequestCount();
|
|
|
|
|
|
int32 CleanupTimedOutRequests();
|
|
|
|
|
|
int32 CleanCashedRequests();
|
|
|
|
|
|
void ClearAllRequests();
|
|
|
|
|
|
// bool TryProcessResponse(const FDTFluxServerResponse& Response);
|
|
|
|
|
|
|
|
|
|
|
|
// Interface FTickableGameObject
|
|
|
|
|
|
virtual void Tick(float DeltaTime) override;
|
|
|
|
|
|
virtual bool IsTickable() const override;
|
|
|
|
|
|
virtual TStatId GetStatId() const override;
|
|
|
|
|
|
virtual bool IsTickableWhenPaused() const override { return true; }
|
|
|
|
|
|
virtual bool IsTickableInEditor() const override { return true; }
|
|
|
|
|
|
// Interface ~FTickableGameObject
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UPROPERTY(BlueprintAssignable, Category = "DTFlux|Network")
|
|
|
|
|
|
FOnRequestTimedOut OnRequestTimedOut;
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
TQueue<FDTFluxQueuedRequest, EQueueMode::Mpsc> PendingRequestsQueue;
|
|
|
|
|
|
TQueue<FDTFluxQueuedRequest, EQueueMode::Mpsc> CompletedRequestsQueue;
|
|
|
|
|
|
TQueue<FDTFluxQueuedRequest, EQueueMode::Mpsc> TimedOutRequestsQueue;
|
|
|
|
|
|
|
|
|
|
|
|
bool bIsInitialized;
|
|
|
|
|
|
float CheckInterval;
|
|
|
|
|
|
float TimeSinceLastCheck;
|
|
|
|
|
|
};
|