From 6d404d22cedebf3079b9725b85dc06274ab0b25e Mon Sep 17 00:00:00 2001 From: mordentral Date: Fri, 28 Sep 2018 14:37:34 -0400 Subject: [PATCH] Fixing the blueprint events being thrown in the steam callback thread. Former-commit-id: 3bba47b6f917b101b093a1150bca3048734a684e --- .../Classes/AdvancedSteamWorkshopLibrary.h | 19 ++++++++++ .../SteamRequestGroupOfficersCallbackProxy.h | 2 + .../SteamWSRequestUGCDetailsCallbackProxy.h | 2 + ...SteamRequestGroupOfficersCallbackProxy.cpp | 36 ++++++++++++++++-- .../SteamWSRequestUGCDetailsCallbackProxy.cpp | 38 ++++++++++++++++--- 5 files changed, 89 insertions(+), 8 deletions(-) diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamWorkshopLibrary.h b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamWorkshopLibrary.h index 5c38b5b..ca8aab1 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamWorkshopLibrary.h +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamWorkshopLibrary.h @@ -227,6 +227,25 @@ public: CreatorSteamID = FString::Printf(TEXT("%llu"), hUGCDetails.m_ulSteamIDOwner); } + FBPSteamWorkshopItemDetails(const SteamUGCDetails_t &hUGCDetails) + { + ResultOfRequest = (FBPSteamResult)hUGCDetails.m_eResult; + FileType = (FBPWorkshopFileType)hUGCDetails.m_eFileType; + CreatorAppID = (int32)hUGCDetails.m_nCreatorAppID; + ConsumerAppID = (int32)hUGCDetails.m_nConsumerAppID; + Title = FString(hUGCDetails.m_rgchTitle, k_cchPublishedDocumentTitleMax); + Description = FString(hUGCDetails.m_rgchDescription, k_cchPublishedDocumentDescriptionMax); + ItemUrl = FString(hUGCDetails.m_rgchURL, k_cchPublishedFileURLMax); + VotesUp = (int32)hUGCDetails.m_unVotesUp; + VotesDown = (int32)hUGCDetails.m_unVotesDown; + CalculatedScore = hUGCDetails.m_flScore; + bBanned = hUGCDetails.m_bBanned; + bAcceptedForUse = hUGCDetails.m_bAcceptedForUse; + bTagsTruncated = hUGCDetails.m_bTagsTruncated; + + CreatorSteamID = FString::Printf(TEXT("%llu"), hUGCDetails.m_ulSteamIDOwner); + } + // Result of obtaining the details UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Online|AdvancedSteamWorkshop") FBPSteamResult ResultOfRequest; diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamRequestGroupOfficersCallbackProxy.h b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamRequestGroupOfficersCallbackProxy.h index eae4029..389d848 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamRequestGroupOfficersCallbackProxy.h +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamRequestGroupOfficersCallbackProxy.h @@ -17,6 +17,8 @@ #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX +#include "OnlineSubsystemSteam.h" + #pragma push_macro("ARRAY_COUNT") #undef ARRAY_COUNT diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamWSRequestUGCDetailsCallbackProxy.h b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamWSRequestUGCDetailsCallbackProxy.h index dc55f8a..11adebe 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamWSRequestUGCDetailsCallbackProxy.h +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamWSRequestUGCDetailsCallbackProxy.h @@ -18,6 +18,8 @@ #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX +#include "OnlineSubsystemSteam.h" + #pragma push_macro("ARRAY_COUNT") #undef ARRAY_COUNT diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamRequestGroupOfficersCallbackProxy.cpp b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamRequestGroupOfficersCallbackProxy.cpp index c5d3dc8..300ce34 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamRequestGroupOfficersCallbackProxy.cpp +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamRequestGroupOfficersCallbackProxy.cpp @@ -46,10 +46,20 @@ void USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails(ClanO TArray OfficerArray; #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX + + FOnlineSubsystemSteam* SteamSubsystem = (FOnlineSubsystemSteam*)(IOnlineSubsystem::Get(STEAM_SUBSYSTEM)); if (bIOFailure || !pResult || !pResult->m_bSuccess) { - OnFailure.Broadcast(OfficerArray); + if (SteamSubsystem != nullptr) + { + SteamSubsystem->ExecuteNextTick([this]() + { + TArray FailureArray; + OnFailure.Broadcast(FailureArray); + }); + } + //OnFailure.Broadcast(OfficerArray); return; } @@ -78,11 +88,31 @@ void USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails(ClanO OfficerArray.Add(Officer); } - OnSuccess.Broadcast(OfficerArray); + if (SteamSubsystem != nullptr) + { + SteamSubsystem->ExecuteNextTick([OfficerArray, this]() + { + OnSuccess.Broadcast(OfficerArray); + }); + } + + //OnSuccess.Broadcast(OfficerArray); return; } + else + { + if (SteamSubsystem != nullptr) + { + SteamSubsystem->ExecuteNextTick([this]() + { + TArray FailureArray; + OnFailure.Broadcast(FailureArray); + }); + } + } #endif - OnFailure.Broadcast(OfficerArray); + // Should never hit this anyway + //OnFailure.Broadcast(OfficerArray); } diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamWSRequestUGCDetailsCallbackProxy.cpp b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamWSRequestUGCDetailsCallbackProxy.cpp index 6709ab7..5923917 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamWSRequestUGCDetailsCallbackProxy.cpp +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamWSRequestUGCDetailsCallbackProxy.cpp @@ -49,23 +49,51 @@ void USteamWSRequestUGCDetailsCallbackProxy::Activate() void USteamWSRequestUGCDetailsCallbackProxy::OnUGCRequestUGCDetails(SteamUGCQueryCompleted_t *pResult, bool bIOFailure) { #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX + + FOnlineSubsystemSteam* SteamSubsystem = (FOnlineSubsystemSteam*)(IOnlineSubsystem::Get(STEAM_SUBSYSTEM)); if (bIOFailure || !pResult || pResult->m_unNumResultsReturned <= 0) - { - OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); + { + if (SteamSubsystem != nullptr) + { + SteamSubsystem->ExecuteNextTick([this]() + { + OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); + }); + } + //OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); return; } if (SteamAPI_Init()) { SteamUGCDetails_t Details; if (SteamUGC()->GetQueryUGCResult(pResult->m_handle, 0, &Details)) - { - OnSuccess.Broadcast(FBPSteamWorkshopItemDetails(Details)); + { + if (SteamSubsystem != nullptr) + { + SteamSubsystem->ExecuteNextTick([Details, this]() + { + OnSuccess.Broadcast(FBPSteamWorkshopItemDetails(Details)); + }); + } + + //OnSuccess.Broadcast(FBPSteamWorkshopItemDetails(Details)); return; } } + else + { + if (SteamSubsystem != nullptr) + { + SteamSubsystem->ExecuteNextTick([this]() + { + OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); + }); + } + } #endif - OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); + // Not needed, should never hit here + //OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); }