Add TrackedRequest implementation in DTFluxCoreSubsystem and various Modifications and bugfixes.
This commit is contained in:
@ -255,6 +255,7 @@ bool FDTFluxQueuedRequestManager::MarkRequestAsSent(const FGuid& RequestId)
|
||||
bool FDTFluxQueuedRequestManager::CompleteRequest(const FGuid& RequestId, const FString& RawResponseData,
|
||||
bool bUseAsyncParsing)
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Log, TEXT("FDTFluxQueuedRequestManager::CompleteRequest() %s"), *RequestId.ToString());
|
||||
TSharedPtr<FDTFluxTrackedRequest> Request;
|
||||
|
||||
{
|
||||
@ -274,7 +275,8 @@ bool FDTFluxQueuedRequestManager::CompleteRequest(const FGuid& RequestId, const
|
||||
// Stocker la réponse brute
|
||||
Request->SetRawResponse(RawResponseData);
|
||||
Request->CompletedAt = FDateTime::Now();
|
||||
|
||||
UE_LOG(logDTFluxNetwork, Log, TEXT("Request %s completed at %s"), *RequestId.ToString(),
|
||||
*Request->CompletedAt.ToString());
|
||||
// Décider du parsing selon les callbacks et la configuration
|
||||
bool bHasCallbacks = false;
|
||||
{
|
||||
@ -284,6 +286,12 @@ bool FDTFluxQueuedRequestManager::CompleteRequest(const FGuid& RequestId, const
|
||||
|
||||
if (bHasCallbacks && bUseAsyncParsing && !RawResponseData.IsEmpty())
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Log,
|
||||
TEXT("Request %s [bHasCallbacks=%s], [bUseAsyncParsing=%s], [bIsRawResponseEmpty=%s]"),
|
||||
*RequestId.ToString(),
|
||||
bHasCallbacks ? TEXT("true") : TEXT("false"), bUseAsyncParsing ? TEXT("true") : TEXT("false"),
|
||||
RawResponseData.IsEmpty() ? TEXT("true") : TEXT("false"));
|
||||
|
||||
// Parsing asynchrone pour les callbacks
|
||||
FOnParsingCompleted OnCompleted = FOnParsingCompleted::CreateRaw(
|
||||
this, &FDTFluxQueuedRequestManager::OnParsingCompleted
|
||||
@ -294,12 +302,13 @@ bool FDTFluxQueuedRequestManager::CompleteRequest(const FGuid& RequestId, const
|
||||
);
|
||||
|
||||
AsyncParser->ParseResponseAsync(RequestId, RawResponseData, OnCompleted, OnFailed);
|
||||
|
||||
// CleanupCallbacks(RequestId);
|
||||
UE_LOG(logDTFluxNetwork, Verbose, TEXT("Started async parsing for request %s"), *RequestId.ToString());
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("request %s completed without sync"), *RequestId.ToString());
|
||||
// Compléter immédiatement sans parsing ou avec parsing sync
|
||||
EDTFluxRequestState NewState = Request->Config.bEnableCache
|
||||
? EDTFluxRequestState::Cached
|
||||
@ -799,28 +808,55 @@ void FDTFluxQueuedRequestManager::RecordCacheMiss() const
|
||||
void FDTFluxQueuedRequestManager::OnParsingCompleted(const FGuid& RequestId,
|
||||
TSharedPtr<FDTFluxServerResponse> ParsedResponse, bool bSuccess)
|
||||
{
|
||||
FScopeLock Lock(&RequestsLock);
|
||||
UE_LOG(logDTFluxNetwork, Log, TEXT("FDTFluxQueuedRequestManager::OnParsingCompleted() request %s"),
|
||||
*RequestId.ToString())
|
||||
TSharedPtr<FDTFluxTrackedRequest> Request;
|
||||
{
|
||||
FScopeLock Lock(&RequestsLock);
|
||||
|
||||
auto* RequestPtr = AllRequests.Find(RequestId);
|
||||
if (!RequestPtr || !RequestPtr->IsValid())
|
||||
return;
|
||||
auto* RequestPtr = AllRequests.Find(RequestId);
|
||||
if (!RequestPtr || !RequestPtr->IsValid())
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Error,
|
||||
TEXT(
|
||||
"DTFluxQueuedRequestManager::OnParsingCompleted() RequestId%s [InvalidRequestId=%s], [RequestPtrValid=%s]"
|
||||
),
|
||||
*RequestId.ToString(), RequestPtr ? TEXT("true") : TEXT("false"),
|
||||
RequestPtr->IsValid() ? TEXT("true") : TEXT("false"));
|
||||
return;
|
||||
}
|
||||
|
||||
auto Request = *RequestPtr;
|
||||
Request = *RequestPtr;
|
||||
}
|
||||
|
||||
if (bSuccess && ParsedResponse.IsValid())
|
||||
{
|
||||
Request->ParsedResponse = ParsedResponse;
|
||||
Request->bIsResponseParsed = true;
|
||||
EDTFluxRequestState NewState = Request->Config.bEnableCache
|
||||
? EDTFluxRequestState::Cached
|
||||
: EDTFluxRequestState::Completed;
|
||||
|
||||
UE_LOG(logDTFluxNetwork, VeryVerbose,
|
||||
ChangeRequestState(Request, NewState);
|
||||
if (Request->Config.bEnableCache)
|
||||
{
|
||||
FScopeLock Lock(&RequestsLock);
|
||||
CacheKeyToRequestId.Add(Request->GetCacheKey(), RequestId);
|
||||
}
|
||||
UE_LOG(logDTFluxNetwork, Log,
|
||||
TEXT("DTFluxQueuedRequestManager: Async parsing completed for request %s"),
|
||||
*RequestId.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(logDTFluxNetwork, Warning, TEXT("DTFluxQueuedRequestManager: Async parsing failed for request %s"),
|
||||
*RequestId.ToString());
|
||||
Request->LastErrorMessage = TEXT("Async parsing failed");
|
||||
ChangeRequestState(Request, EDTFluxRequestState::Failed);
|
||||
|
||||
UE_LOG(logDTFluxNetwork, Error, TEXT("Async parsing failed for request %s"), *RequestId.ToString());
|
||||
}
|
||||
// ✅ FIX: Déclencher les callbacks maintenant !
|
||||
TriggerCallbacks(*Request);
|
||||
CleanupCallbacks(RequestId);
|
||||
}
|
||||
|
||||
void FDTFluxQueuedRequestManager::OnParsingFailed(const FGuid& RequestId, const FString& ErrorMessage)
|
||||
@ -828,6 +864,7 @@ void FDTFluxQueuedRequestManager::OnParsingFailed(const FGuid& RequestId, const
|
||||
UE_LOG(logDTFluxNetwork, Error, TEXT("DTFluxQueuedRequestManager: Async parsing failed for request %s: %s"),
|
||||
*RequestId.ToString(),
|
||||
*ErrorMessage);
|
||||
FailRequest(RequestId, FString::Printf(TEXT("Parsing failed: %s"), *ErrorMessage));
|
||||
}
|
||||
|
||||
FString FDTFluxQueuedRequestManager::GenerateCacheKey(EDTFluxApiDataType RequestType, int32 ContestId, int32 StageId,
|
||||
|
||||
Reference in New Issue
Block a user