diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamWorkshopLibrary.h b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamWorkshopLibrary.h index 08f799f..011d362 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamWorkshopLibrary.h +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/AdvancedSteamWorkshopLibrary.h @@ -48,14 +48,14 @@ struct FBPSteamWorkshopID public: - uint32 SteamWorkshopID; + uint64 SteamWorkshopID; FBPSteamWorkshopID() { } - FBPSteamWorkshopID(uint32 ID) + FBPSteamWorkshopID(uint64 ID) { SteamWorkshopID = ID; } diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamWSRequestUGCDetailsCallbackProxy.h b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamWSRequestUGCDetailsCallbackProxy.h index 16ca1aa..9d29f26 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamWSRequestUGCDetailsCallbackProxy.h +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Classes/SteamWSRequestUGCDetailsCallbackProxy.h @@ -32,7 +32,6 @@ #include "SteamWSRequestUGCDetailsCallbackProxy.generated.h" - DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FBlueprintWorkshopDetailsDelegate, const FBPSteamWorkshopItemDetails&, WorkShopDetails); UCLASS(MinimalAPI) @@ -50,7 +49,7 @@ class USteamWSRequestUGCDetailsCallbackProxy : public UOnlineBlueprintCallProxyB // Ends the current session UFUNCTION(BlueprintCallable, meta=(BlueprintInternalUseOnly = "true", WorldContext="WorldContextObject"), Category = "Online|AdvancedSteamWorkshop") - static USteamWSRequestUGCDetailsCallbackProxy* GetWorkshopItemDetails(UObject* WorldContextObject, FBPSteamWorkshopID WorkShopID, int32 NumSecondsBeforeTimeout); + static USteamWSRequestUGCDetailsCallbackProxy* GetWorkshopItemDetails(UObject* WorldContextObject, FBPSteamWorkshopID WorkShopID); // UOnlineBlueprintCallProxyBase interface virtual void Activate() override; @@ -59,18 +58,15 @@ class USteamWSRequestUGCDetailsCallbackProxy : public UOnlineBlueprintCallProxyB private: #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX - // Internal callback when the operation completes, calls out to the public success/failure callbacks - /* Steam UGC details */ - //STEAM_CALLBACK(USteamWSRequestUGCDetailsCallbackProxy, OnUGCRequestUGCDetails, SteamUGCRequestUGCDetailsResult_t, OnUGCRequestUGCDetailsCallback); - void OnUGCRequestUGCDetails(SteamUGCRequestUGCDetailsResult_t *pResult, bool bIOFailure); - CCallResult m_callResultUGCRequestDetails; + // Internal callback when the operation completes, calls out to the public success/failure callbacks + + void OnUGCRequestUGCDetails(SteamUGCQueryCompleted_t *pResult, bool bIOFailure); + CCallResult m_callResultUGCRequestDetails; + #endif private: FBPSteamWorkshopID WorkShopID; - - int32 NumSecondsBeforeTimeout; - UObject* WorldContextObject; }; diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamRequestGroupOfficersCallbackProxy.cpp b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamRequestGroupOfficersCallbackProxy.cpp index 0a462c0..b38a236 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamRequestGroupOfficersCallbackProxy.cpp +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamRequestGroupOfficersCallbackProxy.cpp @@ -27,6 +27,7 @@ void USteamRequestGroupOfficersCallbackProxy::Activate() { uint64 id = *((uint64*)GroupUniqueID.UniqueNetId->GetBytes()); SteamAPICall_t hSteamAPICall = SteamFriends()->RequestClanOfficerList(id); + m_callResultGroupOfficerRequestDetails.Set(hSteamAPICall, this, &USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails); return; } diff --git a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamWSRequestUGCDetailsCallbackProxy.cpp b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamWSRequestUGCDetailsCallbackProxy.cpp index 066925e..6709ab7 100644 --- a/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamWSRequestUGCDetailsCallbackProxy.cpp +++ b/AdvancedSteamSessions/Source/AdvancedSteamSessions/Private/SteamWSRequestUGCDetailsCallbackProxy.cpp @@ -9,16 +9,14 @@ USteamWSRequestUGCDetailsCallbackProxy::USteamWSRequestUGCDetailsCallbackProxy(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { - NumSecondsBeforeTimeout = 2.0f; } -USteamWSRequestUGCDetailsCallbackProxy* USteamWSRequestUGCDetailsCallbackProxy::GetWorkshopItemDetails(UObject* WorldContextObject, FBPSteamWorkshopID WorkShopID, int32 NumSecondsBeforeTimeout) +USteamWSRequestUGCDetailsCallbackProxy* USteamWSRequestUGCDetailsCallbackProxy::GetWorkshopItemDetails(UObject* WorldContextObject, FBPSteamWorkshopID WorkShopID/*, int32 NumSecondsBeforeTimeout*/) { USteamWSRequestUGCDetailsCallbackProxy* Proxy = NewObject(); Proxy->WorkShopID = WorkShopID; - Proxy->NumSecondsBeforeTimeout = NumSecondsBeforeTimeout; return Proxy; } @@ -26,8 +24,21 @@ void USteamWSRequestUGCDetailsCallbackProxy::Activate() { #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX if (SteamAPI_Init()) - { - SteamAPICall_t hSteamAPICall = SteamUGC()->RequestUGCDetails(WorkShopID.SteamWorkshopID, NumSecondsBeforeTimeout); + { + // #TODO: Support arrays instead in the future? + UGCQueryHandle_t hQueryHandle = SteamUGC()->CreateQueryUGCDetailsRequest((PublishedFileId_t *)&WorkShopID.SteamWorkshopID, 1); + // #TODO: add search settings here by calling into the handle? + SteamAPICall_t hSteamAPICall = SteamUGC()->SendQueryUGCRequest(hQueryHandle); + + // Need to release the query + SteamUGC()->ReleaseQueryUGCRequest(hQueryHandle); + + if (hSteamAPICall == k_uAPICallInvalid) + { + OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); + return; + } + m_callResultUGCRequestDetails.Set(hSteamAPICall, this, &USteamWSRequestUGCDetailsCallbackProxy::OnUGCRequestUGCDetails); return; } @@ -35,18 +46,24 @@ void USteamWSRequestUGCDetailsCallbackProxy::Activate() OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); } -void USteamWSRequestUGCDetailsCallbackProxy::OnUGCRequestUGCDetails(SteamUGCRequestUGCDetailsResult_t *pResult, bool bIOFailure) +void USteamWSRequestUGCDetailsCallbackProxy::OnUGCRequestUGCDetails(SteamUGCQueryCompleted_t *pResult, bool bIOFailure) { #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX - if (bIOFailure || !pResult) + if (bIOFailure || !pResult || pResult->m_unNumResultsReturned <= 0) { OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); return; } - - OnSuccess.Broadcast(FBPSteamWorkshopItemDetails(pResult->m_details)); - return; + if (SteamAPI_Init()) + { + SteamUGCDetails_t Details; + if (SteamUGC()->GetQueryUGCResult(pResult->m_handle, 0, &Details)) + { + OnSuccess.Broadcast(FBPSteamWorkshopItemDetails(Details)); + return; + } + } #endif OnFailure.Broadcast(FBPSteamWorkshopItemDetails());