Add TrackedRequest implementation in DTFluxCoreSubsystem and various Modifications and bugfixes.
This commit is contained in:
@ -10,6 +10,7 @@
|
||||
#include "FileHelpers.h"
|
||||
#include "Assets/DTFluxModelAsset.h"
|
||||
#include "Subsystems/DTFluxNetworkSubsystem.h"
|
||||
#include "Struct/DTFluxServerResponseStruct.h"
|
||||
#include "UObject/SavePackage.h"
|
||||
|
||||
void UDTFluxCoreSubsystem::Initialize(FSubsystemCollectionBase& Collection)
|
||||
@ -52,6 +53,84 @@ void UDTFluxCoreSubsystem::SaveDataStorage()
|
||||
}
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::ProcessTrackedResponse(FDTFluxServerResponse& InResponse)
|
||||
{
|
||||
switch (InResponse.GetResponseType())
|
||||
{
|
||||
case EDTFluxApiDataType::ContestRanking:
|
||||
{
|
||||
FDTFluxContestRankings Rankings;
|
||||
if (InResponse.ParseContestRanking(Rankings))
|
||||
{
|
||||
ProcessContestRanking(Rankings);
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestRanking added for Contest %s"),
|
||||
*Rankings.ContestName);
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("Unable to parse ContestRanking"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EDTFluxApiDataType::StageRanking:
|
||||
{
|
||||
FDTFluxStageRankings Rankings;
|
||||
if (InResponse.ParseStageRanking(Rankings))
|
||||
{
|
||||
ProcessStageRanking(Rankings);
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestRanking added for Stage %i of Contest %i"),
|
||||
Rankings.StageId, Rankings.ContestId);
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("Unable to parse StageRanking"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EDTFluxApiDataType::SplitRanking:
|
||||
{
|
||||
FDTFluxSplitRankings Rankings;
|
||||
if (InResponse.ParseSplitRanking(Rankings))
|
||||
{
|
||||
ProcessSplitRanking(Rankings);
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning,
|
||||
TEXT("ContestRanking added for Split %i of Stage %i of Contest %i"),
|
||||
Rankings.SplitId, Rankings.StageId, Rankings.ContestId);
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("Unable to parse SplitRanking"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EDTFluxApiDataType::RaceData:
|
||||
{
|
||||
FDTFluxRaceData RaceData;
|
||||
if (InResponse.ParseRaceData(RaceData))
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("RaceDataDefinition added for Contest %s"),
|
||||
*RaceData.Datas[0].Name);
|
||||
ProcessRaceData(RaceData);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EDTFluxApiDataType::TeamList:
|
||||
{
|
||||
FDTFluxTeamListDefinition TeamList;
|
||||
if (InResponse.ParseTeamList(TeamList))
|
||||
{
|
||||
ProcessTeamList(TeamList);
|
||||
UE_LOG(logDTFluxCoreSubsystem, Log, TEXT("Process TeamList"))
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Unknown DataType %s"),
|
||||
*UEnum::GetValueAsString(InResponse.GetResponseType()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::RegisterDelegates()
|
||||
{
|
||||
if (NetworkSubsystem)
|
||||
@ -148,21 +227,24 @@ void UDTFluxCoreSubsystem::ProcessContestRanking(const FDTFluxContestRankings& C
|
||||
DataStorage->AddContestRanking(NewContestRankings);
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestRankings added for Contest %s"),
|
||||
*NewContestRankings.ContestName);
|
||||
SaveDataStorage();
|
||||
if (bShouldKeepRankings)
|
||||
{
|
||||
SaveDataStorage();
|
||||
}
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::ProcessStageRanking(const FDTFluxStageRankings& StageRankings)
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Received StageRankings with %i Items"), StageRankings.Rankings.Num());
|
||||
DataStorage->UpdateOrCreateStageRanking(StageRankings);
|
||||
SaveDataStorage();
|
||||
if (bShouldKeepRankings) { SaveDataStorage(); }
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::ProcessSplitRanking(const FDTFluxSplitRankings& SplitRankings)
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Received SplitRanking with %i Items"), SplitRankings.Rankings.Num());
|
||||
DataStorage->UpdateOrCreateSplitRanking(SplitRankings);
|
||||
SaveDataStorage();
|
||||
if (bShouldKeepRankings) { SaveDataStorage(); }
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::ProcessTeamStatusUpdate(const FDTFluxTeamStatusUpdate& NewParticipantStatus)
|
||||
@ -286,14 +368,18 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestContestRankings(const TArray<i
|
||||
FOnDTFluxRequestSuccess OnSuccess = FOnDTFluxRequestSuccess::CreateLambda(
|
||||
[this](const FDTFluxTrackedRequest& Request)
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("ContestRanking Request %s %s Success"),
|
||||
UE_LOG(logDTFluxCoreSubsystem, Log, TEXT("ContestRanking Request %s %s Success"),
|
||||
*Request.RequestId.ToString(), *UEnum::GetValueAsString(Request.RequestType));
|
||||
if (Request.ParsedResponse.IsSet())
|
||||
{
|
||||
ProcessTrackedResponse(*Request.ParsedResponse.GetValue());
|
||||
}
|
||||
});
|
||||
|
||||
FOnDTFluxRequestError OnError = FOnDTFluxRequestError::CreateLambda(
|
||||
[this](const FDTFluxTrackedRequest& InReq, const FString& InError)
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Error, TEXT("ContestRanking Request [%s] Error %s"),
|
||||
UE_LOG(logDTFluxCoreSubsystem, Log, TEXT("ContestRanking Request [%s] Error %s"),
|
||||
*InReq.RequestId.ToString(), *InError);
|
||||
});
|
||||
// if Contest is not ended
|
||||
@ -318,6 +404,10 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestStageRankings(const TArray<FDT
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Stage Request %s %s Success"),
|
||||
*Request.RequestId.ToString(), *UEnum::GetValueAsString(Request.RequestType));
|
||||
if (Request.ParsedResponse.IsSet())
|
||||
{
|
||||
ProcessTrackedResponse(*Request.ParsedResponse.GetValue());
|
||||
}
|
||||
});
|
||||
|
||||
FOnDTFluxRequestError OnError = FOnDTFluxRequestError::CreateLambda(
|
||||
@ -348,6 +438,10 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestSplitRankings(const TArray<FDT
|
||||
{
|
||||
UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Stage Request %s %s Success"),
|
||||
*Request.RequestId.ToString(), *UEnum::GetValueAsString(Request.RequestType));
|
||||
if (Request.ParsedResponse.IsSet())
|
||||
{
|
||||
ProcessTrackedResponse(*Request.ParsedResponse.GetValue());
|
||||
}
|
||||
});
|
||||
|
||||
FOnDTFluxRequestError OnError = FOnDTFluxRequestError::CreateLambda(
|
||||
@ -368,68 +462,6 @@ TArray<FGuid> UDTFluxCoreSubsystem::TrackedRequestSplitRankings(const TArray<FDT
|
||||
return TArray<FGuid>();
|
||||
}
|
||||
|
||||
|
||||
void UDTFluxCoreSubsystem::SendTeamListRequest()
|
||||
{
|
||||
if (NetworkSubsystem)
|
||||
{
|
||||
NetworkSubsystem->SendRequest(EDTFluxRequestType::TeamList);
|
||||
}
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::SendRaceDataRequest()
|
||||
{
|
||||
if (NetworkSubsystem)
|
||||
{
|
||||
NetworkSubsystem->SendRequest(EDTFluxRequestType::RaceData);
|
||||
}
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::SendContestRankingRequest(int InContestId)
|
||||
{
|
||||
if (NetworkSubsystem)
|
||||
{
|
||||
NetworkSubsystem->SendRequest(EDTFluxRequestType::ContestRanking, InContestId);
|
||||
}
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::SendStageRankingRequest(int InContestId, int InStageId, bool bShouldIncludeSplitRanking)
|
||||
{
|
||||
// TODO Implement this
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::RequestAllStageRankingOfContest(int InContestId, int InStageId,
|
||||
bool bShouldIncludeSplitRanking)
|
||||
{
|
||||
// TODO Implement this
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::SendSplitRankingRequest(int InContestId, int InStageId, int InSplitId)
|
||||
{
|
||||
// TODO Implement this
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::RequestAllSplitRankingOfContest(int InContestId, int InStageId)
|
||||
{
|
||||
// TODO Implement this
|
||||
}
|
||||
|
||||
//
|
||||
// FDTFluxStageRankings UDTFluxCoreSubsystem::GetStageRankings(FDTFluxStageKey StageKey)
|
||||
// {
|
||||
// if (DataStorage->StageRankings.Contains(StageKey))
|
||||
// {
|
||||
// return DataStorage->StageRankings[StageKey];
|
||||
// }
|
||||
// UE_LOG(logDTFluxCoreSubsystem, Warning, TEXT("Cannot find StageRankings for key [%s]"), *StageKey.GetDisplayName());
|
||||
// return FDTFluxStageRankings();
|
||||
// }
|
||||
|
||||
void UDTFluxCoreSubsystem::RequestAllSplitRankingOfStage(int InContestId, int InStageId, int InSplitId)
|
||||
{
|
||||
// TODO Implement this
|
||||
}
|
||||
|
||||
const FDTFluxParticipant UDTFluxCoreSubsystem::GetParticipant(int InBib)
|
||||
{
|
||||
if (DataStorage->Participants.Contains(InBib))
|
||||
@ -439,11 +471,6 @@ const FDTFluxParticipant UDTFluxCoreSubsystem::GetParticipant(int InBib)
|
||||
return FDTFluxParticipant();
|
||||
}
|
||||
|
||||
void UDTFluxCoreSubsystem::RefreshStorage()
|
||||
{
|
||||
// TODO Implement this
|
||||
}
|
||||
|
||||
TArray<int> UDTFluxCoreSubsystem::GetCurrentContestsId()
|
||||
{
|
||||
return GetContestsIdForTime(FDateTime::Now());
|
||||
@ -454,7 +481,7 @@ TArray<FDTFluxContest> UDTFluxCoreSubsystem::GetCurrentContests()
|
||||
return GetContestsForTime(FDateTime::Now());
|
||||
}
|
||||
|
||||
TArray<int> UDTFluxCoreSubsystem::GetContestsIdForTime(const FDateTime Time)
|
||||
TArray<int> UDTFluxCoreSubsystem::GetContestsIdForTime(const FDateTime Time) const
|
||||
{
|
||||
TArray<int> Contests;
|
||||
for (const auto& Pair : DataStorage->Contests)
|
||||
|
||||
@ -15,6 +15,7 @@ class UDTFluxNetworkSubsystem;
|
||||
/** Forward Decl */
|
||||
class UDTFluxModelAsset;
|
||||
class UDTFluxPursuitManager;
|
||||
struct FDTFluxServerResponse;
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FPursuitStaterData
|
||||
@ -114,42 +115,19 @@ public:
|
||||
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Core Subsystem")
|
||||
UDTFluxPursuitManager* PursuitManager = nullptr;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void SendTeamListRequest();
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void SendRaceDataRequest();
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void SendContestRankingRequest(int InContestId);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void SendStageRankingRequest(int InContestId, int InStageId, bool bShouldIncludeSplitRanking = true);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void RequestAllStageRankingOfContest(int InContestId, int InStageId, bool bShouldIncludeSplitRanking = true);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void SendSplitRankingRequest(int InContestId, int InStageId, int InSplitId);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void RequestAllSplitRankingOfContest(int InContestId, int InStageId);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void RequestAllSplitRankingOfStage(int InContestId, int InStageId, int InSplitId);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
const FDTFluxParticipant GetParticipant(int InBib);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="DTFlux|Core Subsystem")
|
||||
void RefreshStorage();
|
||||
//TODO : this must be a ProjectSetting
|
||||
UPROPERTY(BlueprintReadOnly, Category="DTFlux|Core Subsystem")
|
||||
bool bShouldKeepRankings = true;
|
||||
|
||||
UFUNCTION()
|
||||
TArray<int> GetCurrentContestsId();
|
||||
UFUNCTION()
|
||||
TArray<FDTFluxContest> GetCurrentContests();
|
||||
UFUNCTION()
|
||||
TArray<int> GetContestsIdForTime(const FDateTime Time);
|
||||
TArray<int> GetContestsIdForTime(const FDateTime Time) const;
|
||||
UFUNCTION()
|
||||
bool GetContestForId(const int Id, FDTFluxContest& OutContest);
|
||||
UFUNCTION()
|
||||
@ -167,6 +145,8 @@ protected:
|
||||
// ~Subsystem Interface
|
||||
UFUNCTION()
|
||||
void SaveDataStorage();
|
||||
UFUNCTION()
|
||||
void ProcessTrackedResponse(FDTFluxServerResponse& InResponse);
|
||||
|
||||
private:
|
||||
UDTFluxNetworkSubsystem* NetworkSubsystem = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user