From 16ac010036cd578567eeaa70ee22e586623a2bca Mon Sep 17 00:00:00 2001 From: Nick H Date: Wed, 29 Jan 2025 17:05:20 -0500 Subject: [PATCH 1/3] Removed unused online sub system module --- BCClient.uplugin | 15 - Source/BCClientPlugin/BCClientPlugin.Build.cs | 2 - .../Private/ConvertUtilities.cpp | 2 +- .../OnlineSubsystemBrainCloud.Build.cs | 44 -- .../OnlineAchievementsInterfaceBrainCloud.cpp | 394 ------------------ .../OnlineAchievementsInterfaceBrainCloud.h | 143 ------- .../OnlineCallbacks/AchievementCallback.cpp | 51 --- .../OnlineCallbacks/AchievementCallback.h | 51 --- .../AssignableServerCallback.cpp | 29 -- .../AssignableServerCallback.h | 39 -- .../OnlineCallbacks/LeaderboardCallback.cpp | 28 -- .../OnlineCallbacks/LeaderboardCallback.h | 31 -- .../OnlineCallbacks/MessageCallback.cpp | 27 -- .../Private/OnlineCallbacks/MessageCallback.h | 29 -- .../OnlineIdentityInterfaceBrainCloud.cpp | 277 ------------ .../OnlineIdentityInterfaceBrainCloud.h | 75 ---- .../OnlineLeaderboardInterfaceBrainCloud.cpp | 245 ----------- .../OnlineLeaderboardInterfaceBrainCloud.h | 66 --- .../OnlineMessageInterfaceBrainCloud.cpp | 245 ----------- .../OnlineMessageInterfaceBrainCloud.h | 132 ------ .../Private/OnlineSubsystemBrainCloud.cpp | 348 ---------------- .../OnlineSubsystemBrainCloudModule.cpp | 60 --- .../OnlineSubsystemBrainCloudPrivatePCH.h | 22 - .../Private/OnlineSubsystemBrainCloudTypes.h | 85 ---- .../Private/OnlineTimeInterfaceBrainCloud.cpp | 43 -- .../Private/OnlineTimeInterfaceBrainCloud.h | 46 -- .../OnlineTitleFileInterfaceBrainCloud.cpp | 312 -------------- .../OnlineTitleFileInterfaceBrainCloud.h | 120 ------ .../Public/OnlineSubsystemBrainCloud.h | 160 ------- .../Public/OnlineSubsystemBrainCloudModule.h | 43 -- .../Public/OnlineSubsystemBrainCloudPackage.h | 13 - 31 files changed, 1 insertion(+), 3176 deletions(-) delete mode 100644 Source/OnlineSubsystemBrainCloud/OnlineSubsystemBrainCloud.Build.cs delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineAchievementsInterfaceBrainCloud.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineAchievementsInterfaceBrainCloud.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AchievementCallback.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AchievementCallback.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AssignableServerCallback.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AssignableServerCallback.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/LeaderboardCallback.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/LeaderboardCallback.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/MessageCallback.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/MessageCallback.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineIdentityInterfaceBrainCloud.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineIdentityInterfaceBrainCloud.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineLeaderboardInterfaceBrainCloud.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineLeaderboardInterfaceBrainCloud.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineMessageInterfaceBrainCloud.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineMessageInterfaceBrainCloud.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloud.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudModule.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudPrivatePCH.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudTypes.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineTimeInterfaceBrainCloud.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineTimeInterfaceBrainCloud.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineTitleFileInterfaceBrainCloud.cpp delete mode 100644 Source/OnlineSubsystemBrainCloud/Private/OnlineTitleFileInterfaceBrainCloud.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloud.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloudModule.h delete mode 100644 Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloudPackage.h diff --git a/BCClient.uplugin b/BCClient.uplugin index 674a756..d2ba989 100644 --- a/BCClient.uplugin +++ b/BCClient.uplugin @@ -30,11 +30,6 @@ "Type": "UncookedOnly", "LoadingPhase": "PreDefault" }, - { - "Name": "OnlineSubsystemBrainCloud", - "Type": "Runtime", - "LoadingPhase": "PreDefault" - }, { "Name": "BCWidget", "Type": "EditorNoCommandlet", @@ -50,15 +45,5 @@ "Type": "Editor", "LoadingPhase": "PreDefault" } - ], - "Plugins": [ - { - "Name": "OnlineSubsystem", - "Enabled": true - }, - { - "Name": "OnlineSubsystemUtils", - "Enabled": true - } ] } diff --git a/Source/BCClientPlugin/BCClientPlugin.Build.cs b/Source/BCClientPlugin/BCClientPlugin.Build.cs index 7742f22..f277e06 100644 --- a/Source/BCClientPlugin/BCClientPlugin.Build.cs +++ b/Source/BCClientPlugin/BCClientPlugin.Build.cs @@ -35,8 +35,6 @@ public BCClientPlugin(TargetInfo Target) { "JsonUtilities", "HTTP", - "OnlineSubsystemUtils", - "OnlineSubsystem", "AndroidNative" }); diff --git a/Source/BCClientPlugin/Private/ConvertUtilities.cpp b/Source/BCClientPlugin/Private/ConvertUtilities.cpp index 5361954..3ebe0a1 100644 --- a/Source/BCClientPlugin/Private/ConvertUtilities.cpp +++ b/Source/BCClientPlugin/Private/ConvertUtilities.cpp @@ -70,7 +70,7 @@ TArray ConvertUtilities::CompressBytes(const TArray& UncompressedD CompressedData.SetNumUninitialized(CompressedSize); // Compress the data - if (FCompression::CompressMemory(NAME_Gzip, CompressedData.GetData(), CompressedSize, UncompressedData.GetData(), UncompressedData.Num(), COMPRESS_GZIP)) + if (FCompression::CompressMemory(NAME_Gzip, CompressedData.GetData(), CompressedSize, UncompressedData.GetData(), UncompressedData.Num())) { if(enableLogging) UE_LOG(LogTemp, Log, TEXT("Compress using GZIP successful")); diff --git a/Source/OnlineSubsystemBrainCloud/OnlineSubsystemBrainCloud.Build.cs b/Source/OnlineSubsystemBrainCloud/OnlineSubsystemBrainCloud.Build.cs deleted file mode 100644 index 3d2cbf0..0000000 --- a/Source/OnlineSubsystemBrainCloud/OnlineSubsystemBrainCloud.Build.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -using System.IO; -using UnrealBuildTool; - -public class OnlineSubsystemBrainCloud : ModuleRules -{ - private string ModulePath - { - get { return ModuleDirectory; } - } - -#if WITH_FORWARDED_MODULE_RULES_CTOR - public OnlineSubsystemBrainCloud(ReadOnlyTargetRules Target) : base(Target) -#else - public OnlineSubsystemBrainCloud(TargetInfo Target) -#endif - { - PrivatePCHHeaderFile = "Private/OnlineSubsystemBrainCloudPrivatePCH.h"; - PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PublicDefinitions.Add("ONLINESUBSYSTEMBRAINCLOUD_PACKAGE=1"); - - PrivateIncludePaths.AddRange( - new string[] { - "OnlineSubsystemBrainCloud/Private", - "OnlineSubsystemBrainCloud/Private/OnlineCallbacks" - }); - - PrivateDependencyModuleNames.AddRange( - new string[] { - "Core", - "CoreUObject", - "Engine", - "Sockets", - "OnlineSubsystem", - "OnlineSubsystemUtils", - "Json", - "JsonUtilities", - "BCClientPlugin", - "HTTP" - }); - } -} - diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineAchievementsInterfaceBrainCloud.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineAchievementsInterfaceBrainCloud.cpp deleted file mode 100644 index d08a6f4..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineAchievementsInterfaceBrainCloud.cpp +++ /dev/null @@ -1,394 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "OnlineAchievementsInterfaceBrainCloud.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" -#include "OnlineSubsystemBrainCloud.h" -#include "BrainCloudClient.h" -#include "AchievementCallback.h" - -FOnlineAchievementsBrainCloud::FOnlineAchievementsBrainCloud(class FOnlineSubsystemBrainCloud* InSubsystem) - : Subsystem(InSubsystem) -{ - check(Subsystem); - bHaveConfiguredAchievements = ReadAchievementsFromConfig(); -} - -bool FOnlineAchievementsBrainCloud::ReadAchievementsFromConfig() -{ - if (Achievements.Num() > 0) - { - return true; - } - - BrainCloudAchievementsConfig Config(Subsystem->GetConfigPath()); - return Config.ReadAchievements(Achievements); -} - -void FOnlineAchievementsBrainCloud::WriteAchievements(const FUniqueNetId& PlayerId, FOnlineAchievementsWriteRef& WriteObject, const FOnAchievementsWrittenDelegate& Delegate) -{ - if (!bHaveConfiguredAchievements) - { - // we don't have achievements - UE_LOG_ONLINE(Warning, TEXT("BrainCloud achievements have not been configured in .ini")); - - WriteObject->WriteState = EOnlineAsyncTaskState::Failed; - Delegate.ExecuteIfBound(PlayerId, false); - return; - } - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - const TArray * PlayerAch = PlayerAchievements.Find(FUniqueNetIdString::Create(PlayerId.ToString(), PlayerId.GetType()).Get()); -#else - FUniqueNetIdString BrainCloudId(PlayerId); - const TArray * PlayerAch = PlayerAchievements.Find(BrainCloudId); -#endif - if (NULL == PlayerAch) - { - // achievements haven't been read for a player - UE_LOG_ONLINE(Warning, TEXT("BrainCloud achievements have not been read for player %s"), *PlayerId.ToString()); - - WriteObject->WriteState = EOnlineAsyncTaskState::Failed; - Delegate.ExecuteIfBound(PlayerId, false); - return; - } - - TArray achievements; - - const int32 AchNum = PlayerAch->Num(); - for (FStatPropertyArray::TConstIterator It(WriteObject->Properties); It; ++It) - { - const FString AchievementId = It.Key().ToString(); - for (int32 AchIdx = 0; AchIdx < AchNum; ++AchIdx) - { - if ((*PlayerAch)[AchIdx].Id == AchievementId) - { - float Value = 0.0f; - It.Value().GetValue(Value); - if (Value >= 100.0f) - { - achievements.Add(AchievementId); - UE_LOG_ONLINE(Verbose, TEXT("Setting achievement '%s'"), *AchievementId); - } - break; - } - } - } - - if (achievements.Num() > 0) - { - AchievementCallback* cb = new AchievementCallback(PlayerId, WriteObject, Delegate); - cb->OnWriteCompleteDelegate.AddRaw(this, &FOnlineAchievementsBrainCloud::OnWriteAchievementsComplete); - Subsystem->RegisterCallbackObject(cb); - Subsystem->GetClient()->getGamificationService()->awardAchievements(achievements, cb); - } - else - { - WriteObject->WriteState = EOnlineAsyncTaskState::Failed; - Delegate.ExecuteIfBound(PlayerId, false); - } -}; - -void FOnlineAchievementsBrainCloud::QueryAchievements(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate) -{ - if (!bHaveConfiguredAchievements) - { - // we don't have achievements - UE_LOG_ONLINE(Warning, TEXT("BrainCloud achievements have not been configured in .ini")); - - Delegate.ExecuteIfBound(PlayerId, false); - return; - } - AchievementQueryCallback* cb = Subsystem->GetCallbackObject(&PlayerId, Delegate); - cb->OnQueryCompleteDelegate.AddRaw(this, &FOnlineAchievementsBrainCloud::OnQueryAchievementsComplete); - Subsystem->RegisterCallbackObject(cb); - Subsystem->GetClient()->getGamificationService()->readAchievements(cb, true); -} - -void FOnlineAchievementsBrainCloud::QueryAchievementDescriptions(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate) -{ - if (!bHaveConfiguredAchievements) - { - // we don't have achievements - UE_LOG_ONLINE(Warning, TEXT("BrainCloud achievements have not been configured in .ini")); - - Delegate.ExecuteIfBound(PlayerId, false); - return; - } - AchievementQueryCallback* cb = Subsystem->GetCallbackObject(&PlayerId, Delegate); - cb->OnQueryCompleteDelegate.AddRaw(this, &FOnlineAchievementsBrainCloud::OnQueryAchievementDescComplete); - Subsystem->RegisterCallbackObject(cb); - Subsystem->GetClient()->getGamificationService()->readAchievements(cb, true); -} - -EOnlineCachedResult::Type FOnlineAchievementsBrainCloud::GetCachedAchievement(const FUniqueNetId& PlayerId, const FString& AchievementId, FOnlineAchievement& OutAchievement) -{ - if (!bHaveConfiguredAchievements) - { - // we don't have achievements - return EOnlineCachedResult::NotFound; - } - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - const TArray * PlayerAch = PlayerAchievements.Find(FUniqueNetIdString::Create(PlayerId.ToString(), PlayerId.GetType()).Get()); -#else - FUniqueNetIdString BrainCloudId(PlayerId); - const TArray * PlayerAch = PlayerAchievements.Find(BrainCloudId); -#endif - if (PlayerAch == nullptr) - { - // achievements haven't been read for a player - return EOnlineCachedResult::NotFound; - } - - const int32 AchNum = PlayerAch->Num(); - for (int32 AchIdx = 0; AchIdx < AchNum; ++AchIdx) - { - if ((*PlayerAch)[AchIdx].Id == AchievementId) - { - OutAchievement = (*PlayerAch)[AchIdx]; - return EOnlineCachedResult::Success; - } - } - - // no such achievement - return EOnlineCachedResult::NotFound; -}; - -EOnlineCachedResult::Type FOnlineAchievementsBrainCloud::GetCachedAchievements(const FUniqueNetId& PlayerId, TArray & OutAchievements) -{ - if (!bHaveConfiguredAchievements) - { - // we don't have achievements - return EOnlineCachedResult::NotFound; - } - - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - const TArray * PlayerAch = PlayerAchievements.Find(FUniqueNetIdString::Create(PlayerId.ToString(), PlayerId.GetType()).Get()); -#else - FUniqueNetIdString BrainCloudId(PlayerId); - const TArray * PlayerAch = PlayerAchievements.Find(BrainCloudId); -#endif - if (PlayerAch == nullptr) - { - // achievements haven't been read for a player - return EOnlineCachedResult::NotFound; - } - - OutAchievements = *PlayerAch; - return EOnlineCachedResult::Success; -}; - -EOnlineCachedResult::Type FOnlineAchievementsBrainCloud::GetCachedAchievementDescription(const FString& AchievementId, FOnlineAchievementDesc& OutAchievementDesc) -{ - if (!bHaveConfiguredAchievements) - { - // we don't have achievements - return EOnlineCachedResult::NotFound; - } - - if (AchievementDescriptions.Num() == 0) - { - // don't have descs - return EOnlineCachedResult::NotFound; - } - - FOnlineAchievementDesc * AchDesc = AchievementDescriptions.Find(AchievementId); - if (AchDesc == nullptr) - { - // no such achievement - return EOnlineCachedResult::NotFound; - } - - OutAchievementDesc = *AchDesc; - return EOnlineCachedResult::Success; -}; - -void FOnlineAchievementsBrainCloud::OnWriteAchievementsComplete(bool bWasSuccessful, const FString& jsonData, const FUniqueNetId& PlayerId, FOnlineAchievementsWritePtr& WriteObject, const FOnAchievementsWrittenDelegate& Delegate) -{ - // if write completed successfully, unlock the achievements (and update their cache) - if (bWasSuccessful) - { - - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - TArray * PlayerAch = PlayerAchievements.Find(FUniqueNetIdString::Create(PlayerId.ToString(), PlayerId.GetType()).Get()); -#else - TArray * PlayerAch = PlayerAchievements.Find(FUniqueNetIdString(PlayerId)); -#endif - check(PlayerAch); // were we writing for a non-existing player? - if (PlayerAch != nullptr) - { - // treat each achievement as unlocked - const int32 AchNum = PlayerAch->Num(); - for (FStatPropertyArray::TConstIterator It(WriteObject->Properties); It; ++It) - { - const FString AchievementId = It.Key().ToString(); - for (int32 AchIdx = 0; AchIdx < AchNum; ++AchIdx) - { - if ((*PlayerAch)[AchIdx].Id == AchievementId) - { - // Update and trigger the callback - (*PlayerAch)[AchIdx].Progress = 100.0; - TriggerOnAchievementUnlockedDelegates(PlayerId, (*PlayerAch)[AchIdx].Id); - break; - } - } - } - } - Delegate.ExecuteIfBound(PlayerId, bWasSuccessful); - } - else - { - UE_LOG_ONLINE(Error, TEXT("Error writing achievements: %s"), *jsonData); - Delegate.ExecuteIfBound(PlayerId, bWasSuccessful); - } -} - -void FOnlineAchievementsBrainCloud::OnQueryAchievementsComplete(bool bWasSuccessful, const FString& jsonData, const FUniqueNetId* PlayerId, FOnQueryAchievementsCompleteDelegate& Delegate) -{ - if (!bWasSuccessful) - { - UE_LOG_ONLINE(Warning, TEXT("OnQueryAchievementDescComplete Failed")); - Delegate.ExecuteIfBound(*PlayerId, false); - return; - } - - TArray> achievements = FOnlineSubsystemBrainCloud::GetJsonData(jsonData)->GetArrayField(TEXT("achievements")); - - TArray achievementsForPlayer; - - for (int32 i = 0; i < achievements.Num(); ++i) - { - TSharedPtr achievement = achievements[i]->AsObject(); - FString id = achievement->GetStringField(TEXT("id")); - - for (int32 j = 0; j < Achievements.Num(); ++j) - { - if (Achievements[j].Id == id) //achievement must be configured locally - { - FOnlineAchievementBrainCloud ach; - - if (getAchievementFromJson(achievement, ach)) - { - achievementsForPlayer.Add(ach); - } - break; - } - } - } - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - FUniqueNetIdString brainCloudId = FUniqueNetIdString::Create(PlayerId->ToString(), PlayerId->GetType()).Get(); -#else - FUniqueNetIdString brainCloudId(*PlayerId); -#endif - - if (PlayerAchievements.Contains(brainCloudId)) - { - PlayerAchievements.Remove(brainCloudId); - } - PlayerAchievements.Add(brainCloudId, achievementsForPlayer); - - Delegate.ExecuteIfBound(*PlayerId, true); -} - -void FOnlineAchievementsBrainCloud::OnQueryAchievementDescComplete(bool bWasSuccessful, const FString& jsonData, const FUniqueNetId* PlayerId, FOnQueryAchievementsCompleteDelegate& Delegate) -{ - if (!bWasSuccessful) - { - UE_LOG_ONLINE(Warning, TEXT("OnQueryAchievementDescComplete Failed")); - Delegate.ExecuteIfBound(*PlayerId, false); - return; - } - - TArray> achievements = FOnlineSubsystemBrainCloud::GetJsonData(jsonData)->GetArrayField(TEXT("achievements")); - - TArray achievementsForPlayer; - - for (int32 i = 0; i < achievements.Num(); ++i) - { - TSharedPtr achievement = achievements[i]->AsObject(); - FString id = achievement->GetStringField(TEXT("id")); - - for (int32 j = 0; j < Achievements.Num(); ++i) - { - if (Achievements[j].Id == id) - { - FOnlineAchievementBrainCloud ach; - - if (getAchievementFromJson(achievement, ach)) - { - AchievementDescriptions.Add(Achievements[j].Id, ach); - } - break; - } - } - } - - Delegate.ExecuteIfBound(*PlayerId, true); -} - -bool FOnlineAchievementsBrainCloud::getAchievementFromJson(const TSharedPtr& jsonObj, FOnlineAchievementBrainCloud& achievementOut) -{ - FString status = ""; - FString id = ""; - FString title = ""; - FString description = ""; - bool invisibleUntilEarned = false; - - status = jsonObj->GetStringField(TEXT("status")); - id = jsonObj->GetStringField(TEXT("id")); - title = jsonObj->GetStringField(TEXT("title")); - description = jsonObj->GetStringField(TEXT("description")); - - if (jsonObj->HasField(TEXT("invisibleUntilEarned"))) - invisibleUntilEarned = jsonObj->GetBoolField(TEXT("invisibleUntilEarned")); - - achievementOut.Id = id; - achievementOut.Progress = status == TEXT("AWARDED") ? 100.0 : 0.0; - achievementOut.bIsHidden = invisibleUntilEarned && achievementOut.Progress < 100.0; - - achievementOut.Title = FText::FromString(title); - achievementOut.LockedDesc = FText::FromString(description); - achievementOut.UnlockedDesc = FText::FromString(description); - - achievementOut.bReadFromBrainCloud = true; - return true; -} - -#if !UE_BUILD_SHIPPING -bool FOnlineAchievementsBrainCloud::ResetAchievements(const FUniqueNetId& PlayerId) -{ - if (!bHaveConfiguredAchievements) - { - // we don't have achievements - UE_LOG_ONLINE(Warning, TEXT("No achievements have been configured")); - return false; - } - - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - TArray * PlayerAch = PlayerAchievements.Find(FUniqueNetIdString::Create(PlayerId.ToString(), PlayerId.GetType()).Get()); -#else - FUniqueNetIdString BrainCloudId(PlayerId); - TArray * PlayerAch = PlayerAchievements.Find(BrainCloudId); -#endif - - if (NULL == PlayerAch) - { - // achievements haven't been read for a player - UE_LOG_ONLINE(Warning, TEXT("Could not find achievements for player %s"), *PlayerId.ToString()); - return false; - } - - // treat each achievement as unlocked - const int32 AchNum = PlayerAch->Num(); - for (int32 AchIdx = 0; AchIdx < AchNum; ++AchIdx) - { - (*PlayerAch)[AchIdx].Progress = 0.0; - } - - return true; -}; -#endif // !UE_BUILD_SHIPPING diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineAchievementsInterfaceBrainCloud.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineAchievementsInterfaceBrainCloud.h deleted file mode 100644 index f5c09fb..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineAchievementsInterfaceBrainCloud.h +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once -#include "Misc/ConfigCacheIni.h" -#include "Interfaces/OnlineAchievementsInterface.h" -#include "OnlineSubsystemBrainCloudPackage.h" - -/** - * IOnlineAchievements - Interface class for acheivements - */ -class FOnlineAchievementsBrainCloud : public IOnlineAchievements -{ -private: - - /** Structure describing a Null achievement */ - struct FOnlineAchievementBrainCloud : public FOnlineAchievement, public FOnlineAchievementDesc - { - /** Whether achievement info has been read from BrainCloud */ - bool bReadFromBrainCloud; - - /** Returns debugging string to print out achievement info */ - FString ToDebugString() const - { - return FString::Printf(TEXT("Achievement:{%s}, Description:{%s}, bReadFromBrainCloud=%s"), - *FOnlineAchievement::ToDebugString(), - *FOnlineAchievementDesc::ToDebugString(), - bReadFromBrainCloud ? TEXT("true") : TEXT("false") - ); - } - }; - - /** - * A helper class for configuring achievements in ini - */ - struct BrainCloudAchievementsConfig - { - /** - * Create a config using the default values: - * IniName - BrainCloudClient - */ - BrainCloudAchievementsConfig(FString iniName) - : IniName(iniName) - , SectionName(TEXT("BrainCloud.Achievements")) - { - } - - /** Returns empty string if couldn't read */ - FString GetKey(const FString& KeyName) - { - FString Result; - if (!GConfig->GetString(*SectionName, *KeyName, Result, IniName)) - { - return TEXT(""); // could just return Result, but being explicit is better?! - } - return Result; - } - - bool ReadAchievements(TArray & OutArray) - { - OutArray.Empty(); - int NumAchievements = 0; - - for (;; ++NumAchievements) - { - FString Id = GetKey(FString::Printf(TEXT("Achievement_%d_Id"), NumAchievements)); - if (Id.IsEmpty()) - { - break; - } - - FOnlineAchievementBrainCloud NewAch; - NewAch.Id = Id; - NewAch.Progress = 0.0; - NewAch.bReadFromBrainCloud = false; - - OutArray.Add(NewAch); - } - - return NumAchievements > 0; - } - - - /** Ini file name to find the config values */ - FString IniName; - /** Section name for Null */ - FString SectionName; - }; - - /** Reference to the owning subsystem */ - class FOnlineSubsystemBrainCloud* Subsystem; - - /** hide the default constructor, we need a reference to our OSS */ - FOnlineAchievementsBrainCloud() {}; - - /** Mapping of players to their achievements */ - TMap> PlayerAchievements; - - /** Cached achievement descriptions for an Id */ - TMap AchievementDescriptions; - - /** Cached achievements (not player-specific) */ - TArray Achievements; - - /** Whether we have achievements specified in the .ini */ - bool bHaveConfiguredAchievements; - - /** Initializes achievements from config. Returns true if there is at least one achievement */ - bool ReadAchievementsFromConfig(); - - void OnWriteAchievementsComplete(bool bWasSuccessful, const FString& jsonData, const FUniqueNetId& PlayerId, FOnlineAchievementsWritePtr& WriteObject, const FOnAchievementsWrittenDelegate& Delegate); - void OnQueryAchievementsComplete(bool bWasSuccessful, const FString& jsonData, const FUniqueNetId* PlayerId, FOnQueryAchievementsCompleteDelegate& Delegate); - void OnQueryAchievementDescComplete(bool bWasSuccessful, const FString& jsonData, const FUniqueNetId* PlayerId, FOnQueryAchievementsCompleteDelegate& Delegate); - - /* Helper to convert an achievement JSON object to a FOnlineAchievementBrainCloud */ - bool getAchievementFromJson(const TSharedPtr& jsonObj, FOnlineAchievementBrainCloud& achievementOut); - -public: - - /** - * Constructor - * - * @param InSubsystem - A reference to the owning subsystem - */ - FOnlineAchievementsBrainCloud(class FOnlineSubsystemBrainCloud* InSubsystem); - - /** - * Default destructor - */ - virtual ~FOnlineAchievementsBrainCloud(){} - - // Begin IOnlineAchievements interface - virtual void WriteAchievements(const FUniqueNetId& PlayerId, FOnlineAchievementsWriteRef& WriteObject, const FOnAchievementsWrittenDelegate& Delegate = FOnAchievementsWrittenDelegate()) override; - virtual void QueryAchievements(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate = FOnQueryAchievementsCompleteDelegate()) override; - virtual void QueryAchievementDescriptions(const FUniqueNetId& PlayerId, const FOnQueryAchievementsCompleteDelegate& Delegate = FOnQueryAchievementsCompleteDelegate()) override; - virtual EOnlineCachedResult::Type GetCachedAchievement(const FUniqueNetId& PlayerId, const FString& AchievementId, FOnlineAchievement& OutAchievement) override; - virtual EOnlineCachedResult::Type GetCachedAchievements(const FUniqueNetId& PlayerId, TArray & OutAchievements) override; - virtual EOnlineCachedResult::Type GetCachedAchievementDescription(const FString& AchievementId, FOnlineAchievementDesc& OutAchievementDesc) override; - -#if !UE_BUILD_SHIPPING - virtual bool ResetAchievements(const FUniqueNetId& PlayerId) override; -#endif // !UE_BUILD_SHIPPING - // End IOnlineAchievements interface -}; diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AchievementCallback.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AchievementCallback.cpp deleted file mode 100644 index 55c75a2..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AchievementCallback.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "AchievementCallback.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" -#include "AssignableServerCallback.h" - -#include "ServiceOperation.h" -#include "ServiceName.h" - -#include "OnlineAchievementsInterfaceBrainCloud.h" - - -AchievementCallback::AchievementCallback(const FUniqueNetId& PlayerId, FOnlineAchievementsWriteRef& WriteObject, const FOnAchievementsWrittenDelegate& Delegate) - : _playerId(PlayerId), - _writeDelegate(Delegate), - _writeObject(WriteObject) -{ -} - -//BC Callbacks -void AchievementCallback::serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData) -{ - OnWriteCompleteDelegate.Broadcast(true, jsonData, _playerId, _writeObject, _writeDelegate); - _isComplete = true; -} - -void AchievementCallback::serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError) -{ - OnWriteCompleteDelegate.Broadcast(false, jsonError, _playerId, _writeObject, _writeDelegate); - _isComplete = true; -} - - -AchievementQueryCallback::AchievementQueryCallback(const FUniqueNetId* PlayerId, FOnQueryAchievementsCompleteDelegate& Delegate) - : _playerId(PlayerId), - _queryDelegate(Delegate) -{ -} - -//BC Callbacks -void AchievementQueryCallback::serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData) -{ - OnQueryCompleteDelegate.Broadcast(true, jsonData, _playerId, _queryDelegate); - _isComplete = true; -} - -void AchievementQueryCallback::serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError) -{ - OnQueryCompleteDelegate.Broadcast(false, jsonError, _playerId, _queryDelegate); - _isComplete = true; -} \ No newline at end of file diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AchievementCallback.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AchievementCallback.h deleted file mode 100644 index dafce57..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AchievementCallback.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "AssignableServerCallback.h" -#include "OnlineAchievementsInterfaceBrainCloud.h" -#include "OnlineStats.h" - -class FOnlineAchievementsBrainCloud; - -class AchievementCallback : public AssignableServerCallback -{ -public: - DECLARE_MULTICAST_DELEGATE_FiveParams(OnAchievementWriteComplete, bool, const FString&, const FUniqueNetId&, FOnlineAchievementsWritePtr&, const FOnAchievementsWrittenDelegate&); - - AchievementCallback(const FUniqueNetId& PlayerId, FOnlineAchievementsWriteRef& WriteObject, const FOnAchievementsWrittenDelegate& Delegate); - virtual ~AchievementCallback() {}; - - OnAchievementWriteComplete OnWriteCompleteDelegate; - - // IServerCallback interface - void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData); - void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError); - // End of IServerCallback interface - -private: - const FUniqueNetId& _playerId; - FOnAchievementsWrittenDelegate _writeDelegate; - FOnlineAchievementsWritePtr _writeObject; -}; - -class AchievementQueryCallback : public AssignableServerCallback -{ -public: - DECLARE_MULTICAST_DELEGATE_FourParams(OnAchievementQueryComplete, bool, const FString&, const FUniqueNetId*, FOnQueryAchievementsCompleteDelegate&); - - AchievementQueryCallback(const FUniqueNetId* PlayerId, FOnQueryAchievementsCompleteDelegate& Delegate); - virtual ~AchievementQueryCallback() {}; - - OnAchievementQueryComplete OnQueryCompleteDelegate; - - // IServerCallback interface - void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData); - void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError); - // End of IServerCallback interface - -private: - const FUniqueNetId* _playerId; - FOnQueryAchievementsCompleteDelegate _queryDelegate; -}; - diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AssignableServerCallback.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AssignableServerCallback.cpp deleted file mode 100644 index 7a5c6a8..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AssignableServerCallback.cpp +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "AssignableServerCallback.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" - -#include "ServiceOperation.h" -#include "ServiceName.h" - -//AssignableServerCallback::AssignableServerCallback(OnSuccessFuncPtr successFunc, OnFailFuncPtr failureFunc) -// : successFunc(successFunc), failureFunc(failureFunc) -//{ -//} - -AssignableServerCallback::~AssignableServerCallback() -{ -} - -//BC Callbacks -void AssignableServerCallback::serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData) -{ - OnSuccessDelegate.Broadcast(jsonData); - _isComplete = true; -} - -void AssignableServerCallback::serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError) -{ - OnFailDelegate.Broadcast(reasonCode, jsonError); - _isComplete = true; -} \ No newline at end of file diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AssignableServerCallback.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AssignableServerCallback.h deleted file mode 100644 index 843d059..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/AssignableServerCallback.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "IServerCallback.h" -#include - -class FOnlineLeaderboardsBrainCloud; - -DECLARE_MULTICAST_DELEGATE_OneParam(OnSuccess, const FString&); -DECLARE_MULTICAST_DELEGATE_TwoParams(OnFail, int32, const FString&); - -class AssignableServerCallback : public IServerCallback -{ - //typedef TFunctionRef OnSuccessFuncPtr; - //typedef TFunctionRef OnFailFuncPtr; - -public: - AssignableServerCallback() = default; - //AssignableServerCallback(OnSuccessFuncPtr successFunc, OnFailFuncPtr failureFunc); - ~AssignableServerCallback(); - - bool IsComplete() { return _isComplete; } - - OnSuccess OnSuccessDelegate; - OnFail OnFailDelegate; - - // IServerCallback interface - void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData); - void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError); - // End of IServerCallback interface - -protected: - bool _isComplete = false; - -private: - //OnSuccessFuncPtr successFunc = nullptr; - //OnFailFuncPtr failureFunc = nullptr; -}; diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/LeaderboardCallback.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/LeaderboardCallback.cpp deleted file mode 100644 index e51234f..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/LeaderboardCallback.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "LeaderboardCallback.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" -#include "AssignableServerCallback.h" - -#include "ServiceOperation.h" -#include "ServiceName.h" - -#include "OnlineLeaderboardInterfaceBrainCloud.h" - - -LeaderboardCallback::LeaderboardCallback(FOnlineLeaderboardReadRef leaderboardRead) : _leaderboardRead(leaderboardRead) -{ -} - -//BC Callbacks -void LeaderboardCallback::serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData) -{ - OnSuccessDelegate.Broadcast(jsonData, _leaderboardRead.ToSharedRef()); - _isComplete = true; -} - -void LeaderboardCallback::serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError) -{ - OnFailDelegate.Broadcast(reasonCode, jsonError, _leaderboardRead.ToSharedRef()); - _isComplete = true; -} \ No newline at end of file diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/LeaderboardCallback.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/LeaderboardCallback.h deleted file mode 100644 index b6e12a6..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/LeaderboardCallback.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "AssignableServerCallback.h" -#include "OnlineLeaderboardInterfaceBrainCloud.h" -#include "OnlineStats.h" - -class FOnlineLeaderboardsBrainCloud; - -DECLARE_MULTICAST_DELEGATE_TwoParams(OnLeaderboardSuccess, const FString&, FOnlineLeaderboardReadRef); -DECLARE_MULTICAST_DELEGATE_ThreeParams(OnLeaderboardFail, int32, const FString&, FOnlineLeaderboardReadRef); - -class LeaderboardCallback : public AssignableServerCallback -{ -public: - LeaderboardCallback(FOnlineLeaderboardReadRef leaderboardRead); - virtual ~LeaderboardCallback() {}; - - OnLeaderboardSuccess OnSuccessDelegate; - OnLeaderboardFail OnFailDelegate; - - // IServerCallback interface - void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData); - void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError); - // End of IServerCallback interface - -private: - FOnlineLeaderboardReadPtr _leaderboardRead; -}; - diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/MessageCallback.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/MessageCallback.cpp deleted file mode 100644 index ef6a51c..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/MessageCallback.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "MessageCallback.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" -#include "AssignableServerCallback.h" - -#include "ServiceOperation.h" -#include "ServiceName.h" -#include "OnlineMessageInterfaceBrainCloud.h" - -MessageCallback::MessageCallback(const FUniqueMessageId& messageId) - : _messageId(messageId) -{ -} - -//BC Callbacks -void MessageCallback::serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData) -{ - OnSuccessDelegate.Broadcast(jsonData, _messageId); - _isComplete = true; -} - -void MessageCallback::serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError) -{ - OnFailDelegate.Broadcast(reasonCode, jsonError, _messageId); - _isComplete = true; -} \ No newline at end of file diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/MessageCallback.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/MessageCallback.h deleted file mode 100644 index 6c9843c..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineCallbacks/MessageCallback.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "AssignableServerCallback.h" -#include "OnlineMessageInterfaceBrainCloud.h" -#include "OnlineStats.h" - -DECLARE_MULTICAST_DELEGATE_TwoParams(OnMessageSuccess, const FString&, const FUniqueMessageId&); -DECLARE_MULTICAST_DELEGATE_ThreeParams(OnMessageFail, int32, const FString&, const FUniqueMessageId&); - -class MessageCallback : public AssignableServerCallback -{ -public: - MessageCallback(const FUniqueMessageId& messageId); - virtual ~MessageCallback() {}; - - OnMessageSuccess OnSuccessDelegate; - OnMessageFail OnFailDelegate; - - // IServerCallback interface - void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, const FString& jsonData); - void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int32 statusCode, int32 reasonCode, const FString& jsonError); - // End of IServerCallback interface - -private: - const FUniqueMessageId& _messageId; -}; - diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineIdentityInterfaceBrainCloud.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineIdentityInterfaceBrainCloud.cpp deleted file mode 100644 index a20fe04..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineIdentityInterfaceBrainCloud.cpp +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "OnlineIdentityInterfaceBrainCloud.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" -#include "IPAddress.h" -#include "SocketSubsystem.h" - -#include "BrainCloudClient.h" -#include "ServiceOperation.h" -#include "ServiceName.h" - -#include "AssignableServerCallback.h" -#include "Misc/CommandLine.h" - -FOnlineIdentityBrainCloud::FOnlineIdentityBrainCloud(class FOnlineSubsystemBrainCloud* InSubsystem) - : Subsystem(InSubsystem) -{ -} - -FOnlineIdentityBrainCloud::~FOnlineIdentityBrainCloud() -{ -} - -inline FString GenerateRandomUserId(int32 LocalUserNum) -{ - FString HostName; - if (!ISocketSubsystem::Get()->GetHostName(HostName)) - { - // could not get hostname, use address - bool bCanBindAll; - TSharedPtr Addr = ISocketSubsystem::Get()->GetLocalHostAddr(*GLog, bCanBindAll); - HostName = Addr->ToString(false); - } - - return FString::Printf(TEXT("%s-%s"), *HostName, *FGuid::NewGuid().ToString()); -} - -bool FOnlineIdentityBrainCloud::Login(int32 LocalUserNum, const FOnlineAccountCredentials& AccountCredentials) -{ - FString ErrorStr; - - if (AccountCredentials.Id.IsEmpty()) - { - ErrorStr = TEXT("Invalid account id, string empty"); - } - else if (bLoggingInUser) - { - ErrorStr = TEXT("Already logging in a user"); - } - else - { - AssignableServerCallback* cb = Subsystem->GetCallbackObject(); - - cb->OnSuccessDelegate.AddRaw(this, &FOnlineIdentityBrainCloud::authenticateSuccess); - cb->OnFailDelegate.AddRaw(this, &FOnlineIdentityBrainCloud::authenticateFail); - - Subsystem->GetClient()->getAuthenticationService()->authenticateUniversal( - AccountCredentials.Id, - AccountCredentials.Token, - true, - cb); - - bLoggingInUser = true; - } - - if (!ErrorStr.IsEmpty()) - { - // disable warnings about FUniqueNetId constructors deprecations - PRAGMA_DISABLE_DEPRECATION_WARNINGS - UE_LOG_ONLINE(Warning, TEXT("Login request failed: %s"), *ErrorStr); - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - TriggerOnLoginCompleteDelegates(LocalUserNum, false, FUniqueNetIdString::EmptyId().Get(), ErrorStr); -#else - TriggerOnLoginCompleteDelegates(LocalUserNum, false, FUniqueNetIdString(), ErrorStr); -#endif - return false; - PRAGMA_ENABLE_DEPRECATION_WARNINGS - } - return true; -} - -bool FOnlineIdentityBrainCloud::Logout(int32 LocalUserNum) -{ - if (GetLoginStatus(LocalUserNum) == ELoginStatus::LoggedIn) - { - AssignableServerCallback* cb = Subsystem->GetCallbackObject(); - - cb->OnSuccessDelegate.AddRaw(this, &FOnlineIdentityBrainCloud::logoutSuccess); - cb->OnFailDelegate.AddRaw(this, &FOnlineIdentityBrainCloud::logoutFail); - - Subsystem->GetClient()->getPlayerStateService()->logout(cb); - return true; - } - - UE_LOG_ONLINE(Warning, TEXT("No logged in user")); - TriggerOnLogoutCompleteDelegates(LocalUserNum, false); - return false; -} - -bool FOnlineIdentityBrainCloud::AutoLogin(int32 LocalUserNum) -{ - FString LoginStr; - FString PasswordStr; - FString TypeStr; - - FParse::Value(FCommandLine::Get(), TEXT("AUTH_LOGIN="), LoginStr); - FParse::Value(FCommandLine::Get(), TEXT("AUTH_PASSWORD="), PasswordStr); - FParse::Value(FCommandLine::Get(), TEXT("AUTH_TYPE="), TypeStr); - - if (!LoginStr.IsEmpty()) - { - if (!PasswordStr.IsEmpty()) - { - if (!TypeStr.IsEmpty()) - { - return Login(0, FOnlineAccountCredentials(TypeStr, LoginStr, PasswordStr)); - } - else - { - UE_LOG_ONLINE(Warning, TEXT("AutoLogin missing AUTH_TYPE=.")); - } - } - else - { - UE_LOG_ONLINE(Warning, TEXT("AutoLogin missing AUTH_PASSWORD=.")); - } - } - else - { - UE_LOG_ONLINE(Warning, TEXT("AutoLogin missing AUTH_LOGIN=.")); - } - return false; -} - -TSharedPtr FOnlineIdentityBrainCloud::GetUserAccount(const FUniqueNetId& UserId) const -{ - return nullptr; -} - -TArray > FOnlineIdentityBrainCloud::GetAllUserAccounts() const -{ - TArray> array; - return array; -} - -TSharedPtr FOnlineIdentityBrainCloud::GetUniquePlayerId(int32 LocalUserNum) const -{ - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - return FUniqueNetIdString::Create(Subsystem->GetClient()->getAuthenticationService()->getProfileId(), NAME_Unset); -#else - return MakeShareable(new FUniqueNetIdString(Subsystem->GetClient()->getAuthenticationService()->getProfileId())); -#endif -} - -TSharedPtr FOnlineIdentityBrainCloud::CreateUniquePlayerId(uint8* Bytes, int32 Size) -{ - if (Bytes && Size == sizeof(uint64)) - { - int32 StrLen = FCString::Strlen((TCHAR*)Bytes); - if (StrLen > 0) - { - FString StrId((TCHAR*)Bytes); - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - return FUniqueNetIdString::Create(StrId, NAME_Unset); -#else - return MakeShareable(new FUniqueNetIdString(StrId)); -#endif - } - } - return NULL; -} - -TSharedPtr FOnlineIdentityBrainCloud::CreateUniquePlayerId(const FString& Str) -{ - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - return FUniqueNetIdString::Create(Str, NAME_Unset); -#else - return MakeShareable(new FUniqueNetIdString(Str)); -#endif -} - -ELoginStatus::Type FOnlineIdentityBrainCloud::GetLoginStatus(int32 LocalUserNum) const -{ - if (Subsystem->GetClient()->isAuthenticated()) - { - return ELoginStatus::LoggedIn; - } - - return ELoginStatus::NotLoggedIn; -} - -ELoginStatus::Type FOnlineIdentityBrainCloud::GetLoginStatus(const FUniqueNetId& UserId) const -{ - return GetLoginStatus(0); -} - -FString FOnlineIdentityBrainCloud::GetPlayerNickname(int32 LocalUserNum) const -{ - return Subsystem->GetClient()->getPlayerStateService()->getUserName(); -} - -FString FOnlineIdentityBrainCloud::GetPlayerNickname(const FUniqueNetId& UserId) const -{ - return Subsystem->GetClient()->getPlayerStateService()->getUserName(); -} - -FString FOnlineIdentityBrainCloud::GetAuthToken(int32 LocalUserNum) const -{ - return TEXT(""); -} - -// Unreal Engine Version is >= 4.18 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 18) || ENGINE_MAJOR_VERSION ==5 -void FOnlineIdentityBrainCloud::RevokeAuthToken(const FUniqueNetId& UserId, const FOnRevokeAuthTokenCompleteDelegate& Delegate) -{ - -} -#endif - -#if (ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 4) -void FOnlineIdentityBrainCloud::GetUserPrivilege(const FUniqueNetId& UserId, EUserPrivileges::Type Privilege, const FOnGetUserPrivilegeCompleteDelegate& Delegate, EShowPrivilegeResolveUI ShowResolveUI) -#else -void FOnlineIdentityBrainCloud::GetUserPrivilege(const FUniqueNetId& UserId, EUserPrivileges::Type Privilege, const FOnGetUserPrivilegeCompleteDelegate& Delegate) -#endif -{ - Delegate.ExecuteIfBound(UserId, Privilege, (uint32)EPrivilegeResults::NoFailures); -} - -// Unreal Engine Version is >= 4.18 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 18) || ENGINE_MAJOR_VERSION == 5 -FPlatformUserId FOnlineIdentityBrainCloud::GetPlatformUserIdFromUniqueNetId(const FUniqueNetId& _uniqueNetId) const -#else -FPlatformUserId FOnlineIdentityBrainCloud::GetPlatformUserIdFromUniqueNetId(const FUniqueNetId& _uniqueNetId) -#endif -{ - return PLATFORMUSERID_NONE; -} - -// Unreal Engine Version is >= 4.11 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 11) || ENGINE_MAJOR_VERSION == 5 -FString FOnlineIdentityBrainCloud::GetAuthType() const -{ - return TEXT("BrainCloud"); -} -#endif - -//BC Callbacks -void FOnlineIdentityBrainCloud::authenticateSuccess(const FString& jsonData) -{ - bLoggingInUser = false; - TriggerOnLoginCompleteDelegates(0, true, *GetUniquePlayerId(0), FString()); -} - -void FOnlineIdentityBrainCloud::authenticateFail(int32 returnCode, const FString& jsonData) -{ - bLoggingInUser = false; - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - TriggerOnLoginCompleteDelegates(0, false, FUniqueNetIdString::EmptyId().Get(), FString()); -#else - TriggerOnLoginCompleteDelegates(0, false, FUniqueNetIdString(TEXT("")), FString()); -#endif -} - -void FOnlineIdentityBrainCloud::logoutSuccess(const FString&) -{ - TriggerOnLogoutCompleteDelegates(0, true); -} - -void FOnlineIdentityBrainCloud::logoutFail(int32 returnCode, const FString&) -{ - TriggerOnLogoutCompleteDelegates(0, false); -} diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineIdentityInterfaceBrainCloud.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineIdentityInterfaceBrainCloud.h deleted file mode 100644 index d607034..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineIdentityInterfaceBrainCloud.h +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "Interfaces/OnlineIdentityInterface.h" -#include "OnlineSubsystemBrainCloud.h" -#include "Runtime/Launch/Resources/Version.h" - -/** - * BrainCloud service implementation of the online identity interface - */ -class FOnlineIdentityBrainCloud : public IOnlineIdentity -{ -public: - - /** - * Constructor - * @param InSubsystem online subsystem being used - */ - FOnlineIdentityBrainCloud(FOnlineSubsystemBrainCloud* InSubsystem); - - /** - * Destructor - */ - virtual ~FOnlineIdentityBrainCloud(); - - // Begin IOnlineIdentity interface - virtual bool Login(int32 LocalUserNum, const FOnlineAccountCredentials& AccountCredentials) override; - virtual bool Logout(int32 LocalUserNum) override; - virtual bool AutoLogin(int32 LocalUserNum) override; - virtual TSharedPtr GetUserAccount(const FUniqueNetId& UserId) const override; - virtual TArray > GetAllUserAccounts() const override; - virtual TSharedPtr GetUniquePlayerId(int32 LocalUserNum) const override; - virtual TSharedPtr CreateUniquePlayerId(uint8* Bytes, int32 Size) override; - virtual TSharedPtr CreateUniquePlayerId(const FString& Str) override; - virtual ELoginStatus::Type GetLoginStatus(int32 LocalUserNum) const override; - virtual ELoginStatus::Type GetLoginStatus(const FUniqueNetId& UserId) const override; - virtual FString GetPlayerNickname(int32 LocalUserNum) const override; - virtual FString GetPlayerNickname(const FUniqueNetId& UserId) const override; - virtual FString GetAuthToken(int32 LocalUserNum) const override; - -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 18) || ENGINE_MAJOR_VERSION == 5 - virtual void RevokeAuthToken(const FUniqueNetId& UserId, const FOnRevokeAuthTokenCompleteDelegate& Delegate); -#endif - -#if (ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 4) - virtual void GetUserPrivilege(const FUniqueNetId&, EUserPrivileges::Type Privilege, const FOnGetUserPrivilegeCompleteDelegate& Delegate, EShowPrivilegeResolveUI ShowResolveUI=EShowPrivilegeResolveUI::Default) override; -#else - virtual void GetUserPrivilege(const FUniqueNetId& UserId, EUserPrivileges::Type Privilege, const FOnGetUserPrivilegeCompleteDelegate& Delegate) override; -#endif - -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 18) || ENGINE_MAJOR_VERSION == 5 - virtual FPlatformUserId GetPlatformUserIdFromUniqueNetId(const FUniqueNetId& UniqueNetId) const override; -#else - virtual FPlatformUserId GetPlatformUserIdFromUniqueNetId(const FUniqueNetId& UniqueNetId) override; -#endif - -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 11) || ENGINE_MAJOR_VERSION == 5 - virtual FString GetAuthType() const override; -#endif - // End IOnlineIdentity interface - - //BC Callbacks - void authenticateSuccess(const FString& jsonData); - void authenticateFail(int32 returnCode, const FString& jsonData); - - void logoutSuccess(const FString& jsonData); - void logoutFail(int32 returnCode, const FString& jsonData); - -private: - FOnlineSubsystemBrainCloud* Subsystem; - bool bLoggingInUser = false; -}; - -typedef TSharedPtr FOnlineIdentityBrainCloudPtr; diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineLeaderboardInterfaceBrainCloud.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineLeaderboardInterfaceBrainCloud.cpp deleted file mode 100644 index a626f1c..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineLeaderboardInterfaceBrainCloud.cpp +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. - -#include "OnlineLeaderboardInterfaceBrainCloud.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" -#include "Online.h" - -#include "BrainCloudClient.h" - -#include "OnlineSubsystemBrainCloud.h" -#include "ServiceOperation.h" -#include "ServiceName.h" -#include "LeaderboardCallback.h" - -using namespace std::placeholders; - -FOnlineLeaderboardsBrainCloud::FOnlineLeaderboardsBrainCloud(FOnlineSubsystemBrainCloud* InSubsystem) - : Subsystem(InSubsystem) -{ - check(Subsystem); -} - -bool FOnlineLeaderboardsBrainCloud::ReadLeaderboards(const TArray< TSharedRef >& Players, FOnlineLeaderboardReadRef& ReadObject) -{ - ReadObject->Rows.Empty(); - ReadObject->ReadState = EOnlineAsyncTaskState::InProgress; - - - LeaderboardCallback* lbcb = Subsystem->GetCallbackObject(ReadObject); - - lbcb->OnSuccessDelegate.AddRaw(this, &FOnlineLeaderboardsBrainCloud::readLeaderboardSuccess); - lbcb->OnFailDelegate.AddRaw(this, &FOnlineLeaderboardsBrainCloud::readLeaderboardFail); - - Subsystem->GetClient()->getLeaderboardService()->getGlobalLeaderboardView(ReadObject->LeaderboardName.ToString(), ESortOrder::HIGH_TO_LOW, 9, 10, lbcb); - - return true; -} - -bool FOnlineLeaderboardsBrainCloud::ReadLeaderboardsForFriends(int32 LocalUserNum, FOnlineLeaderboardReadRef& ReadObject) -{ - UE_LOG(LogOnline, Warning, TEXT("ReadLeaderboardsForFriends is not supported")); - TriggerOnLeaderboardReadCompleteDelegates(false); - return false; -} - -#if ENGINE_MAJOR_VERSION <= 4 && ENGINE_MINOR_VERSION >= 16 -bool FOnlineLeaderboardsBrainCloud::ReadLeaderboardsAroundRank(int32 Rank, uint32 Range, FOnlineLeaderboardReadRef& ReadObject) -{ - UE_LOG(LogOnline, Warning, TEXT("ReadLeaderboardsAroundRank is not supported")); - TriggerOnLeaderboardReadCompleteDelegates(false); - return false; -} -bool FOnlineLeaderboardsBrainCloud::ReadLeaderboardsAroundUser(TSharedRef Player, uint32 Range, FOnlineLeaderboardReadRef& ReadObject) -{ - UE_LOG(LogOnline, Warning, TEXT("ReadLeaderboardsAroundUser is not supported")); - TriggerOnLeaderboardReadCompleteDelegates(false); - return false; -} -#elif ENGINE_MAJOR_VERSION >= 5 -bool FOnlineLeaderboardsBrainCloud::ReadLeaderboardsAroundRank(int32 Rank, uint32 Range, FOnlineLeaderboardReadRef& ReadObject) -{ - UE_LOG(LogOnline, Warning, TEXT("ReadLeaderboardsAroundRank is not supported")); - TriggerOnLeaderboardReadCompleteDelegates(false); - return false; -} - -bool FOnlineLeaderboardsBrainCloud::ReadLeaderboardsAroundUser(TSharedRef Player, uint32 Range, FOnlineLeaderboardReadRef& ReadObject) -{ - UE_LOG(LogOnline, Warning, TEXT("ReadLeaderboardsAroundUser is not supported")); - TriggerOnLeaderboardReadCompleteDelegates(false); - return false; -} -#endif - -void FOnlineLeaderboardsBrainCloud::FreeStats(FOnlineLeaderboardRead& ReadObject) -{ - UE_LOG(LogOnline, Warning, TEXT("FreeStats is unsupported")); -} - -bool FOnlineLeaderboardsBrainCloud::WriteLeaderboards(const FName& SessionName, const FUniqueNetId& Player, FOnlineLeaderboardWrite& WriteObject) -{ - UE_LOG_ONLINE(Display, TEXT("WriteLeaderboards")); - - bool bWroteAnyLeaderboard = false; - - for (int32 LeaderboardIdx = 0; LeaderboardIdx < WriteObject.LeaderboardNames.Num(); ++LeaderboardIdx) - { - FString LeaderboardName = WriteObject.LeaderboardNames[LeaderboardIdx].ToString(); - - UE_LOG_ONLINE(Display, TEXT("Going through stats for leaderboard : %s "), *LeaderboardName); - - for (FStatPropertyArray::TConstIterator It(WriteObject.Properties); It; ++It) - { - const FVariantData& Stat = It.Value(); - int32 Score; - - UE_LOG_ONLINE(Display, TEXT("Here's a stat")); - - if (Stat.GetType() == EOnlineKeyValuePairDataType::Int32) - { - Stat.GetValue(Score); - - FOnlinePendingLeaderboardWrite* UnreportedScore = new (UnreportedScores)FOnlinePendingLeaderboardWrite(); - UnreportedScore->LeaderboardName = LeaderboardName; - UnreportedScore->Score = Score; - UE_LOG_ONLINE(Display, TEXT("FOnlineLeaderboardsAndroid::WriteLeaderboards() Int32 value Score: %d"), Score); - - bWroteAnyLeaderboard = true; - } - else - { - UE_LOG_ONLINE(Error, TEXT("Unsupported data type for leaderboard write")); - } - } - } - - //Return whether any stat was cached - return bWroteAnyLeaderboard; -} - -bool FOnlineLeaderboardsBrainCloud::FlushLeaderboards(const FName& SessionName) -{ - UE_LOG_ONLINE(Display, TEXT("flush leaderboards session name :%s"), *SessionName.ToString()); - - bool Success = true; - - for (int32 i = 0; i < UnreportedScores.Num(); ++i) - { - UE_LOG_ONLINE(Display, TEXT("Submitting an unreported score to %s. Value: %d"), *UnreportedScores[i].LeaderboardName, UnreportedScores[i].Score); - Subsystem->GetClient()->getLeaderboardService()->postScore(UnreportedScores[i].LeaderboardName, (int32)UnreportedScores[i].Score, TEXT(""), nullptr); - } - - UnreportedScores.Empty(); - TriggerOnLeaderboardFlushCompleteDelegates(SessionName, Success); - - return true; -} - -bool FOnlineLeaderboardsBrainCloud::WriteOnlinePlayerRatings(const FName& SessionName, int32 LeaderboardId, const TArray& PlayerScores) -{ - UE_LOG(LogOnline, Warning, TEXT("WriteOnlinePlayerRatings is unsupported")); - return false; -} - -FString FOnlineLeaderboardsBrainCloud::GetLeaderboardID(const FString& LeaderboardName) -{ - UE_LOG(LogOnline, Warning, TEXT("GetLeaderboardID is unsupported")); - return LeaderboardName; -} - -//BC Callbacks -void FOnlineLeaderboardsBrainCloud::readLeaderboardSuccess(const FString& jsonData, FOnlineLeaderboardReadRef leaderboardRead) -{ - bool bWasSuccessful = false; - - TArray> leaderboard = FOnlineSubsystemBrainCloud::GetJsonData(jsonData)->GetArrayField(TEXT("leaderboard")); - - TSharedPtr currentUserId = Subsystem->GetIdentityInterface()->GetUniquePlayerId(0); - - FOnlineStatsRow* currentUserRow = leaderboardRead.Get().FindPlayerRecord(*currentUserId); - if (currentUserRow == NULL) - { - currentUserRow = new (leaderboardRead->Rows) FOnlineStatsRow(currentUserId->ToString(), currentUserId.ToSharedRef()); - } - - UE_LOG(LogOnline, Display, TEXT("----------------------------------------------------------------")); - for (int32 i = 0; i < leaderboard.Num(); i++) - { - TSharedPtr lbObj = leaderboard[i]->AsObject(); - FString playerID = lbObj->GetStringField(TEXT("playerId")); - int32 score = (int32)lbObj->GetNumberField(TEXT("score")); - FString playerName = lbObj->GetStringField(TEXT("name")); - - UE_LOG(LogOnline, Display, TEXT("PlayerId: %s"), *playerID); - UE_LOG(LogOnline, Display, TEXT("Name: %s"), *playerName); - UE_LOG(LogOnline, Display, TEXT("Value: %d"), score); - UE_LOG(LogOnline, Display, TEXT("----------------------------------------------------------------")); - - // Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - TSharedRef userId = FUniqueNetIdString::Create(playerID, NAME_Unset); -#else - TSharedRef userId = MakeShareable(new FUniqueNetIdString(playerID)); -#endif - FOnlineStatsRow* userRow = leaderboardRead.Get().FindPlayerRecord(userId.Get()); - if (userRow == NULL) - { - userRow = new (leaderboardRead->Rows) FOnlineStatsRow(playerName, userId); - } - - for (int32 StatIdx = 0; StatIdx < leaderboardRead->ColumnMetadata.Num(); StatIdx++) - { - const FColumnMetaData& columnMeta = leaderboardRead->ColumnMetadata[StatIdx]; - - if (columnMeta.DataType == EOnlineKeyValuePairDataType::Int32) - { - int32 Value = score; - userRow->Columns.Add(columnMeta.ColumnName, FVariantData(Value)); - bWasSuccessful = true; - } - else - { - UE_LOG_ONLINE(Warning, TEXT("Unsupported key value pair during retrieval from BrainCloud %s"), *columnMeta.ColumnName.ToString()); - } - } - } - - leaderboardRead->ReadState = EOnlineAsyncTaskState::Done; - TriggerOnLeaderboardReadCompleteDelegates(bWasSuccessful); -} - -void FOnlineLeaderboardsBrainCloud::readLeaderboardFail(int32 returnCode, const FString& jsonData, FOnlineLeaderboardReadRef leaderboardRead) -{ - leaderboardRead->ReadState = EOnlineAsyncTaskState::Failed; - TriggerOnLeaderboardReadCompleteDelegates(false); -} - -void FOnlineLeaderboardsBrainCloud::FlushNext() -{ - //if (UnreportedScores.Num() <= 0) - //{ - // _isFlushing = false; - // return; - //} - - //FOnlinePendingLeaderboardWrite pendingWrite = UnreportedScores.Pop(false); - - //LeaderboardCallback* lbcb = new LeaderboardCallback( - // std::bind(&FOnlineLeaderboardsBrainCloud::flushLeaderboardSuccess, this, _1, _2, _3, _4), - // std::bind(&FOnlineLeaderboardsBrainCloud::flushLeaderboardFail, this, _1, _2, _3, _4, _5), - // nullptr); - - //Subsystem->RegisterCallbackObject(lbcb); - - //Subsystem->GetClient()->getLeaderboardService()->postScore(pendingWrite.LeaderboardName, pendingWrite.Score, TEXT(""), lbcb); -} - -void FOnlineLeaderboardsBrainCloud::flushLeaderboardSuccess(const FString& jsonData, FOnlineLeaderboardReadRef leaderboardRead) -{ - -} - -void FOnlineLeaderboardsBrainCloud::flushLeaderboardFail(int32 returnCode, const FString& jsonData, FOnlineLeaderboardReadRef leaderboardRead) -{ - -} diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineLeaderboardInterfaceBrainCloud.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineLeaderboardInterfaceBrainCloud.h deleted file mode 100644 index 68a10b2..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineLeaderboardInterfaceBrainCloud.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. - -#pragma once - -#include "Interfaces/OnlineLeaderboardInterface.h" -#include "Runtime/Launch/Resources/Version.h" - -struct FOnlinePendingLeaderboardWrite -{ - FString LeaderboardName; - uint64 Score; -}; - -class ServiceName; -class ServiceOperation; - -/** - * Interface definition for the online services leaderboard services - */ -class FOnlineLeaderboardsBrainCloud : public IOnlineLeaderboards -{ -public: - FOnlineLeaderboardsBrainCloud(class FOnlineSubsystemBrainCloud* InSubsystem); - - virtual bool ReadLeaderboards(const TArray< TSharedRef >& Players, FOnlineLeaderboardReadRef& ReadObject) override; - virtual bool ReadLeaderboardsForFriends(int32 LocalUserNum, FOnlineLeaderboardReadRef& ReadObject) override; - -// Unreal Engine Version is >= 4.16 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 16) || ENGINE_MAJOR_VERSION == 5 - virtual bool ReadLeaderboardsAroundRank(int32 Rank, uint32 Range, FOnlineLeaderboardReadRef& ReadObject) override; - virtual bool ReadLeaderboardsAroundUser(TSharedRef Player, uint32 Range, FOnlineLeaderboardReadRef& ReadObject) override; -#endif - - virtual void FreeStats(FOnlineLeaderboardRead& ReadObject) override; - virtual bool WriteLeaderboards(const FName& SessionName, const FUniqueNetId& Player, FOnlineLeaderboardWrite& WriteObject) override; - virtual bool FlushLeaderboards(const FName& SessionName) override; - virtual bool WriteOnlinePlayerRatings(const FName& SessionName, int32 LeaderboardId, const TArray& PlayerScores) override; - - //BC Callbacks - void readLeaderboardSuccess(const FString& jsonData, FOnlineLeaderboardReadRef leaderboardRead); - void readLeaderboardFail(int32 returnCode, const FString& jsonData, FOnlineLeaderboardReadRef leaderboardRead); - - void flushLeaderboardSuccess(const FString& jsonData, FOnlineLeaderboardReadRef leaderboardRead); - void flushLeaderboardFail(int32 returnCode, const FString& jsonData, FOnlineLeaderboardReadRef leaderboardRead); - -private: - /** Pointer to owning subsystem */ - FOnlineSubsystemBrainCloud* Subsystem; - - /** - * Helper function to get the platform- and game-specific leaderboard ID from the JSON config file. - * - * @param LeaderboardName the cross-platform name of the leaderboard to look up - * @return The unique ID for the leaderboard as specified in the config file. - */ - FString GetLeaderboardID(const FString& LeaderboardName); - - /** Scores are cached here in WriteLeaderboards until FlushLeaderboards is called */ - TArray UnreportedScores; - - void FlushNext(); - - bool _isFlushing = false; -}; - -typedef TSharedPtr FOnlineLeaderboardsBrainCloudPtr; diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineMessageInterfaceBrainCloud.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineMessageInterfaceBrainCloud.cpp deleted file mode 100644 index 1c4dfbb..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineMessageInterfaceBrainCloud.cpp +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "OnlineMessageInterfaceBrainCloud.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" - -#include "Misc/Base64.h" -#include "BrainCloudClient.h" -#include "ServiceOperation.h" -#include "ServiceName.h" -#include "MessageCallback.h" - -#include "AssignableServerCallback.h" - -FOnlineMessageBrainCloud::FOnlineMessageBrainCloud(FOnlineSubsystemBrainCloud* inSubsystem) - : _subsystem(inSubsystem) -{ -} - -FOnlineMessageBrainCloud::~FOnlineMessageBrainCloud() -{ -} - -bool FOnlineMessageBrainCloud::EnumerateMessages(int32 LocalUserNum) -{ - AssignableServerCallback* cb = _subsystem->GetCallbackObject(); - cb->OnSuccessDelegate.AddRaw(this, &FOnlineMessageBrainCloud::EnumerateMessagesSuccess); - cb->OnFailDelegate.AddRaw(this, &FOnlineMessageBrainCloud::EnumerateMessagesFail); - - _subsystem->GetClient()->getEventService()->getEvents(cb); - - return true; -} - -bool FOnlineMessageBrainCloud::GetMessageHeaders(int32 LocalUserNum, TArray>& OutHeaders) -{ - for (int32 i = 0; i < _cachedMessageHeaders.Num(); i++) - { - OutHeaders.Add(_cachedMessageHeaders[i].ToSharedRef()); - } - return true; -} - -bool FOnlineMessageBrainCloud::ClearMessageHeaders(int32 LocalUserNum) -{ - _cachedMessageHeaders.Empty(); - return true; -} - -bool FOnlineMessageBrainCloud::ReadMessage(int32 LocalUserNum, const FUniqueMessageId & MessageId) -{ - for (int32 i = 0; i < _cachedMessages.Num(); i++) - { - if (_cachedMessages[i]->MessageId.Get() == MessageId) - { - OnReadMessageCompleteDelegates->Broadcast(0, true, MessageId, TEXT("")); - return true; - } - } - - OnReadMessageCompleteDelegates->Broadcast(0, false, MessageId, TEXT("Message not found with ID")); - return false; -} - -TSharedPtr FOnlineMessageBrainCloud::GetMessage(int32 LocalUserNum, const FUniqueMessageId & MessageId) -{ - for (int32 i = 0; i < _cachedMessages.Num(); i++) - { - if (_cachedMessages[i]->MessageId.Get() == MessageId) - { - return _cachedMessages[i]; - } - } - return nullptr; -} - -bool FOnlineMessageBrainCloud::ClearMessage(int32 LocalUserNum, const FUniqueMessageId & MessageId) -{ - for (int32 i = 0; i < _cachedMessages.Num(); i++) - { - if (_cachedMessages[i]->MessageId.Get() == MessageId) - { - _cachedMessages.RemoveAt(i); - return true; - } - } - return false; -} - -bool FOnlineMessageBrainCloud::ClearMessages(int32 LocalUserNum) -{ - _cachedMessages.Empty(); - return true; -} - -bool FOnlineMessageBrainCloud::SendMessage(int32 LocalUserNum, const TArray>& RecipientIds, const FString & MessageType, const FOnlineMessagePayload & Payload) -{ - TArray payloadBytes; - Payload.ToBytes(payloadBytes); - FString payloadStr = FBase64::Encode(payloadBytes); - - TSharedRef jsonObj = MakeShareable(new FJsonObject()); - jsonObj->SetStringField(TEXT("payload"), payloadStr); - - FString jsonDataStr; - TSharedRef> writer = TJsonWriterFactory<>::Create(&jsonDataStr); - FJsonSerializer::Serialize(jsonObj, writer); - - AssignableServerCallback* cb = _subsystem->GetCallbackObject(); - cb->OnSuccessDelegate.AddRaw(this, &FOnlineMessageBrainCloud::SendMessagesSuccess); - cb->OnFailDelegate.AddRaw(this, &FOnlineMessageBrainCloud::SendMessagesFail); - - for (int32 i = 0; i < RecipientIds.Num(); i++) - { - - _subsystem->GetClient()->getEventService()->sendEvent( - RecipientIds[i]->ToString(), - MessageType, - jsonDataStr, - i < RecipientIds.Num() - 1 ? nullptr : cb); - } - - return true; -} - -bool FOnlineMessageBrainCloud::DeleteMessage(int32 LocalUserNum, const FUniqueMessageId & MessageId) -{ - TSharedPtr message; - - for (int32 i = 0; i < _cachedMessageHeaders.Num(); i++) - { - if (_cachedMessageHeaders[i]->MessageId.Get() == MessageId) - { - message = _cachedMessageHeaders[i]; - break; - } - } - - if (!message.IsValid()) - { - UE_LOG(LogOnline, Warning, TEXT("Cannot find cached message header for ID %s to delete"), *MessageId.ToString()); - return false; - } - - MessageCallback* cb = new MessageCallback(MessageId); - _subsystem->RegisterCallbackObject(cb); - cb->OnSuccessDelegate.AddRaw(this, &FOnlineMessageBrainCloud::DeleteMessagesSuccess); - cb->OnFailDelegate.AddRaw(this, &FOnlineMessageBrainCloud::DeleteMessagesFail); - - _subsystem->GetClient()->getEventService()->deleteIncomingEvent( - message->FromUserId->ToString(), - cb); - - return true; -} - -//BC Callbacks -void FOnlineMessageBrainCloud::EnumerateMessagesSuccess(const FString& jsonData) -{ - _cachedMessageHeaders.Empty(); - _cachedMessages.Empty(); - - TArray> messages = FOnlineSubsystemBrainCloud::GetJsonData(jsonData)->GetArrayField(TEXT("incoming_events")); - - for (int32 i = 0; i < messages.Num(); ++i) - { - FJsonObject* messageObj = messages[i]->AsObject().Get(); - - if (!messageObj->GetObjectField(TEXT("eventData"))->HasField(TEXT("payload"))) - { - UE_LOG(LogOnline, Display, TEXT("Message with no payload received, ignoring.")); - continue; - } - - //header creation - FString fromId = messageObj->GetStringField(TEXT("fromPlayerId")); - FString messageId = FString::FromInt((int64)messageObj->GetNumberField(TEXT("eventId"))); - -// Unreal Engine Version is >= 4.18 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 18) || ENGINE_MAJOR_VERSION == 5 - -// Unreal Engine Version is >= Unreal Engine 5.0 -#if ENGINE_MAJOR_VERSION >= 5 - FUniqueNetIdStringRef sref_fromId = FUniqueNetIdString::Create(fromId, NAME_Unset); - FUniqueNetIdStringRef sref_messageId = FUniqueNetIdString::Create(messageId, NAME_Unset); -#else - const TSharedRef sref_fromId = MakeShareable(new FUniqueNetIdString(fromId)); - const TSharedRef sref_messageId = MakeShareable(new FUniqueNetIdString(messageId)); - -#endif - FOnlineMessageHeader *fOnlineMessageHeader = new FOnlineMessageHeader(sref_fromId, sref_messageId); - TSharedPtr header = MakeShareable(fOnlineMessageHeader); -#else - TSharedPtr header = MakeShareable( - new FOnlineMessageHeader(new FUniqueNetIdString(fromId), new FUniqueNetIdString(messageId))); -#endif - - - header->TimeStamp = FDateTime::FromUnixTimestamp((int64)messageObj->GetNumberField(TEXT("createdAt")) / 1000).ToString(); - header->Type = messageObj->GetStringField(TEXT("eventType")); - - _cachedMessageHeaders.Add(header); - -// Unreal Engine Version is >= 4.27 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 27) || ENGINE_MAJOR_VERSION == 5 - //message - TSharedPtr message = MakeShareable(new FOnlineMessage(_cachedMessageHeaders[0]->MessageId)); -#else - TSharedPtr message = MakeShareable(new FOnlineMessage(new FUniqueNetIdString(messageId))); -#endif - - FString payloadStr = messageObj->GetObjectField(TEXT("eventData"))->GetStringField(TEXT("payload")); - TArray bytes; - FBase64::Decode(payloadStr, bytes); - message->Payload.FromBytes(bytes); - - _cachedMessages.Add(message); - } - - OnEnumerateMessagesCompleteDelegates->Broadcast(0, true, TEXT("")); -} - -void FOnlineMessageBrainCloud::EnumerateMessagesFail(int32 returnCode, const FString& jsonData) -{ - OnEnumerateMessagesCompleteDelegates->Broadcast(0, false, jsonData); -} - -void FOnlineMessageBrainCloud::SendMessagesSuccess(const FString& jsonData) -{ - OnSendMessageCompleteDelegates->Broadcast(0, true, TEXT("")); -} - -void FOnlineMessageBrainCloud::SendMessagesFail(int32 returnCode, const FString& jsonData) -{ - OnSendMessageCompleteDelegates->Broadcast(0, false, jsonData); -} - -void FOnlineMessageBrainCloud::DeleteMessagesSuccess(const FString& jsonData, const FUniqueMessageId& MessageId) -{ - OnDeleteMessageCompleteDelegates->Broadcast(0, true, MessageId, TEXT("")); -} - -void FOnlineMessageBrainCloud::DeleteMessagesFail(int32 returnCode, const FString& jsonData, const FUniqueMessageId& MessageId) -{ - OnDeleteMessageCompleteDelegates->Broadcast(0, false, MessageId, jsonData); -} diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineMessageInterfaceBrainCloud.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineMessageInterfaceBrainCloud.h deleted file mode 100644 index 1115c10..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineMessageInterfaceBrainCloud.h +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "Interfaces/OnlineMessageInterface.h" -#include "OnlineSubsystemBrainCloud.h" -#include "Runtime/Launch/Resources/Version.h" - -/** -* BrainCloud service implementation of the online message interface -*/ -class FOnlineMessageBrainCloud : public IOnlineMessage -{ -public: - - /** - * Constructor - * @param inSubsystem online subsystem being used - */ - FOnlineMessageBrainCloud(FOnlineSubsystemBrainCloud* inSubsystem); - - /** - * Destructor - */ - virtual ~FOnlineMessageBrainCloud(); - - /** - * Enumerate list of available message headers from user's inbox - * - * @param LocalUserNum the controller number of the associated user that made the request - * - * @return true if request was started - */ - virtual bool EnumerateMessages(int32 LocalUserNum) override; - - /** - * Get the cached list of message headers for a user. Cache is populated by calling EnumerateMessages - * - * @param LocalUserNum the controller number of the associated user that made the request - * @param OutHeaders [out] array of message headers that were found - * - * @return true if cached entry was found - */ - virtual bool GetMessageHeaders(int32 LocalUserNum, TArray< TSharedRef >& OutHeaders) override; - - /** - * Clear the cached list of message headers - * - * @param LocalUserNum the controller number of the associated user that made the request - * - * @return true if messages were clear, false if there was a problem - */ - virtual bool ClearMessageHeaders(int32 LocalUserNum) override; - - /** - * Download a message and its payload from user's inbox - * - * @param LocalUserNum the controller number of the associated user that made the request - * @param MessageId unique id of the message to download. Obtained from message header list - * - * @return true if request was started - */ - virtual bool ReadMessage(int32 LocalUserNum, const FUniqueMessageId& MessageId) override; - - /** - * Get the cached message and its contents for a user. Cache is populated by calling ReadMessage with a message id - * - * @param LocalUserNum the controller number of the associated user that made the request - * @param MessageId unique id of the message downloaded to find - * - * @return pointer to message entry if found or NULL - */ - virtual TSharedPtr GetMessage(int32 LocalUserNum, const FUniqueMessageId& MessageId) override; - - /** - * Clear the given cached message - * - * @param LocalUserNum the controller number of the associated user that made the request - * - * @return true if messages were clear, false if there was a problem - */ - virtual bool ClearMessage(int32 LocalUserNum, const FUniqueMessageId& MessageId) override; - - /** - * Clear all the cached messages - * - * @param LocalUserNum the controller number of the associated user that made the request - * - * @return true if messages were clear, false if there was a problem - */ - virtual bool ClearMessages(int32 LocalUserNum) override; - - /** - * Send a message from the currently logged in user to a list of recipients - * - * @param LocalUserNum the controller number of the associated user that made the request - * @param RecipientIds unique ids of users to send this message to - * @param MessageType string representing the type of message - * @param Payload the body/content of the message - * - * @return true if request was started - */ - virtual bool SendMessage(int32 LocalUserNum, const TArray< TSharedRef >& RecipientIds, const FString& MessageType, const FOnlineMessagePayload& Payload) override; - - /** - * Delete a message from currently logged in user's inbox - * - * @param LocalUserNum the controller number of the associated user that made the request - * @param MessageId unique id of the message to delete. Obtained from message header list - * - * @return true if request was started - */ - virtual bool DeleteMessage(int32 LocalUserNum, const FUniqueMessageId& MessageId) override; - -private: - FOnlineSubsystemBrainCloud* _subsystem; - - TArray> _cachedMessageHeaders; - TArray> _cachedMessages; - - //BC Callbacks - void EnumerateMessagesSuccess(const FString& jsonData); - void EnumerateMessagesFail(int32 returnCode, const FString& jsonData); - - void SendMessagesSuccess(const FString& jsonData); - void SendMessagesFail(int32 returnCode, const FString& jsonData); - - void DeleteMessagesSuccess(const FString& jsonData, const FUniqueMessageId& MessageId); - void DeleteMessagesFail(int32 returnCode, const FString& jsonData, const FUniqueMessageId& MessageId); -}; - -typedef TSharedPtr FOnlineMessageBrainCloudPtr; \ No newline at end of file diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloud.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloud.cpp deleted file mode 100644 index 34c6ce9..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloud.cpp +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "OnlineSubsystemBrainCloud.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" - -#include "BrainCloudWrapper.h" -#include "BrainCloudClient.h" - -#include "OnlineAchievementsInterfaceBrainCloud.h" -#include "OnlineIdentityInterfaceBrainCloud.h" -#include "OnlineLeaderboardInterfaceBrainCloud.h" -#include "OnlineTimeInterfaceBrainCloud.h" -#include "OnlineMessageInterfaceBrainCloud.h" -#include "OnlineTitleFileInterfaceBrainCloud.h" - -#include "AssignableServerCallback.h" - -//FOnlineSubsystemBrainCloud::FOnlineSubsystemBrainCloud() -//{ -// _clientPtr = new BrainCloudClient(); -//} - -FOnlineSubsystemBrainCloud::~FOnlineSubsystemBrainCloud() -{ - //delete _clientPtr; -} - -IOnlineSessionPtr FOnlineSubsystemBrainCloud::GetSessionInterface() const -{ - return nullptr; -} - -IOnlineFriendsPtr FOnlineSubsystemBrainCloud::GetFriendsInterface() const -{ - return nullptr; -} - -IOnlinePartyPtr FOnlineSubsystemBrainCloud::GetPartyInterface() const -{ - return nullptr; -} - -IOnlineGroupsPtr FOnlineSubsystemBrainCloud::GetGroupsInterface() const -{ - return nullptr; -} - -IOnlineSharedCloudPtr FOnlineSubsystemBrainCloud::GetSharedCloudInterface() const -{ - return nullptr; -} - -IOnlineUserCloudPtr FOnlineSubsystemBrainCloud::GetUserCloudInterface() const -{ - return nullptr; -} - -IOnlineEntitlementsPtr FOnlineSubsystemBrainCloud::GetEntitlementsInterface() const -{ - return nullptr; -}; - -IOnlineLeaderboardsPtr FOnlineSubsystemBrainCloud::GetLeaderboardsInterface() const -{ - return LeaderboardsInterface; -} - -IOnlineVoicePtr FOnlineSubsystemBrainCloud::GetVoiceInterface() const -{ - return nullptr; -} - -IOnlineExternalUIPtr FOnlineSubsystemBrainCloud::GetExternalUIInterface() const -{ - return nullptr; -} - -IOnlineTimePtr FOnlineSubsystemBrainCloud::GetTimeInterface() const -{ - return TimeInterface; -} - -IOnlineIdentityPtr FOnlineSubsystemBrainCloud::GetIdentityInterface() const -{ - return IdentityInterface; -} - -IOnlineTitleFilePtr FOnlineSubsystemBrainCloud::GetTitleFileInterface() const -{ - return TitleFileInterface; -} - - -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 11) || ENGINE_MAJOR_VERSION == 5 -IOnlineStoreV2Ptr FOnlineSubsystemBrainCloud::GetStoreV2Interface() const -{ - return nullptr; -} - -IOnlinePurchasePtr FOnlineSubsystemBrainCloud::GetPurchaseInterface() const -{ - return nullptr; -} -#if (ENGINE_MAJOR_VERSION <= 4) || (ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION <= 0) -// can no longer define this to work for UE 5.1 -IOnlineStorePtr FOnlineSubsystemBrainCloud::GetStoreInterface() const -{ - return nullptr; -} -#endif -#endif - -IOnlineEventsPtr FOnlineSubsystemBrainCloud::GetEventsInterface() const -{ - return nullptr; -} - -IOnlineAchievementsPtr FOnlineSubsystemBrainCloud::GetAchievementsInterface() const -{ - return AchievementsInterface; -} - -IOnlineSharingPtr FOnlineSubsystemBrainCloud::GetSharingInterface() const -{ - return nullptr; -} - -IOnlineUserPtr FOnlineSubsystemBrainCloud::GetUserInterface() const -{ - return nullptr; -} - -IOnlineMessagePtr FOnlineSubsystemBrainCloud::GetMessageInterface() const -{ - return MessageInterface; -} - -IOnlinePresencePtr FOnlineSubsystemBrainCloud::GetPresenceInterface() const -{ - return nullptr; -} - -IOnlineChatPtr FOnlineSubsystemBrainCloud::GetChatInterface() const -{ - return nullptr; -} - -IOnlineTurnBasedPtr FOnlineSubsystemBrainCloud::GetTurnBasedInterface() const -{ - return nullptr; -} - -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 22) || ENGINE_MAJOR_VERSION == 5 -IOnlineStatsPtr FOnlineSubsystemBrainCloud::GetStatsInterface(void) const -{ - // should we return the stats service ? - return nullptr; -} -#endif - -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 21) || ENGINE_MAJOR_VERSION == 5 -IOnlineTournamentPtr FOnlineSubsystemBrainCloud::GetTournamentInterface() const -{ - return nullptr; -} -#endif - -bool FOnlineSubsystemBrainCloud::Tick(float DeltaTime) -{ - if (!FOnlineSubsystemImpl::Tick(DeltaTime)) - { - return false; - } - - _clientPtr->runCallbacks(); - - CleanupCallbackObjects(); - - return true; -} - -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 16) || ENGINE_MAJOR_VERSION == 5 -FOnlineSubsystemBrainCloud::FOnlineSubsystemBrainCloud(FName InSubsystemName, FName InInstanceName) : FOnlineSubsystemImpl(InSubsystemName, InInstanceName) -{ - _clientPtr = new BrainCloudClient(); -} -#else -FOnlineSubsystemBrainCloud::FOnlineSubsystemBrainCloud(FName InSubsystemName, FName InInstanceName) : FOnlineSubsystemImpl(InInstanceName) -{ - _clientPtr = new BrainCloudClient(); -} -#endif - -bool FOnlineSubsystemBrainCloud::Init() -{ - UE_LOG_ONLINE(Display, TEXT("FOnlineSubsystemBrainCloud::Init()")); - const bool bBrainCloudInit = true; - - _configPath = FPaths::ProjectConfigDir() + TEXT("BrainCloudConfig.ini"); - - if (GConfig) - { -#if (ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 4) - const FConfigSection* Configs = GConfig->GetSection(TEXT("BrainCloud.Client"), false, _configPath); -#else - FConfigSection* Configs = GConfig->GetSectionPrivate(TEXT("BrainCloud.Client"), false, true, _configPath); -#endif - -#if ENGINE_MAJOR_VERSION == 5 - _configPath = FConfigCacheIni::NormalizeConfigIniPath(_configPath); -#endif - if (Configs) - { -// Unreal Engine Version is >= 4.12 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 12) || ENGINE_MAJOR_VERSION == 5 - FString test = Configs->Find(TEXT("ServerURL"))->GetValue(); - UE_LOG_ONLINE(Display, TEXT("Online Subsystem Initializing for Server: %s"), *test); - _clientPtr->initialize( - Configs->Find(TEXT("ServerURL"))->GetValue(), - Configs->Find(TEXT("Secret"))->GetValue(), - Configs->Find(TEXT("AppID"))->GetValue(), - Configs->Find(TEXT("Version"))->GetValue()); -#else - FString test = *Configs->Find(TEXT("ServerURL")); - UE_LOG_ONLINE(Display, TEXT("Online Subsystem Initializing for Server: %s"), *test); - _clientPtr->initialize( - *Configs->Find(TEXT("ServerURL")), - *Configs->Find(TEXT("Secret")), - *Configs->Find(TEXT("AppID")), - *Configs->Find(TEXT("Version"))); -#endif - } - else - { - UE_LOG_ONLINE(Warning, TEXT("Could not find BrainCloud.Client in BrainCloudConfig.ini")); - } - } - else - { - UE_LOG_ONLINE(Warning, TEXT("Could not find BrainCloudConfig.ini, must Initialize manually!")); - } - - if (bBrainCloudInit) - { - AchievementsInterface = MakeShareable(new FOnlineAchievementsBrainCloud(this)); - IdentityInterface = MakeShareable(new FOnlineIdentityBrainCloud(this)); - LeaderboardsInterface = MakeShareable(new FOnlineLeaderboardsBrainCloud(this)); - TimeInterface = MakeShareable(new FOnlineTimeBrainCloud(this)); - MessageInterface = MakeShareable(new FOnlineMessageBrainCloud(this)); - TitleFileInterface = MakeShareable(new FOnlineTitleFileBrainCloud(this)); - } - else - { - Shutdown(); - } - - return bBrainCloudInit; -} - -bool FOnlineSubsystemBrainCloud::Shutdown() -{ - UE_LOG_ONLINE(Display, TEXT("FOnlineSubsystemBrainCloud::Shutdown()")); - - FOnlineSubsystemImpl::Shutdown(); - -#define DESTRUCT_INTERFACE(Interface) \ - if (Interface.IsValid()) \ - { \ - ensure(Interface.IsUnique()); \ - Interface = nullptr; \ - } - - // Destruct the interfaces - DESTRUCT_INTERFACE(IdentityInterface); - DESTRUCT_INTERFACE(AchievementsInterface); - DESTRUCT_INTERFACE(LeaderboardsInterface); - DESTRUCT_INTERFACE(MessageInterface); - DESTRUCT_INTERFACE(TimeInterface); - DESTRUCT_INTERFACE(TitleFileInterface); - -#undef DESTRUCT_INTERFACE - - return true; -} - -FString FOnlineSubsystemBrainCloud::GetAppId() const -{ - return TEXT(""); -} - -bool FOnlineSubsystemBrainCloud::Exec(UWorld *InWorld, const TCHAR *Cmd, FOutputDevice &Ar) -{ - return false; -} - -// Unreal Engine Version is >= 4.17 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 17) || ENGINE_MAJOR_VERSION == 5 -FText FOnlineSubsystemBrainCloud::GetOnlineServiceName() const -{ - return NSLOCTEXT("brainCloud", "brainCloud", "brainCloud"); -} -#endif - -bool FOnlineSubsystemBrainCloud::IsEnabled() const -{ - return true; -} - -BrainCloudClient *FOnlineSubsystemBrainCloud::GetClient() -{ - return _clientPtr; -} - -TSharedPtr FOnlineSubsystemBrainCloud::GetJsonData(const FString &jsonString) -{ - TSharedRef> reader = TJsonReaderFactory<>::Create(jsonString); - TSharedPtr jsonValue = MakeShareable(new FJsonObject()); - FJsonSerializer::Deserialize(reader, jsonValue); - TSharedPtr data = jsonValue->GetObjectField(TEXT("data")); - return data; -} - -void FOnlineSubsystemBrainCloud::RegisterCallbackObject(AssignableServerCallback *callback) -{ - _activeCallbacks.Add(callback); -} - -void FOnlineSubsystemBrainCloud::CleanupCallbackObjects() -{ - if (_activeCallbacks.Num() <= 0) - return; - - for (int32 i = _activeCallbacks.Num() - 1; i >= 0; i--) - { - if (_activeCallbacks[i] == nullptr) - { - _activeCallbacks.RemoveAt(i); - continue; - } - - if (_activeCallbacks[i]->IsComplete()) - { - //delete(_activeCallbacks[i]); - _activeCallbacks[i] = nullptr; - _activeCallbacks.RemoveAt(i); - } - } -} diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudModule.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudModule.cpp deleted file mode 100644 index cf28c1d..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudModule.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "OnlineSubsystemBrainCloudModule.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" -#include "OnlineSubsystemBrainCloud.h" -#include "Modules/ModuleManager.h" - -IMPLEMENT_MODULE(FOnlineSubsystemBrainCloudModule, OnlineSubsystemBrainCloud); - -/** -* Class responsible for creating instance(s) of the subsystem -*/ -class FOnlineFactoryBrainCloud : public IOnlineFactory -{ -public: - - FOnlineFactoryBrainCloud() {} - virtual ~FOnlineFactoryBrainCloud() {} - - virtual IOnlineSubsystemPtr CreateSubsystem(FName InstanceName) - { - FOnlineSubsystemBrainCloudPtr OnlineSub = MakeShareable(new FOnlineSubsystemBrainCloud("BCSubsystem", InstanceName)); - if (OnlineSub->IsEnabled()) - { - if (!OnlineSub->Init()) - { - UE_LOG_ONLINE(Warning, TEXT("BrainCloud API failed to initialize!")); - OnlineSub->Shutdown(); - OnlineSub = NULL; - } - } - else - { - UE_LOG_ONLINE(Warning, TEXT("BrainCloud API disabled!")); - OnlineSub->Shutdown(); - OnlineSub = NULL; - } - - return OnlineSub; - } -}; - -void FOnlineSubsystemBrainCloudModule::StartupModule() -{ - UE_LOG(LogOnline, Log, TEXT("BrainCloud Startup!")); - BrainCloudFactory = new FOnlineFactoryBrainCloud(); - - // Create and register our singleton factory with the main online subsystem for easy access - FOnlineSubsystemModule& OSS = FModuleManager::GetModuleChecked("OnlineSubsystem"); - OSS.RegisterPlatformService(BRAINCLOUD_SUBSYSTEM, BrainCloudFactory); -} - -void FOnlineSubsystemBrainCloudModule::ShutdownModule() -{ - FOnlineSubsystemModule& OSS = FModuleManager::GetModuleChecked("OnlineSubsystem"); - OSS.UnregisterPlatformService(BRAINCLOUD_SUBSYSTEM); - - delete BrainCloudFactory; - BrainCloudFactory = NULL; -} diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudPrivatePCH.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudPrivatePCH.h deleted file mode 100644 index 8fec3a6..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudPrivatePCH.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "OnlineSubsystemBrainCloudModule.h" -#include "OnlineSubsystemModule.h" -#include "OnlineSubsystem.h" -#include "Modules/ModuleManager.h" - -#define INVALID_INDEX -1 - -/** FName declaration of BrainCloud subsystem */ -#define BRAINCLOUD_SUBSYSTEM FName(TEXT("brainCloud")) -/** URL Prefix when using BrainCloud socket connection */ -#define BRAINCLOUD_URL_PREFIX TEXT("brainCloud.") - -/** pre-pended to all BrainCloud logging */ -#undef ONLINE_LOG_PREFIX -#define ONLINE_LOG_PREFIX TEXT("brainCloud: ") - - diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudTypes.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudTypes.h deleted file mode 100644 index 8303275..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineSubsystemBrainCloudTypes.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "OnlineSubsystemTypes.h" -#include "IPAddress.h" - -class FOnlineSubsystemBrainCloud; - -/** - * Implementation of session information - */ -class FOnlineSessionInfoBrainCloud : public FOnlineSessionInfo -{ -protected: - - /** Hidden on purpose */ - FOnlineSessionInfoBrainCloud(const FOnlineSessionInfoBrainCloud& Src) - { - } - - /** Hidden on purpose */ - FOnlineSessionInfoBrainCloud& operator=(const FOnlineSessionInfoBrainCloud& Src) - { - return *this; - } - -PACKAGE_SCOPE: - - /** Constructor */ - FOnlineSessionInfoBrainCloud(); - - /** - * Initialize a BrainCloud session info with the address of this machine - * and an id for the session - */ - void Init(const FOnlineSubsystemBrainCloud& Subsystem); - - /** The ip & port that the host is listening on (valid for LAN/GameServer) */ - TSharedPtr HostAddr; - /** Unique Id for this session */ - FUniqueNetIdString SessionId; - -public: - - virtual ~FOnlineSessionInfoBrainCloud() {} - - bool operator==(const FOnlineSessionInfoBrainCloud& Other) const - { - return false; - } - - virtual const uint8* GetBytes() const override - { - return NULL; - } - - virtual int32 GetSize() const override - { - return sizeof(uint64) + sizeof(TSharedPtr); - } - - virtual bool IsValid() const override - { - // LAN case - return HostAddr.IsValid() && HostAddr->IsValid(); - } - - virtual FString ToString() const override - { - return SessionId.ToString(); - } - - virtual FString ToDebugString() const override - { - return FString::Printf(TEXT("HostIP: %s SessionId: %s"), - HostAddr.IsValid() ? *HostAddr->ToString(true) : TEXT("INVALID"), - *SessionId.ToDebugString()); - } - - virtual const FUniqueNetId& GetSessionId() const override - { - return SessionId; - } -}; diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineTimeInterfaceBrainCloud.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineTimeInterfaceBrainCloud.cpp deleted file mode 100644 index 8df21fb..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineTimeInterfaceBrainCloud.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#include "OnlineTimeInterfaceBrainCloud.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" - -#include "OnlineSubsystemBrainCloud.h" -#include "BrainCloudClient.h" -#include "AssignableServerCallback.h" - -FOnlineTimeBrainCloud::FOnlineTimeBrainCloud(FOnlineSubsystemBrainCloud* brainCloudSubsystem) : - _subysystem(brainCloudSubsystem) -{ - check(_subysystem); -} - -bool FOnlineTimeBrainCloud::QueryServerUtcTime() -{ - AssignableServerCallback* cb = _subysystem->GetCallbackObject(); - cb->OnSuccessDelegate.AddRaw(this, &FOnlineTimeBrainCloud::OnQueryTimeComplete); - cb->OnFailDelegate.AddRaw(this, &FOnlineTimeBrainCloud::OnQueryTimeFail); - _subysystem->GetClient()->getTimeService()->readServerTime(cb); - return true; -} - -FString FOnlineTimeBrainCloud::GetLastServerUtcTime() -{ - return _lastServerUtcTime; -} - -//BC Callbacks -void FOnlineTimeBrainCloud::OnQueryTimeComplete(const FString& jsonData) -{ - uint64 time = FOnlineSubsystemBrainCloud::GetJsonData(jsonData)->GetNumberField(TEXT("server_time")) / 1000; - - _lastServerUtcTime = FDateTime::FromUnixTimestamp(time).ToString(); - - OnQueryServerUtcTimeCompleteDelegates.Broadcast(true, _lastServerUtcTime, TEXT("")); -} - -void FOnlineTimeBrainCloud::OnQueryTimeFail(int32 returnCode, const FString& jsonData) -{ - OnQueryServerUtcTimeCompleteDelegates.Broadcast(false, TEXT(""), jsonData); -} diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineTimeInterfaceBrainCloud.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineTimeInterfaceBrainCloud.h deleted file mode 100644 index bb1e691..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineTimeInterfaceBrainCloud.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "Interfaces/OnlineTimeInterface.h" -#include "OnlineSubsystemBrainCloudPackage.h" - -/** - * Info associated with an online friend on the Steam service - */ -class FOnlineTimeBrainCloud : public IOnlineTime -{ - /** Reference to the owning subsystem */ - class FOnlineSubsystemBrainCloud* _subysystem; - - FString _lastServerUtcTime = TEXT(""); - - void OnQueryTimeComplete(const FString& jsonData); - void OnQueryTimeFail(int32 returnCode, const FString& jsonData); - -public: - - /** - * Init/default constructor - */ - FOnlineTimeBrainCloud(class FOnlineSubsystemBrainCloud* brainCloudSubsystem); - - /** Virtual destructor to keep clang happy */ - virtual ~FOnlineTimeBrainCloud() {}; - - /** - * Send request for current UTC time from the server - * - * @return true if the query was started - */ - virtual bool QueryServerUtcTime() override; - - /** - * Retrieve cached timestamp from last server time query - * - * @return string representation of time (yyyy.MM.dd-HH.mm.ss) - */ - virtual FString GetLastServerUtcTime() override; -}; - -typedef TSharedPtr FOnlineTimeBrainCloudPtr; \ No newline at end of file diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineTitleFileInterfaceBrainCloud.cpp b/Source/OnlineSubsystemBrainCloud/Private/OnlineTitleFileInterfaceBrainCloud.cpp deleted file mode 100644 index aa37b4b..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineTitleFileInterfaceBrainCloud.cpp +++ /dev/null @@ -1,312 +0,0 @@ -#include "OnlineTitleFileInterfaceBrainCloud.h" -#include "OnlineSubsystemBrainCloudPrivatePCH.h" - -#include "BrainCloudClient.h" -#include "ServiceOperation.h" -#include "ServiceName.h" -#include "HttpModule.h" - -#include "OnlineSubsystemBrainCloud.h" -#include "Misc/FileHelper.h" -#include "Misc/Paths.h" -#if ENGINE_MAJOR_VERSION == 5 -#include "HAL/PlatformFileManager.h" -#else -#include "HAL/PlatformFilemanager.h" -#endif -#include "GenericPlatform/GenericPlatformFile.h" - -#include "AssignableServerCallback.h" - -FOnlineTitleFileBrainCloud::FOnlineTitleFileBrainCloud(FOnlineSubsystemBrainCloud * InSubsystem) - : _subsystem(InSubsystem) -{ - _tempFolderPath = FPaths::Combine(FPlatformProcess::UserTempDir(), TEXT("brainCloud_Unreal")); -} - -bool FOnlineTitleFileBrainCloud::GetFileContents(const FString & FileName, TArray& FileContents) -{ - if (!_cachedFiles.Contains(FileName)) - { - UE_LOG(LogOnline, Display, TEXT("File %s has not been downloaded, call ReadFile first."), *FileName); - return false; - } - - if (FPaths::FileExists(*_cachedFiles.Find(FileName))) - { - FileContents.Empty(); - - if (!FFileHelper::LoadFileToArray(FileContents, **_cachedFiles.Find(FileName))) - { - UE_LOG(LogOnline, Display, TEXT("Error reading file %s from disk."), *FileName); - return false; - } - } - else - { - UE_LOG(LogOnline, Display, TEXT("Error reading file %s, cached file is missing on disk."), *FileName); - return false; - } - - return true; -} - -bool FOnlineTitleFileBrainCloud::ClearFiles() -{ - DeleteCachedFiles(false); - return true; -} - -bool FOnlineTitleFileBrainCloud::ClearFile(const FString & FileName) -{ - if (_activeRequests.Contains(FileName)) - { - UE_LOG(LogOnline, Display, TEXT("Unable to clear file %s, read in progress."), *FileName); - return false; - } - - for (int32 i = 0; i < _cachedFiles.Num(); i++) - { - if (_cachedFiles.Contains(FileName)) - { - FPlatformFileManager::Get().GetPlatformFile().DeleteFile(**_cachedFiles.Find(FileName)); - break; - } - } - return true; -} - -void FOnlineTitleFileBrainCloud::DeleteCachedFiles(bool bSkipEnumerated) -{ - TArray files = GetAllFilesInDirectory(_tempFolderPath, true); - IPlatformFile &platformFile = FPlatformFileManager::Get().GetPlatformFile(); - - if (!bSkipEnumerated) - { - for (int32 i = 0; i < files.Num(); i++) - { - platformFile.DeleteFile(*files[i]); - } - _cachedFiles.Empty(); - } - else - { - for (int32 i = 0; i < files.Num(); i++) - { - FString fileName = FPaths::GetCleanFilename(files[i]); - bool isEnumerated = false; - - for (int32 j = 0; j < _cachedFileHeaders.Num(); j++) - { - if (FPaths::GetCleanFilename(files[i]) == _cachedFileHeaders[j]->FileName) - { - isEnumerated = true; - break; - } - } - - if (!isEnumerated) - { - platformFile.DeleteFile(*files[i]); - _cachedFiles.Remove(FPaths::GetCleanFilename(files[i])); - } - } - } -} - -bool FOnlineTitleFileBrainCloud::EnumerateFiles(const FPagedQuery & Page) -{ - AssignableServerCallback* cb = _subsystem->GetCallbackObject(); - cb->OnSuccessDelegate.AddRaw(this, &FOnlineTitleFileBrainCloud::EnumerateFilesSuccess); - cb->OnFailDelegate.AddRaw(this, &FOnlineTitleFileBrainCloud::EnumerateFilesFail); - - _subsystem->GetClient()->getS3HandlingService()->getFileList(TEXT(""), cb); - return true; -} - -void FOnlineTitleFileBrainCloud::GetFileList(TArray& Files) -{ - for (int32 i = 0; i < _cachedFileHeaders.Num(); ++i) - { - Files.Add(*_cachedFileHeaders[i].Get()); - } -} - -bool FOnlineTitleFileBrainCloud::ReadFile(const FString & FileName) -{ - //ensure file isnt already being read - if (_activeRequests.Contains(FileName)) - { - UE_LOG(LogOnline, Display, TEXT("File %s read already in progress"), *FileName); - return false; - } - - //get file info from cache - TSharedPtr header; - - for (int32 i = 0; i < _cachedFileHeaders.Num(); ++i) - { - if (_cachedFileHeaders[i]->FileName == FileName) - { - header = _cachedFileHeaders[i]; - break; - } - } - - if (!header.IsValid()) - { - UE_LOG(LogOnline, Display, TEXT("Unable to find file %s in header cache, read aborted."), *FileName); - return false; - } - - //Setup HTTP request - FHttpRequestPtr httpRequest = FHttpModule::Get().CreateRequest(); - httpRequest->SetURL(header->URL); - httpRequest->SetVerb(TEXT("GET")); - httpRequest->OnProcessRequestComplete().BindRaw(this, &FOnlineTitleFileBrainCloud::RequestComplete); - httpRequest->ProcessRequest(); - - _activeRequests.Add(header->URL, httpRequest); - return true; -} - -void FOnlineTitleFileBrainCloud::EnumerateFilesSuccess(const FString & jsonData) -{ - _cachedFileHeaders.Empty(); - - TArray> files = FOnlineSubsystemBrainCloud::GetJsonData(jsonData)->GetArrayField(TEXT("fileDetails")); - - for (int32 i = 0; i < files.Num(); ++i) - { - FJsonObject* fileObj = files[i]->AsObject().Get(); - - TSharedPtr fileHeader = MakeShareable(new FCloudFileHeaderBrainCloud()); - - fileHeader->DLName = fileObj->GetStringField(TEXT("shortName")); - fileHeader->FileName = fileHeader->DLName; - fileHeader->URL = fileObj->GetStringField(TEXT("absoluteUrl")); - fileHeader->Hash = fileObj->GetStringField(TEXT("md5Hash")); - fileHeader->FileSize = fileObj->GetNumberField(TEXT("fileSize")); - - _cachedFileHeaders.Add(fileHeader); - } - -// Unreal Engine Version is >= 4.18 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 18) || ENGINE_MAJOR_VERSION == 5 - OnEnumerateFilesCompleteDelegates.Broadcast(true, TEXT("FOnlineTitleFileBrainCloud")); -#else - OnEnumerateFilesCompleteDelegates.Broadcast(false); -#endif -} - -void FOnlineTitleFileBrainCloud::EnumerateFilesFail(int32 returnCode, const FString & jsonData) -{ -// Unreal Engine Version is >= 4.18 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 18) || ENGINE_MAJOR_VERSION == 5 - OnEnumerateFilesCompleteDelegates.Broadcast(false, TEXT("FOnlineTitleFileBrainCloud")); -#else - OnEnumerateFilesCompleteDelegates.Broadcast(false); -#endif -} - -void FOnlineTitleFileBrainCloud::RequestComplete(FHttpRequestPtr request, FHttpResponsePtr response, bool wasSuccess) -{ - _activeRequests.Remove(request->GetURL()); - - TSharedPtr header; - - if (!GetFileHeader(request->GetURL(), header)) - { - UE_LOG(LogOnline, Display, TEXT("Unable to find file %s in FCloudFileHeader cache, read aborted"), *request->GetURL()); - OnReadFileCompleteDelegates.Broadcast(false, TEXT("")); - return; - } - - if (wasSuccess && response->GetResponseCode() < 299) - { - FString fullFilePath = FPaths::Combine(*_tempFolderPath, *header->FileName); - - TArray content = response->GetContent(); - - if (!FFileHelper::SaveArrayToFile(content, *fullFilePath)) - { - UE_LOG(LogOnline, Display, TEXT("Error saving file %s to %s"), *header->FileName, *fullFilePath); - OnReadFileCompleteDelegates.Broadcast(false, header->FileName); - return; - } - - _cachedFiles.Add(header->FileName, fullFilePath); - } - else - { - UE_LOG(LogOnline, Display, TEXT("ReadFile failed for %s with code %d "), *header->FileName, response->GetResponseCode()); - OnReadFileCompleteDelegates.Broadcast(false, header->FileName); - return; - } - - OnReadFileCompleteDelegates.Broadcast(true, header->FileName); -} - -bool FOnlineTitleFileBrainCloud::GetFileHeader(const FString& Url, TSharedPtr& OutHeader) -{ - for (int32 i = 0; i < _cachedFileHeaders.Num(); ++i) - { - if (_cachedFileHeaders[i]->URL == Url) - { - OutHeader = _cachedFileHeaders[i]; - return true; - } - } - return false; -} - -/** - * Gets all the files in a given directory. - * - * @param directory The full path of the directory we want to iterate over. - * @param fullpath Whether the returned list should be the full file paths or just the filenames. - * @param onlyFilesStartingWith Will only return filenames starting with this string. Also applies onlyFilesEndingWith if specified. - * @param onlyFilesEndingWith Will only return filenames ending with this string (it looks at the extension as well!). Also applies onlyFilesStartingWith if specified. - * - * @return A list of files (including the extension). - */ -TArray FOnlineTitleFileBrainCloud::GetAllFilesInDirectory(const FString& directory, const bool fullPath, const FString& onlyFilesStartingWith, const FString& onlyFilesWithExtension) -{ - // Get all files in directory - TArray directoriesToSkip; - IPlatformFile &PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); - FLocalTimestampDirectoryVisitor Visitor(PlatformFile, directoriesToSkip, directoriesToSkip, false); - PlatformFile.IterateDirectory(*directory, Visitor); - TArray files; - - for (TMap::TIterator TimestampIt(Visitor.FileTimes); TimestampIt; ++TimestampIt) - { - const FString filePath = TimestampIt.Key(); - const FString fileName = FPaths::GetCleanFilename(filePath); - bool shouldAddFile = true; - - // Check if filename starts with required characters - if (!onlyFilesStartingWith.IsEmpty()) - { - const FString left = fileName.Left(onlyFilesStartingWith.Len()); - - if (!(fileName.Left(onlyFilesStartingWith.Len()).Equals(onlyFilesStartingWith))) - shouldAddFile = false; - } - - // Check if file extension is required characters - if (!onlyFilesWithExtension.IsEmpty()) - { - if (!(FPaths::GetExtension(fileName, false).Equals(onlyFilesWithExtension, ESearchCase::IgnoreCase))) - shouldAddFile = false; - } - - // Add full path to results - if (shouldAddFile) - { - files.Add(fullPath ? filePath : fileName); - } - } - - return files; -} diff --git a/Source/OnlineSubsystemBrainCloud/Private/OnlineTitleFileInterfaceBrainCloud.h b/Source/OnlineSubsystemBrainCloud/Private/OnlineTitleFileInterfaceBrainCloud.h deleted file mode 100644 index 0562136..0000000 --- a/Source/OnlineSubsystemBrainCloud/Private/OnlineTitleFileInterfaceBrainCloud.h +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "Interfaces/OnlineTitleFileInterface.h" -#include "OnlineSubsystemBrainCloud.h" -#include "Runtime/Launch/Resources/Version.h" - -#include "Interfaces/IHttpRequest.h" -#include "Interfaces/IHttpResponse.h" - -/** Holds metadata about a given downloadable file */ -struct FCloudFileHeaderBrainCloud : public FCloudFileHeader -{ - /** URL for the file on the server */ - FString URL; - - FCloudFileHeaderBrainCloud() : - FCloudFileHeader() - {} - - FCloudFileHeaderBrainCloud(const FString& InFileName, const FString& InDLName, int32 InFileSize, const FString& InURL) : - FCloudFileHeader(InFileName, InDLName, InFileSize), - URL(InURL) - {} -}; - -class FOnlineTitleFileBrainCloud : public IOnlineTitleFile -{ -public: - /** - * Constructor - * @param inSubsystem online subsystem being used - */ - FOnlineTitleFileBrainCloud(class FOnlineSubsystemBrainCloud* InSubsystem); - - /** - * Destructor - */ - virtual ~FOnlineTitleFileBrainCloud() {}; - - /** - * Copies the file data into the specified buffer for the specified file - * - * @param FileName the name of the file to read - * @param FileContents the out buffer to copy the data into - * - * @return true if the data was copied, false otherwise - */ - virtual bool GetFileContents(const FString& FileName, TArray& FileContents); - - /** - * Empties the set of downloaded files if possible (no async tasks outstanding) - * - * @return true if they could be deleted, false if they could not - */ - virtual bool ClearFiles(); - - /** - * Empties the cached data for this file if it is not being downloaded currently - * - * @param FileName the name of the file to remove from the cache - * - * @return true if it could be deleted, false if it could not - */ - virtual bool ClearFile(const FString& FileName); - - /** - * Delete cached files on disk - * - * @param bSkipEnumerated if true then only non-enumerated files are deleted - */ - virtual void DeleteCachedFiles(bool bSkipEnumerated); - - /** - * Requests a list of available files from the network store - * - * @param Page paging info to use for query - * - * @return true if the request has started, false if not - */ - virtual bool EnumerateFiles(const FPagedQuery& Page = FPagedQuery()); - - /** - * Returns the list of files that was returned by the network store - * - * @param Files out array of file metadata - * - */ - virtual void GetFileList(TArray& Files); - - /** - * Starts an asynchronous read of the specified file from the network platform's file store - * - * @param FileToRead the name of the file to read - * - * @return true if the calls starts successfully, false otherwise - */ - virtual bool ReadFile(const FString& FileName); - -private: - FOnlineSubsystemBrainCloud* _subsystem; - FString _tempFolderPath; - - TArray> _cachedFileHeaders; - TMap _activeRequests; - TMap _cachedFiles; - - bool GetFileHeader(const FString& Url, TSharedPtr& OutHeader); - TArray GetAllFilesInDirectory(const FString& directory, const bool fullPath, const FString& onlyFilesStartingWith = TEXT(""), const FString& onlyFilesWithExtension = TEXT("")); - - //BC Callbacks - void EnumerateFilesSuccess(const FString& jsonData); - void EnumerateFilesFail(int32 returnCode, const FString& jsonData); - - void RequestComplete(FHttpRequestPtr request, FHttpResponsePtr response, bool wasSuccess); -}; - -typedef TSharedPtr FOnlineTitleFileBrainCloudPtr; -typedef TSharedRef FOnlineTitleFileBrainCloudRef; \ No newline at end of file diff --git a/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloud.h b/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloud.h deleted file mode 100644 index 6e028c5..0000000 --- a/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloud.h +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "OnlineSubsystem.h" -#include "OnlineSubsystemImpl.h" -#include "OnlineSubsystemBrainCloudPackage.h" -#include "Runtime/Launch/Resources/Version.h" -#include "Dom/JsonObject.h" -#include "Serialization/JsonSerializer.h" -#include "Misc/LocalTimestampDirectoryVisitor.h" -#if ENGINE_MAJOR_VERSION == 5 -#include "HAL/PlatformFileManager.h" -#else -#include "HAL/PlatformFilemanager.h" -#endif -#include "GenericPlatform/GenericPlatformFile.h" - -/** Forward declarations of all interface classes */ -typedef TSharedPtr FOnlineLeaderboardsBrainCloudPtr; -typedef TSharedPtr FOnlineIdentityBrainCloudPtr; -typedef TSharedPtr FOnlineAchievementsBrainCloudPtr; -typedef TSharedPtr FOnlineMessageBrainCloudPtr; -typedef TSharedPtr FOnlineTitleFileBrainCloudPtr; -typedef TSharedPtr FOnlineTimeBrainCloudPtr; - -class BrainCloudClient; -class UBrainCloudWrapper; -class AssignableServerCallback; - -/** -* OnlineSubsystemBrainCloud - Implementation of the online subsystem for BrainCloud services -*/ -class ONLINESUBSYSTEMBRAINCLOUD_API FOnlineSubsystemBrainCloud : public FOnlineSubsystemImpl -{ - - public: - FOnlineSubsystemBrainCloud(); - virtual ~FOnlineSubsystemBrainCloud(); - - // IOnlineSubsystem - - virtual IOnlineSessionPtr GetSessionInterface() const override; - virtual IOnlineFriendsPtr GetFriendsInterface() const override; - virtual IOnlinePartyPtr GetPartyInterface() const override; - virtual IOnlineGroupsPtr GetGroupsInterface() const override; - virtual IOnlineSharedCloudPtr GetSharedCloudInterface() const override; - virtual IOnlineUserCloudPtr GetUserCloudInterface() const override; - virtual IOnlineEntitlementsPtr GetEntitlementsInterface() const override; - virtual IOnlineLeaderboardsPtr GetLeaderboardsInterface() const override; - virtual IOnlineVoicePtr GetVoiceInterface() const override; - virtual IOnlineExternalUIPtr GetExternalUIInterface() const override; - virtual IOnlineTimePtr GetTimeInterface() const override; - virtual IOnlineIdentityPtr GetIdentityInterface() const override; - virtual IOnlineTitleFilePtr GetTitleFileInterface() const override; - - virtual IOnlineEventsPtr GetEventsInterface() const override; - virtual IOnlineAchievementsPtr GetAchievementsInterface() const override; - virtual IOnlineSharingPtr GetSharingInterface() const override; - virtual IOnlineUserPtr GetUserInterface() const override; - virtual IOnlineMessagePtr GetMessageInterface() const override; - virtual IOnlinePresencePtr GetPresenceInterface() const override; - virtual IOnlineChatPtr GetChatInterface() const override; - virtual IOnlineTurnBasedPtr GetTurnBasedInterface() const override; - -// Unreal Engine Version is >= 4.22 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 22) || ENGINE_MAJOR_VERSION == 5 - virtual IOnlineStatsPtr GetStatsInterface() const override; -#endif - -// Unreal Engine Version is >= 4.21 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 21) || ENGINE_MAJOR_VERSION == 5 - virtual IOnlineTournamentPtr GetTournamentInterface() const override; -#endif - -// Unreal Engine Version is >= 4.17 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 17) || ENGINE_MAJOR_VERSION == 5 - virtual FText GetOnlineServiceName() const override; -#endif - -// Unreal Engine Version is >= 4.11 OR in Unreal Engine 5 -#if (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 11) || ENGINE_MAJOR_VERSION == 5 - virtual IOnlineStoreV2Ptr GetStoreV2Interface() const override; - virtual IOnlinePurchasePtr GetPurchaseInterface() const override; -#if (ENGINE_MAJOR_VERSION <= 4) || (ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION <= 0) - virtual IOnlineStorePtr GetStoreInterface() const override; -#endif -#endif - - virtual bool Init() override; - virtual bool Shutdown() override; - virtual FString GetAppId() const override; - virtual bool Exec(class UWorld *InWorld, const TCHAR *Cmd, FOutputDevice &Ar) override; - - // FTickerObjectBase - - virtual bool Tick(float DeltaTime) override; - - /** - * Used to create BrainCloud callback objects - * Adds all objects to tracked list to ensure proper cleanup - */ - template - T *GetCallbackObject(Args... args) - { - T *cb = new T(args...); - AssignableServerCallback *acb = static_cast(cb); - _activeCallbacks.Add(acb); - return cb; - } - - /** - * Adds an AssignableServerCallback object to tracked list to ensure proper cleanup - */ - void RegisterCallbackObject(AssignableServerCallback *callback); - - BrainCloudClient *GetClient(); - FString GetConfigPath() { return _configPath; } - - static TSharedPtr GetJsonData(const FString &jsonString); - - /** - * Is the BrainCloud API available for use - * @return true if BrainCloud functionality is available, false otherwise - */ - virtual bool IsEnabled() const override; - - PACKAGE_SCOPE : - - /** Only the factory makes instances */ - FOnlineSubsystemBrainCloud(FName InSubsystemName, FName InInstanceName); - - private: - /** Interface to the leaderboard services */ - FOnlineLeaderboardsBrainCloudPtr LeaderboardsInterface = nullptr; - - /** Interface to the identity registration/auth services */ - FOnlineIdentityBrainCloudPtr IdentityInterface = nullptr; - - /** Interface for achievements */ - FOnlineAchievementsBrainCloudPtr AchievementsInterface = nullptr; - - /** Interface for messages */ - FOnlineMessageBrainCloudPtr MessageInterface = nullptr; - - /** Interface for title files */ - FOnlineTitleFileBrainCloudPtr TitleFileInterface = nullptr; - - /** Interface for server time */ - FOnlineTimeBrainCloudPtr TimeInterface = nullptr; - - void CleanupCallbackObjects(); - - TArray _activeCallbacks = TArray(); - - BrainCloudClient *_clientPtr = nullptr; - FString _configPath = ""; -}; - -typedef TSharedPtr FOnlineSubsystemBrainCloudPtr; diff --git a/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloudModule.h b/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloudModule.h deleted file mode 100644 index ee4a048..0000000 --- a/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloudModule.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Modules/ModuleInterface.h" - -/** -* Online subsystem module class (BrainCloud Implementation) -* Code related to the loading of the BrainCloud module -*/ -class FOnlineSubsystemBrainCloudModule : public IModuleInterface -{ -private: - - /** Class responsible for creating instance(s) of the subsystem */ - class FOnlineFactoryBrainCloud* BrainCloudFactory; - -public: - - FOnlineSubsystemBrainCloudModule() : - BrainCloudFactory(NULL) - {} - - virtual ~FOnlineSubsystemBrainCloudModule() {} - - // IModuleInterface - - virtual void StartupModule() override; - virtual void ShutdownModule() override; - virtual bool SupportsDynamicReloading() override - { - return false; - } - - virtual bool SupportsAutomaticShutdown() override - { - return false; - } -}; - - - diff --git a/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloudPackage.h b/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloudPackage.h deleted file mode 100644 index 16207a6..0000000 --- a/Source/OnlineSubsystemBrainCloud/Public/OnlineSubsystemBrainCloudPackage.h +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2018 bitHeads, Inc. All Rights Reserved. - -// Can't be #pragma once because other modules may define PACKAGE_SCOPE - -// Intended to be the last include in an exported class definition -// Properly defines some members as "public to the module" vs "private to the consumer/user" - -#undef PACKAGE_SCOPE -#ifdef ONLINESUBSYSTEMBRAINCLOUD_PACKAGE -#define PACKAGE_SCOPE public -#else -#define PACKAGE_SCOPE protected -#endif From bf4fd8ea39ac7fc939332e196c758cf751f6d88a Mon Sep 17 00:00:00 2001 From: Nick H Date: Mon, 3 Feb 2025 17:40:21 -0500 Subject: [PATCH 2/3] Fixed issues with zconf.h not found in Unreal 5.5 also removed zlib.h which was not necessary --- Source/BCClientPlugin/Private/ConvertUtilities.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/BCClientPlugin/Private/ConvertUtilities.cpp b/Source/BCClientPlugin/Private/ConvertUtilities.cpp index 3ebe0a1..1bcd16c 100644 --- a/Source/BCClientPlugin/Private/ConvertUtilities.cpp +++ b/Source/BCClientPlugin/Private/ConvertUtilities.cpp @@ -3,8 +3,6 @@ #include "Serialization/MemoryReader.h" #include #include -#include -#include "zlib.h" #include "Policies/CondensedJsonPrintPolicy.h" FString ConvertUtilities::BCBytesToString(const TArray& in) From 2fce184851cdb673cad589a59a30d879c43a9afe Mon Sep 17 00:00:00 2001 From: Nick H Date: Thu, 6 Feb 2025 18:52:40 -0500 Subject: [PATCH 3/3] Fixed issue with UE4 compilation --- Source/BCClientPlugin/Private/RelayTCPSocket.h | 2 +- Source/BCClientPlugin/Private/RelayUDPSocket.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/BCClientPlugin/Private/RelayTCPSocket.h b/Source/BCClientPlugin/Private/RelayTCPSocket.h index 08485ac..6af21e2 100644 --- a/Source/BCClientPlugin/Private/RelayTCPSocket.h +++ b/Source/BCClientPlugin/Private/RelayTCPSocket.h @@ -2,7 +2,7 @@ #include "IRelaySocket.h" #include "CoreMinimal.h" - +#include //#include "Networking.h" #include "Sockets.h" diff --git a/Source/BCClientPlugin/Private/RelayUDPSocket.h b/Source/BCClientPlugin/Private/RelayUDPSocket.h index 4a18309..e466683 100644 --- a/Source/BCClientPlugin/Private/RelayUDPSocket.h +++ b/Source/BCClientPlugin/Private/RelayUDPSocket.h @@ -2,7 +2,7 @@ #include "IRelaySocket.h" #include "CoreMinimal.h" -#include "Misc/ScopeLock.h" +#include //#include "Networking.h" #include "Sockets.h"