Removed CachedRequest functionality + Fixed(Tested) PursuitSequence bug
This commit is contained in:
@ -364,7 +364,7 @@ bool UDTFluxCoreSubsystem::GetSplitRankingsWithKey(const FDTFluxSplitKey SplitKe
|
||||
}
|
||||
}
|
||||
|
||||
TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestContestRankings(const TArray<int> ForContests)
|
||||
TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestContestRankings(const TArray<int> ForContests, bool bEnableCache)
|
||||
{
|
||||
if (NetworkSubsystem)
|
||||
{
|
||||
@ -390,7 +390,7 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestContestRankings(const TArray<i
|
||||
for (auto ContestId : ForContests)
|
||||
{
|
||||
FGuid ContestRequest = NetworkSubsystem->SendTrackedRequestWithCallbacks(EDTFluxApiDataType::ContestRanking,
|
||||
ContestId, -1, -1, OnSuccess, OnError);
|
||||
ContestId, -1, -1, OnSuccess, OnError, bEnableCache);
|
||||
RequestIds.Add(ContestRequest);
|
||||
}
|
||||
return RequestIds;
|
||||
@ -398,7 +398,8 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestContestRankings(const TArray<i
|
||||
return TArray<FGuid>();
|
||||
}
|
||||
|
||||
TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestStageRankings(const TArray<FDTFluxStageKey> ForStages)
|
||||
TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestStageRankings(const TArray<FDTFluxStageKey> ForStages,
|
||||
bool bEnableCache)
|
||||
{
|
||||
if (NetworkSubsystem)
|
||||
{
|
||||
@ -424,7 +425,7 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestStageRankings(const TArray<FDT
|
||||
for (auto StageKey : ForStages)
|
||||
{
|
||||
FGuid ContestRequest = NetworkSubsystem->SendTrackedRequestWithCallbacks(EDTFluxApiDataType::StageRanking,
|
||||
StageKey.ContestId, StageKey.StageId, -1, OnSuccess, OnError);
|
||||
StageKey.ContestId, StageKey.StageId, -1, OnSuccess, OnError, bEnableCache);
|
||||
RequestIds.Add(ContestRequest);
|
||||
}
|
||||
return RequestIds;
|
||||
@ -432,7 +433,8 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestStageRankings(const TArray<FDT
|
||||
return TArray<FGuid>();
|
||||
}
|
||||
|
||||
TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestSplitRankings(const TArray<FDTFluxSplitKey> ForSplits)
|
||||
TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestSplitRankings(const TArray<FDTFluxSplitKey> ForSplits,
|
||||
bool bEnableCache)
|
||||
{
|
||||
if (NetworkSubsystem)
|
||||
{
|
||||
@ -458,7 +460,7 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestSplitRankings(const TArray<FDT
|
||||
for (auto SplitKey : ForSplits)
|
||||
{
|
||||
FGuid ContestRequest = NetworkSubsystem->SendTrackedRequestWithCallbacks(EDTFluxApiDataType::SplitRanking,
|
||||
SplitKey.ContestId, SplitKey.StageId, SplitKey.SplitId, OnSuccess, OnError);
|
||||
SplitKey.ContestId, SplitKey.StageId, SplitKey.SplitId, OnSuccess, OnError, bEnableCache);
|
||||
RequestIds.Add(ContestRequest);
|
||||
}
|
||||
return RequestIds;
|
||||
|
||||
@ -45,61 +45,136 @@ void UDTFluxPursuitManager::SetPursuitInfoIsMassStart(FDTFluxPursuitGroup NextFo
|
||||
}
|
||||
}
|
||||
|
||||
void UDTFluxPursuitManager::DebugFocusNext(const TArray<FDTFluxPursuitInfo>& OutPursuitFocusNext)
|
||||
{
|
||||
FString FocusBibs;
|
||||
for (const auto& Pursuit : OutPursuitFocusNext)
|
||||
{
|
||||
FocusBibs += FString::Printf(TEXT("%d "), Pursuit.Bib);
|
||||
}
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Focus Bibs: %s"), *FocusBibs);
|
||||
}
|
||||
|
||||
void UDTFluxPursuitManager::DebugOutPoursuitNext(const TArray<FDTFluxPursuitInfo>& OutPursuitNext)
|
||||
{
|
||||
FString NextBibs;
|
||||
for (int32 i = 0; i < OutPursuitNext.Num(); i++)
|
||||
{
|
||||
NextBibs += FString::Printf(TEXT("%d "), OutPursuitNext[i].Bib);
|
||||
}
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Next Bibs: %s"), *NextBibs);
|
||||
}
|
||||
|
||||
void UDTFluxPursuitManager::GetPursuit(TArray<FDTFluxPursuitInfo>& OutPursuitFocusNext,
|
||||
TArray<FDTFluxPursuitInfo>& OutPursuitNext, bool& BIsFocusTruncate,
|
||||
const int MaxSimultaneousPursuit)
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("=== GetPursuit CALLED ==="));
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("MaxSimultaneousPursuit: %d"), MaxSimultaneousPursuit);
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Available groups: %d"), GroupedPursuit.Num());
|
||||
|
||||
// Validation
|
||||
if (MaxSimultaneousPursuit <= 0)
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("MaxSimultaneousPursuit must be > 0"));
|
||||
OutPursuitFocusNext = TArray<FDTFluxPursuitInfo>();
|
||||
OutPursuitNext = TArray<FDTFluxPursuitInfo>();
|
||||
UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("Invalid MaxSimultaneousPursuit: %d"), MaxSimultaneousPursuit);
|
||||
OutPursuitFocusNext.Reset();
|
||||
OutPursuitNext.Reset();
|
||||
BIsFocusTruncate = false;
|
||||
return;
|
||||
}
|
||||
if (bIsSequenceDone && MaxSimultaneousPursuit <= 0)
|
||||
|
||||
if (bIsSequenceDone || GroupedPursuit.IsEmpty())
|
||||
{
|
||||
OutPursuitFocusNext = TArray<FDTFluxPursuitInfo>();
|
||||
OutPursuitNext = TArray<FDTFluxPursuitInfo>();
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("No groups available or sequence completed"));
|
||||
OutPursuitFocusNext.Reset();
|
||||
OutPursuitNext.Reset();
|
||||
BIsFocusTruncate = false;
|
||||
return;
|
||||
}
|
||||
|
||||
OutPursuitFocusNext.Reset();
|
||||
OutPursuitNext.Reset();
|
||||
if (!GroupedPursuit.IsEmpty())
|
||||
|
||||
// === ÉTAPE 1: FOCUS = PREMIER GROUPE (et le supprimer) ===
|
||||
FDTFluxPursuitGroup FocusGroup = GroupedPursuit[0]; // Copie du premier groupe
|
||||
GroupedPursuit.RemoveAt(0); // ✅ SUPPRIMER le premier groupe
|
||||
|
||||
SetPursuitInfoIsMassStart(FocusGroup);
|
||||
OutPursuitFocusNext = FocusGroup.PursuitGroup;
|
||||
BIsFocusTruncate = FocusGroup.PursuitGroup.Num() > 1;
|
||||
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning,
|
||||
TEXT("Focus Group: StartTime=%s, Participants=%d"),
|
||||
*FocusGroup.StartTimeGlobal.ToString(),
|
||||
FocusGroup.PursuitGroup.Num());
|
||||
|
||||
// === ÉTAPE 2: NEXT = GROUPES SUIVANTS (SANS les supprimer) ===
|
||||
int32 TargetNextCount = MaxSimultaneousPursuit - 1; // -1 pour le focus
|
||||
int32 AddedNextCount = 0;
|
||||
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Target Next Count: %d"), TargetNextCount);
|
||||
|
||||
// ✅ PARCOURIR les groupes restants SANS les modifier
|
||||
for (int32 GroupIndex = 0;
|
||||
GroupIndex < GroupedPursuit.Num() && AddedNextCount < TargetNextCount;
|
||||
GroupIndex++)
|
||||
{
|
||||
FDTFluxPursuitGroup NextFocusGroup = GroupedPursuit[0];
|
||||
GroupedPursuit.RemoveAt(0);
|
||||
SetPursuitInfoIsMassStart(NextFocusGroup);
|
||||
OutPursuitFocusNext = NextFocusGroup.PursuitGroup;
|
||||
bFocusIsTruncate = NextFocusGroup.PursuitGroup.Num() > 1;
|
||||
for (int RemainingPursuitNum = MaxSimultaneousPursuit - 1; RemainingPursuitNum != 0;)
|
||||
FDTFluxPursuitGroup& NextGroup = GroupedPursuit[GroupIndex]; // Référence (pour SetPursuitInfoIsMassStart)
|
||||
|
||||
if (NextGroup.PursuitGroup.Num() == 0)
|
||||
{
|
||||
if (!GroupedPursuit.IsEmpty())
|
||||
{
|
||||
FDTFluxPursuitGroup NextGroup = GroupedPursuit[0];
|
||||
SetPursuitInfoIsMassStart(NextGroup);
|
||||
if (NextGroup.PursuitGroup.Num() >= RemainingPursuitNum)
|
||||
{
|
||||
// extract the number we need
|
||||
for (int i = 0; i < RemainingPursuitNum; i++)
|
||||
{
|
||||
FDTFluxPursuitInfo Pursuit = NextGroup.PursuitGroup[0];
|
||||
OutPursuitNext.Add(Pursuit);
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
OutPursuitNext.Append(NextGroup.PursuitGroup);
|
||||
RemainingPursuitNum -= NextGroup.PursuitGroup.Num();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
continue; // Groupe vide
|
||||
}
|
||||
|
||||
int32 AvailableInGroup = NextGroup.PursuitGroup.Num();
|
||||
int32 NeededFromGroup = FMath::Min(TargetNextCount - AddedNextCount, AvailableInGroup);
|
||||
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning,
|
||||
TEXT("Processing Next Group %d: StartTime=%s, Available=%d, Taking=%d"),
|
||||
GroupIndex,
|
||||
*NextGroup.StartTimeGlobal.ToString(),
|
||||
AvailableInGroup,
|
||||
NeededFromGroup);
|
||||
|
||||
// ✅ COPIER les participants nécessaires (SANS les supprimer du groupe)
|
||||
for (int32 ParticipantIndex = 0; ParticipantIndex < NeededFromGroup; ParticipantIndex++)
|
||||
{
|
||||
FDTFluxPursuitInfo NextParticipant = NextGroup.PursuitGroup[ParticipantIndex]; // Copie
|
||||
|
||||
// Appliquer MassStart
|
||||
NextParticipant.bIsMassStart = NextParticipant.StartTime >= MassStartTime;
|
||||
|
||||
OutPursuitNext.Add(NextParticipant);
|
||||
AddedNextCount++;
|
||||
|
||||
UE_LOG(logDTFluxCoreSubsystem, VeryVerbose,
|
||||
TEXT("Added to Next: Bib %d from Group %d"),
|
||||
NextParticipant.Bib, GroupIndex);
|
||||
}
|
||||
}
|
||||
|
||||
// === LOGS DE RÉSUMÉ ===
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("=== PURSUIT RESULTS ==="));
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Focus: %d participants"), OutPursuitFocusNext.Num());
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Next: %d participants"), OutPursuitNext.Num());
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Remaining groups for future: %d"), GroupedPursuit.Num());
|
||||
|
||||
if (OutPursuitFocusNext.Num() > 0)
|
||||
{
|
||||
DebugFocusNext(OutPursuitFocusNext);
|
||||
}
|
||||
|
||||
// Log détaillé des Next (limité pour éviter spam)
|
||||
if (OutPursuitNext.Num() > 0)
|
||||
{
|
||||
DebugOutPoursuitNext(OutPursuitNext);
|
||||
}
|
||||
|
||||
// Vérifier si la séquence est terminée
|
||||
if (GroupedPursuit.IsEmpty())
|
||||
{
|
||||
bIsSequenceDone = true;
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Pursuit sequence will be completed after this round"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,7 +194,7 @@ bool UDTFluxPursuitManager::BindRankings()
|
||||
{
|
||||
if (!bIsRankingBounded)
|
||||
{
|
||||
CoreSubsystem->OnRequestedStageRankings.AddDynamic(this, &UDTFluxPursuitManager::OnRankingsReceived);
|
||||
CoreSubsystem->OnStageRankings.AddDynamic(this, &UDTFluxPursuitManager::OnRankingsReceived);
|
||||
bIsRankingBounded = true;
|
||||
}
|
||||
return bIsRankingBounded;
|
||||
@ -134,7 +209,7 @@ void UDTFluxPursuitManager::UnbindRankings()
|
||||
{
|
||||
if (bIsRankingBounded)
|
||||
{
|
||||
CoreSubsystem->OnRequestedStageRankings.RemoveDynamic(this, &UDTFluxPursuitManager::OnRankingsReceived);
|
||||
CoreSubsystem->OnStageRankings.RemoveDynamic(this, &UDTFluxPursuitManager::OnRankingsReceived);
|
||||
bIsRankingBounded = false;
|
||||
return;
|
||||
}
|
||||
@ -178,18 +253,30 @@ bool UDTFluxPursuitManager::LaunchPursuitSequence()
|
||||
AllPursuits.Add(PursuitInfo);
|
||||
}
|
||||
}
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("AllPursuits.Num() = %i"), AllPursuits.Num());
|
||||
for (auto& Pursuit : AllPursuits)
|
||||
{
|
||||
if (TempGroups.Contains(Pursuit.StartTime))
|
||||
{
|
||||
TempGroups[Pursuit.StartTime].PursuitGroup.Add(Pursuit);
|
||||
FDTFluxPursuitGroup& Group = TempGroups[Pursuit.StartTime];
|
||||
Group.PursuitGroup.Add(Pursuit);
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning,
|
||||
TEXT("Adding [%i] To PursuitGroup starting At %s, PursuitGroup.Num() %i"),
|
||||
Pursuit.Bib, *Pursuit.StartTime.ToString(), Group.PursuitGroup.Num());
|
||||
}
|
||||
else
|
||||
{
|
||||
FDTFluxPursuitGroup Group;
|
||||
Group.StartTimeGlobal = Pursuit.StartTime;
|
||||
Group.PursuitGroup.Add(Pursuit);
|
||||
TempGroups.Add(Pursuit.StartTime, Group);
|
||||
FDTFluxPursuitGroup NewGroup;
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("New Group starting At %s, Adding Bib [%i]"),
|
||||
*Pursuit.StartTime.ToString(), Pursuit.Bib);
|
||||
NewGroup.StartTimeGlobal = Pursuit.StartTime;
|
||||
NewGroup.PursuitGroup.Add(Pursuit);
|
||||
TempGroups.Add(Pursuit.StartTime, NewGroup);
|
||||
for (const auto& Group : TempGroups)
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Group.StartTime = %s, Group.PursuitGroup.Num() = %i"),
|
||||
*Group.Key.ToString(), Group.Value.PursuitGroup.Num());
|
||||
}
|
||||
}
|
||||
}
|
||||
TempGroups.KeySort([](const FDateTime& A, const FDateTime& B)
|
||||
@ -199,18 +286,18 @@ bool UDTFluxPursuitManager::LaunchPursuitSequence()
|
||||
TMap<FDateTime, int> StartTimeFrequency;
|
||||
int32 MaxFrequency = 0;
|
||||
GroupedPursuit.Reserve(TempGroups.Num());
|
||||
// parcours du TMap
|
||||
for (const auto& Pair : TempGroups)
|
||||
{
|
||||
if (Pair.Value.StartTimeGlobal != FDateTime::MinValue() && Pair.Value.StartTimeGlobal != FDateTime::MaxValue())
|
||||
{
|
||||
StartTimeFrequency.FindOrAdd(Pair.Value.StartTimeGlobal)++;
|
||||
const FDateTime& PropertyValue = Pair.Value.StartTimeGlobal; // Votre propriété
|
||||
int32& Count = StartTimeFrequency.FindOrAdd(PropertyValue, 0);
|
||||
Count++;
|
||||
if (Count > MaxFrequency)
|
||||
// récuperation de la ref de la valeur actuel de la fréquence dans la TMap Freq
|
||||
int& CurrentFreq = StartTimeFrequency.FindOrAdd(Pair.Value.StartTimeGlobal, 0);
|
||||
CurrentFreq = Pair.Value.PursuitGroup.Num();
|
||||
if (CurrentFreq > MaxFrequency)
|
||||
{
|
||||
MaxFrequency = Count;
|
||||
MassStartTime = PropertyValue;
|
||||
MaxFrequency = CurrentFreq;
|
||||
MassStartTime = Pair.Value.StartTimeGlobal;
|
||||
}
|
||||
}
|
||||
GroupedPursuit.Add(Pair.Value);
|
||||
|
||||
Reference in New Issue
Block a user