From 6ba73a5bbb617cf959f7bf872e5c6be28b5ca900 Mon Sep 17 00:00:00 2001 From: Joshua Date: Fri, 19 Jan 2024 16:06:32 -0500 Subject: [PATCH] initial refactor of latent nodes --- .../Classes/AutoLoginUserCallbackProxy.h | 2 +- .../Classes/CancelFindSessionsCallbackProxy.h | 2 +- .../CreateSessionCallbackProxyAdvanced.h | 2 +- .../Classes/EndSessionCallbackProxy.h | 2 +- .../Classes/FindFriendSessionCallbackProxy.h | 2 +- .../FindSessionsCallbackProxyAdvanced.h | 2 +- .../Classes/GetFriendsCallbackProxy.h | 2 +- .../Classes/GetRecentPlayersCallbackProxy.h | 2 +- .../Classes/GetUserPrivilegeCallbackProxy.h | 2 +- .../Classes/LoginUserCallbackProxy.h | 2 +- .../Classes/LogoutUserCallbackProxy.h | 2 +- .../Classes/SendFriendInviteCallbackProxy.h | 2 +- .../StartSessionCallbackProxyAdvanced.h | 4 +- .../UpdateSessionCallbackProxyAdvanced.h | 2 +- .../Private/AutoLoginUserCallbackProxy.cpp | 73 +++++++++++-------- .../CancelFindSessionsCallbackProxy.cpp | 4 +- .../CreateSessionCallbackProxyAdvanced.cpp | 6 +- .../Private/EndSessionCallbackProxy.cpp | 4 +- .../FindFriendSessionCallbackProxy.cpp | 57 ++++++++++----- .../FindSessionsCallbackProxyAdvanced.cpp | 11 ++- .../Private/GetFriendsCallbackProxy.cpp | 32 ++++++-- .../Private/GetRecentPlayersCallbackProxy.cpp | 22 +++++- .../Private/GetUserPrivilegeCallbackProxy.cpp | 9 ++- .../Private/LoginUserCallbackProxy.cpp | 18 ++++- .../Private/LogoutUserCallbackProxy.cpp | 19 ++++- .../Private/SendFriendInviteCallbackProxy.cpp | 10 ++- .../StartSessionCallbackProxyAdvanced.cpp | 12 +-- .../UpdateSessionCallbackProxyAdvanced.cpp | 4 +- 28 files changed, 213 insertions(+), 98 deletions(-) diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/AutoLoginUserCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/AutoLoginUserCallbackProxy.h index dc91cff..d07a666 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/AutoLoginUserCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/AutoLoginUserCallbackProxy.h @@ -51,5 +51,5 @@ private: FDelegateHandle DelegateHandle; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/CancelFindSessionsCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/CancelFindSessionsCallbackProxy.h index 59ebff3..58d2ea0 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/CancelFindSessionsCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/CancelFindSessionsCallbackProxy.h @@ -42,5 +42,5 @@ private: FDelegateHandle DelegateHandle; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/CreateSessionCallbackProxyAdvanced.h b/AdvancedSessions/Source/AdvancedSessions/Classes/CreateSessionCallbackProxyAdvanced.h index 013ff0b..04ae6d1 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/CreateSessionCallbackProxyAdvanced.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/CreateSessionCallbackProxyAdvanced.h @@ -102,6 +102,6 @@ private: TArray ExtraSettings; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/EndSessionCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/EndSessionCallbackProxy.h index 756c645..e527c58 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/EndSessionCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/EndSessionCallbackProxy.h @@ -45,5 +45,5 @@ private: FDelegateHandle DelegateHandle; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/FindFriendSessionCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/FindFriendSessionCallbackProxy.h index 6876995..58ef8f5 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/FindFriendSessionCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/FindFriendSessionCallbackProxy.h @@ -46,6 +46,6 @@ private: FDelegateHandle FindFriendSessionCompleteDelegateHandle; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/FindSessionsCallbackProxyAdvanced.h b/AdvancedSessions/Source/AdvancedSessions/Classes/FindSessionsCallbackProxyAdvanced.h index a998ba3..e610277 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/FindSessionsCallbackProxyAdvanced.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/FindSessionsCallbackProxyAdvanced.h @@ -105,5 +105,5 @@ private: int MinSlotsAvailable; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/GetFriendsCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/GetFriendsCallbackProxy.h index 57be8f7..844bef6 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/GetFriendsCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/GetFriendsCallbackProxy.h @@ -44,6 +44,6 @@ private: //EBPFriendsLists FriendListToGet; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/GetRecentPlayersCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/GetRecentPlayersCallbackProxy.h index d0d7af4..2b12c9f 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/GetRecentPlayersCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/GetRecentPlayersCallbackProxy.h @@ -44,6 +44,6 @@ private: FOnQueryRecentPlayersCompleteDelegate QueryRecentPlayersCompleteDelegate; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/GetUserPrivilegeCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/GetUserPrivilegeCallbackProxy.h index 448ab59..f47d2a5 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/GetUserPrivilegeCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/GetUserPrivilegeCallbackProxy.h @@ -41,5 +41,5 @@ private: EBPUserPrivileges UserPrivilege; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/LoginUserCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/LoginUserCallbackProxy.h index 08bfd4c..ba65b68 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/LoginUserCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/LoginUserCallbackProxy.h @@ -51,5 +51,5 @@ private: FDelegateHandle DelegateHandle; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/LogoutUserCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/LogoutUserCallbackProxy.h index 9907095..5f85b0a 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/LogoutUserCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/LogoutUserCallbackProxy.h @@ -43,5 +43,5 @@ private: FDelegateHandle DelegateHandle; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/SendFriendInviteCallbackProxy.h b/AdvancedSessions/Source/AdvancedSessions/Classes/SendFriendInviteCallbackProxy.h index ca5c352..e878f51 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/SendFriendInviteCallbackProxy.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/SendFriendInviteCallbackProxy.h @@ -44,6 +44,6 @@ private: FOnSendInviteComplete OnSendInviteCompleteDelegate; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/StartSessionCallbackProxyAdvanced.h b/AdvancedSessions/Source/AdvancedSessions/Classes/StartSessionCallbackProxyAdvanced.h index 246fc50..e82cce8 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/StartSessionCallbackProxyAdvanced.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/StartSessionCallbackProxyAdvanced.h @@ -25,7 +25,7 @@ class UStartSessionCallbackProxyAdvanced : public UOnlineBlueprintCallProxyBase , meta=(BlueprintInternalUseOnly = "true", WorldContext="WorldContextObject") , Category = "Online|AdvancedSessions" ) - static UStartSessionCallbackProxyAdvanced* StartAdvancedSession(const UObject* WorldContextObject); + static UStartSessionCallbackProxyAdvanced* StartAdvancedSession(UObject* WorldContextObject); // UOnlineBlueprintCallProxyBase interface virtual void Activate() override; @@ -42,5 +42,5 @@ private: FDelegateHandle StartCompleteDelegateHandle; // The world context object in which this call is taking place - const UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; \ No newline at end of file diff --git a/AdvancedSessions/Source/AdvancedSessions/Classes/UpdateSessionCallbackProxyAdvanced.h b/AdvancedSessions/Source/AdvancedSessions/Classes/UpdateSessionCallbackProxyAdvanced.h index bd549a9..afdc181 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Classes/UpdateSessionCallbackProxyAdvanced.h +++ b/AdvancedSessions/Source/AdvancedSessions/Classes/UpdateSessionCallbackProxyAdvanced.h @@ -64,6 +64,6 @@ private: bool bShouldAdvertise = true; // The world context object in which this call is taking place - UObject* WorldContextObject; + TWeakObjectPtr WorldContextObject; }; diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/AutoLoginUserCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/AutoLoginUserCallbackProxy.cpp index 0c29769..9046773 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/AutoLoginUserCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/AutoLoginUserCallbackProxy.cpp @@ -24,13 +24,19 @@ UAutoLoginUserCallbackProxy* UAutoLoginUserCallbackProxy::AutoLoginUser(UObject* void UAutoLoginUserCallbackProxy::Activate() { - auto Identity = Online::GetIdentityInterface(); - if (Identity.IsValid()) + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("AutoLoginUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + + if (Helper.OnlineSub != nullptr) { - DelegateHandle = Identity->AddOnLoginCompleteDelegate_Handle(LocalUserNumber, Delegate); - Identity->AutoLogin(LocalUserNumber); - return; + auto Identity = Helper.OnlineSub->GetIdentityInterface(); + + if (Identity.IsValid()) + { + DelegateHandle = Identity->AddOnLoginCompleteDelegate_Handle(LocalUserNumber, Delegate); + Identity->AutoLogin(LocalUserNumber); + return; + } } // Fail immediately @@ -39,38 +45,45 @@ void UAutoLoginUserCallbackProxy::Activate() void UAutoLoginUserCallbackProxy::OnCompleted(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& ErrorVal) { - auto Identity = Online::GetIdentityInterface(); - - if (Identity.IsValid()) + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("AutoLoginUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + + if (Helper.OnlineSub != nullptr) { - Identity->ClearOnLoginCompleteDelegate_Handle(LocalUserNum, DelegateHandle); - } + auto Identity = Helper.OnlineSub->GetIdentityInterface(); - if(APlayerController* PController = UGameplayStatics::GetPlayerController(WorldContextObject->GetWorld(), LocalUserNum)) - { - ULocalPlayer* Player = Cast(PController->Player); - - FUniqueNetIdRepl uniqueId(UserId.AsShared()); - - if (Player) + if (Identity.IsValid()) { - Player->SetCachedUniqueNetId(uniqueId); + Identity->ClearOnLoginCompleteDelegate_Handle(LocalUserNum, DelegateHandle); } - if (APlayerState* State = PController->PlayerState) + if (APlayerController* PController = UGameplayStatics::GetPlayerController(WorldContextObject->GetWorld(), LocalUserNum)) { - // Update UniqueId. See also ShowLoginUICallbackProxy.cpp - State->SetUniqueId(uniqueId); + ULocalPlayer* Player = Cast(PController->Player); + + FUniqueNetIdRepl uniqueId(UserId.AsShared()); + + if (Player) + { + Player->SetCachedUniqueNetId(uniqueId); + } + + if (APlayerState* State = PController->PlayerState) + { + // Update UniqueId. See also ShowLoginUICallbackProxy.cpp + State->SetUniqueId(uniqueId); + } + } + + + if (bWasSuccessful) + { + OnSuccess.Broadcast(); + } + else + { + OnFailure.Broadcast(); } } - - if (bWasSuccessful) - { - OnSuccess.Broadcast(); - } - else - { - OnFailure.Broadcast(); - } + OnFailure.Broadcast(); } diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/CancelFindSessionsCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/CancelFindSessionsCallbackProxy.cpp index 7d29f5f..600187e 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/CancelFindSessionsCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/CancelFindSessionsCallbackProxy.cpp @@ -21,7 +21,7 @@ UCancelFindSessionsCallbackProxy* UCancelFindSessionsCallbackProxy::CancelFindSe void UCancelFindSessionsCallbackProxy::Activate() { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CancelFindSessions"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CancelFindSessions"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); if (Helper.IsValid()) @@ -47,7 +47,7 @@ void UCancelFindSessionsCallbackProxy::Activate() void UCancelFindSessionsCallbackProxy::OnCompleted(bool bWasSuccessful) { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CancelFindSessionsCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CancelFindSessionsCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); if (Helper.IsValid()) diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/CreateSessionCallbackProxyAdvanced.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/CreateSessionCallbackProxyAdvanced.cpp index 71a7d85..1ff10c1 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/CreateSessionCallbackProxyAdvanced.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/CreateSessionCallbackProxyAdvanced.cpp @@ -38,7 +38,7 @@ UCreateSessionCallbackProxyAdvanced* UCreateSessionCallbackProxyAdvanced::Create void UCreateSessionCallbackProxyAdvanced::Activate() { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CreateSession"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CreateSession"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); if (PlayerControllerWeakPtr.IsValid() ) Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); @@ -121,7 +121,7 @@ void UCreateSessionCallbackProxyAdvanced::Activate() void UCreateSessionCallbackProxyAdvanced::OnCreateCompleted(FName SessionName, bool bWasSuccessful) { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CreateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("CreateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); //Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); if (Helper.OnlineSub != nullptr) @@ -159,7 +159,7 @@ void UCreateSessionCallbackProxyAdvanced::OnCreateCompleted(FName SessionName, b void UCreateSessionCallbackProxyAdvanced::OnStartCompleted(FName SessionName, bool bWasSuccessful) { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("StartSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("StartSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); //Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); if (Helper.OnlineSub != nullptr) diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/EndSessionCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/EndSessionCallbackProxy.cpp index 0276399..ddb248c 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/EndSessionCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/EndSessionCallbackProxy.cpp @@ -21,7 +21,7 @@ UEndSessionCallbackProxy* UEndSessionCallbackProxy::EndSession(UObject* WorldCon void UEndSessionCallbackProxy::Activate() { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSession"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSession"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); if (Helper.IsValid()) @@ -55,7 +55,7 @@ void UEndSessionCallbackProxy::Activate() void UEndSessionCallbackProxy::OnCompleted(FName SessionName, bool bWasSuccessful) { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); if (Helper.IsValid()) diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/FindFriendSessionCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/FindFriendSessionCallbackProxy.cpp index 79b25de..019255c 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/FindFriendSessionCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/FindFriendSessionCallbackProxy.cpp @@ -41,7 +41,18 @@ void UFindFriendSessionCallbackProxy::Activate() return; } - IOnlineSessionPtr Sessions = Online::GetSessionInterface(GetWorld()); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); + + if (!Helper.IsValid()) + { + // Fail immediately + TArray EmptyResult; + OnFailure.Broadcast(EmptyResult); + return; + } + + IOnlineSessionPtr Sessions = Helper.OnlineSub->GetSessionInterface(); if (Sessions.IsValid()) { @@ -71,31 +82,43 @@ void UFindFriendSessionCallbackProxy::Activate() void UFindFriendSessionCallbackProxy::OnFindFriendSessionCompleted(int32 LocalPlayer, bool bWasSuccessful, const TArray& SessionInfo) { - IOnlineSessionPtr Sessions = Online::GetSessionInterface(GetWorld()); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("EndSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); - if (Sessions.IsValid()) - Sessions->ClearOnFindFriendSessionCompleteDelegate_Handle(LocalPlayer, FindFriendSessionCompleteDelegateHandle); + if (Helper.IsValid()) + { + IOnlineSessionPtr Sessions = Helper.OnlineSub->GetSessionInterface(); - if ( bWasSuccessful ) - { - TArray Result; + if (Sessions.IsValid()) + Sessions->ClearOnFindFriendSessionCompleteDelegate_Handle(LocalPlayer, FindFriendSessionCompleteDelegateHandle); - for (auto& Sesh : SessionInfo) + if (bWasSuccessful) { - if (Sesh.IsValid()) + TArray Result; + + for (auto& Sesh : SessionInfo) { - FBlueprintSessionResult BSesh; - BSesh.OnlineResult = Sesh; - Result.Add(BSesh); + if (Sesh.IsValid()) + { + FBlueprintSessionResult BSesh; + BSesh.OnlineResult = Sesh; + Result.Add(BSesh); + } + } + + if (Result.Num() > 0) + OnSuccess.Broadcast(Result); + else + { + UE_LOG(AdvancedFindFriendSessionLog, Warning, TEXT("FindFriendSession Failed, returned an invalid session.")); + OnFailure.Broadcast(Result); } } - - if(Result.Num() > 0) - OnSuccess.Broadcast(Result); else { - UE_LOG(AdvancedFindFriendSessionLog, Warning, TEXT("FindFriendSession Failed, returned an invalid session.")); - OnFailure.Broadcast(Result); + UE_LOG(AdvancedFindFriendSessionLog, Warning, TEXT("FindFriendSession Failed")); + TArray EmptyResult; + OnFailure.Broadcast(EmptyResult); } } else diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/FindSessionsCallbackProxyAdvanced.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/FindSessionsCallbackProxyAdvanced.cpp index 56bb813..16f3721 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/FindSessionsCallbackProxyAdvanced.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/FindSessionsCallbackProxyAdvanced.cpp @@ -35,7 +35,7 @@ UFindSessionsCallbackProxyAdvanced* UFindSessionsCallbackProxyAdvanced::FindSess void UFindSessionsCallbackProxyAdvanced::Activate() { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("FindSessions"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("FindSessions"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); if (Helper.IsValid()) @@ -172,9 +172,16 @@ void UFindSessionsCallbackProxyAdvanced::Activate() void UFindSessionsCallbackProxyAdvanced::OnCompleted(bool bSuccess) { - FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("FindSessionsCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("FindSessionsCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); + if (!Helper.IsValid()) + { + // Fail immediately + OnFailure.Broadcast(SessionSearchResults); + return; + } + if (!bRunSecondSearch && Helper.IsValid()) { auto Sessions = Helper.OnlineSub->GetSessionInterface(); diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/GetFriendsCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/GetFriendsCallbackProxy.cpp index 80fc481..8886fef 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/GetFriendsCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/GetFriendsCallbackProxy.cpp @@ -2,6 +2,7 @@ #include "GetFriendsCallbackProxy.h" #include "Online.h" +#include "Interfaces/OnlineFriendsInterface.h" #include "Interfaces/OnlinePresenceInterface.h" ////////////////////////////////////////////////////////////////////////// @@ -33,18 +34,23 @@ void UGetFriendsCallbackProxy::Activate() return; } - IOnlineFriendsPtr Friends = Online::GetFriendsInterface(); - if (Friends.IsValid()) - { - ULocalPlayer* Player = Cast(PlayerControllerWeakPtr->Player); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetFriends"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); - Friends->ReadFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Default)), FriendListReadCompleteDelegate); - return; + if (Helper.IsValid()) + { + IOnlineFriendsPtr Friends = Helper.OnlineSub->GetFriendsInterface(); + if (Friends.IsValid()) + { + ULocalPlayer* Player = Cast(PlayerControllerWeakPtr->Player); + + Friends->ReadFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Default)), FriendListReadCompleteDelegate); + return; + } } // Fail immediately TArray EmptyArray; - OnFailure.Broadcast(EmptyArray); } @@ -52,7 +58,17 @@ void UGetFriendsCallbackProxy::OnReadFriendsListCompleted(int32 LocalUserNum, bo { if (bWasSuccessful) { - IOnlineFriendsPtr Friends = Online::GetFriendsInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetFriends"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + Helper.QueryIDFromPlayerController(PlayerControllerWeakPtr.Get()); + + if (!Helper.IsValid()) + { + TArray EmptyArray; + OnFailure.Broadcast(EmptyArray); + return; + } + + auto Friends = Helper.OnlineSub->GetFriendsInterface(); if (Friends.IsValid()) { // Not actually needed anymore, plus was not being validated and causing a crash diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/GetRecentPlayersCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/GetRecentPlayersCallbackProxy.cpp index 8eb3a3d..84bdcec 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/GetRecentPlayersCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/GetRecentPlayersCallbackProxy.cpp @@ -32,7 +32,16 @@ void UGetRecentPlayersCallbackProxy::Activate() return; } - IOnlineFriendsPtr Friends = Online::GetFriendsInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetRecentPlayers"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + + if (!Helper.OnlineSub) + { + TArray EmptyArray; + OnFailure.Broadcast(EmptyArray); + return; + } + + IOnlineFriendsPtr Friends = Helper.OnlineSub->GetFriendsInterface(); if (Friends.IsValid()) { DelegateHandle = Friends->AddOnQueryRecentPlayersCompleteDelegate_Handle(QueryRecentPlayersCompleteDelegate); @@ -49,7 +58,16 @@ void UGetRecentPlayersCallbackProxy::Activate() void UGetRecentPlayersCallbackProxy::OnQueryRecentPlayersCompleted(const FUniqueNetId &UserID, const FString &Namespace, bool bWasSuccessful, const FString& ErrorString) { - IOnlineFriendsPtr Friends = Online::GetFriendsInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetRecentPlayers"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + + if (!Helper.OnlineSub) + { + TArray EmptyArray; + OnFailure.Broadcast(EmptyArray); + return; + } + + IOnlineFriendsPtr Friends = Helper.OnlineSub->GetFriendsInterface(); if (Friends.IsValid()) Friends->ClearOnQueryRecentPlayersCompleteDelegate_Handle(DelegateHandle); diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/GetUserPrivilegeCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/GetUserPrivilegeCallbackProxy.cpp index cec618f..7b1ef39 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/GetUserPrivilegeCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/GetUserPrivilegeCallbackProxy.cpp @@ -23,7 +23,14 @@ UGetUserPrivilegeCallbackProxy* UGetUserPrivilegeCallbackProxy::GetUserPrivilege void UGetUserPrivilegeCallbackProxy::Activate() { - auto Identity = Online::GetIdentityInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetUserPrivilege"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + + if (!Helper.OnlineSub) + { + OnFailure.Broadcast(); + return; + } + auto Identity = Helper.OnlineSub->GetIdentityInterface(); if (Identity.IsValid()) { diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/LoginUserCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/LoginUserCallbackProxy.cpp index 3bb211d..584edc5 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/LoginUserCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/LoginUserCallbackProxy.cpp @@ -41,8 +41,15 @@ void ULoginUserCallbackProxy::Activate() return; } - auto Identity = Online::GetIdentityInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("LoginUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + if (!Helper.OnlineSub) + { + OnFailure.Broadcast(); + return; + } + + auto Identity = Helper.OnlineSub->GetIdentityInterface(); if (Identity.IsValid()) { // Fallback to default AuthType if nothing is specified @@ -70,8 +77,15 @@ void ULoginUserCallbackProxy::OnCompleted(int32 LocalUserNum, bool bWasSuccessfu if (Player) { - auto Identity = Online::GetIdentityInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("GetUserPrivilege"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + if (!Helper.OnlineSub) + { + OnFailure.Broadcast(); + return; + } + + auto Identity = Helper.OnlineSub->GetIdentityInterface(); if (Identity.IsValid()) { Identity->ClearOnLoginCompleteDelegate_Handle(Player->GetControllerId(), DelegateHandle); diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/LogoutUserCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/LogoutUserCallbackProxy.cpp index 29b1b53..07bc666 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/LogoutUserCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/LogoutUserCallbackProxy.cpp @@ -30,7 +30,6 @@ void ULogoutUserCallbackProxy::Activate() return; } - ULocalPlayer* Player = Cast(PlayerControllerWeakPtr->Player); if (!Player) @@ -39,7 +38,14 @@ void ULogoutUserCallbackProxy::Activate() return; } - auto Identity = Online::GetIdentityInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("LogoutUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + + if (!Helper.OnlineSub) + { + OnFailure.Broadcast(); + return; + } + auto Identity = Helper.OnlineSub->GetIdentityInterface(); if (Identity.IsValid()) { @@ -61,7 +67,14 @@ void ULogoutUserCallbackProxy::OnCompleted(int LocalUserNum, bool bWasSuccessful if (Player) { - auto Identity = Online::GetIdentityInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("LogoutUser"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + + if (!Helper.OnlineSub) + { + OnFailure.Broadcast(); + return; + } + auto Identity = Helper.OnlineSub->GetIdentityInterface(); if (Identity.IsValid()) { diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/SendFriendInviteCallbackProxy.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/SendFriendInviteCallbackProxy.cpp index 71fed1e..7c407c4 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/SendFriendInviteCallbackProxy.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/SendFriendInviteCallbackProxy.cpp @@ -40,7 +40,15 @@ void USendFriendInviteCallbackProxy::Activate() return; } - IOnlineFriendsPtr Friends = Online::GetFriendsInterface(); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("SendFriendInvite"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); + + if (!Helper.OnlineSub) + { + OnFailure.Broadcast(); + return; + } + + auto Friends = Helper.OnlineSub->GetFriendsInterface(); if (Friends.IsValid()) { ULocalPlayer* Player = Cast(PlayerControllerWeakPtr->Player); diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/StartSessionCallbackProxyAdvanced.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/StartSessionCallbackProxyAdvanced.cpp index 3831384..d41e428 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/StartSessionCallbackProxyAdvanced.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/StartSessionCallbackProxyAdvanced.cpp @@ -7,7 +7,7 @@ UStartSessionCallbackProxyAdvanced::UStartSessionCallbackProxyAdvanced(const FOb } UStartSessionCallbackProxyAdvanced* UStartSessionCallbackProxyAdvanced::StartAdvancedSession( - const UObject* WorldContextObject) + UObject* WorldContextObject) { UStartSessionCallbackProxyAdvanced* Proxy = NewObject(); Proxy->WorldContextObject = WorldContextObject; @@ -16,9 +16,7 @@ UStartSessionCallbackProxyAdvanced* UStartSessionCallbackProxyAdvanced::StartAdv void UStartSessionCallbackProxyAdvanced::Activate() { - const FOnlineSubsystemBPCallHelperAdvanced Helper( - TEXT("StartSession"), - GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("StartSession"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); if (Helper.OnlineSub != nullptr) { @@ -38,13 +36,11 @@ void UStartSessionCallbackProxyAdvanced::Activate() void UStartSessionCallbackProxyAdvanced::OnStartCompleted(FName SessionName, bool bWasSuccessful) { - const FOnlineSubsystemBPCallHelperAdvanced Helper( - TEXT("StartSessionCallback"), - GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("StartSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); if (Helper.OnlineSub != nullptr) { - const auto Sessions = Helper.OnlineSub->GetSessionInterface(); + auto Sessions = Helper.OnlineSub->GetSessionInterface(); if (Sessions.IsValid()) { Sessions->ClearOnStartSessionCompleteDelegate_Handle(StartCompleteDelegateHandle); diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/UpdateSessionCallbackProxyAdvanced.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/UpdateSessionCallbackProxyAdvanced.cpp index 7fa1ea0..31aa9d9 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/UpdateSessionCallbackProxyAdvanced.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/UpdateSessionCallbackProxyAdvanced.cpp @@ -30,7 +30,7 @@ UUpdateSessionCallbackProxyAdvanced* UUpdateSessionCallbackProxyAdvanced::Update void UUpdateSessionCallbackProxyAdvanced::Activate() { - const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSession"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSession"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); if (Helper.OnlineSub != nullptr) { @@ -105,7 +105,7 @@ void UUpdateSessionCallbackProxyAdvanced::Activate() void UUpdateSessionCallbackProxyAdvanced::OnUpdateCompleted(FName SessionName, bool bWasSuccessful) { - const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject.Get(), EGetWorldErrorMode::LogAndReturnNull)); if (Helper.OnlineSub != nullptr) {