Files
DTFluxAPI/Source/DTFluxNetwork/Public/DTFluxQueuedManager.h

67 lines
2.6 KiB
C
Raw Normal View History

// 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 = "");
bool MarkRequestAsError(const FGuid& TargetRequestGuid);
bool MarkRequestAsResponded(const FGuid& TargetRequestGuid);
bool MarkRequestAsResponded(const FDTFluxQueuedRequest& TargetRequest);
bool IsRequestPending(FGuid& OutRequestId, EDTFluxRequestType RequestType, int32 ContestId = -1, int32 StageId = -1,
int32 SplitId = -1);
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;
};