diff --git a/AdvancedSessions/Source/AdvancedSessions/Private/UpdateSessionCallbackProxyAdvanced.cpp b/AdvancedSessions/Source/AdvancedSessions/Private/UpdateSessionCallbackProxyAdvanced.cpp index 90c8a7f..0155c64 100644 --- a/AdvancedSessions/Source/AdvancedSessions/Private/UpdateSessionCallbackProxyAdvanced.cpp +++ b/AdvancedSessions/Source/AdvancedSessions/Private/UpdateSessionCallbackProxyAdvanced.cpp @@ -29,70 +29,73 @@ UUpdateSessionCallbackProxyAdvanced* UUpdateSessionCallbackProxyAdvanced::Update void UUpdateSessionCallbackProxyAdvanced::Activate() { + const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSession"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); - IOnlineSessionPtr Sessions = Online::GetSessionInterface(GetWorld()); - - if (Sessions.IsValid()) + if (Helper.OnlineSub != nullptr) { - if (Sessions->GetNumSessions() < 1) + const auto Sessions = Helper.OnlineSub->GetSessionInterface(); + if (Sessions.IsValid()) { - OnFailure.Broadcast(); - GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("NO REGISTERED SESSIONS!")); + if (Sessions->GetNumSessions() < 1) + { + OnFailure.Broadcast(); + GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("NO REGISTERED SESSIONS!")); + return; + } + + // This gets the actual session itself + //FNamedOnlineSession * curSession = Sessions->GetNamedSession(NAME_GameSession); + FOnlineSessionSettings* Settings = Sessions->GetSessionSettings(NAME_GameSession); + + if (!Settings) + { + // Fail immediately + OnFailure.Broadcast(); + return; + } + + OnUpdateSessionCompleteDelegateHandle = Sessions->AddOnUpdateSessionCompleteDelegate_Handle(OnUpdateSessionCompleteDelegate); + + // FOnlineSessionSettings Settings; + //Settings->BuildUniqueId = GetBuildUniqueId(); + Settings->NumPublicConnections = NumPublicConnections; + Settings->NumPrivateConnections = NumPrivateConnections; + //Settings->bShouldAdvertise = true; + Settings->bAllowJoinInProgress = bAllowJoinInProgress; + Settings->bIsLANMatch = bUseLAN; + //Settings->bUsesPresence = true; + //Settings->bAllowJoinViaPresence = true; + Settings->bAllowInvites = bAllowInvites; + Settings->bAllowJoinInProgress = bAllowJoinInProgress; + Settings->bIsDedicated = bDedicatedServer; + + FOnlineSessionSetting * fSetting = NULL; + FOnlineSessionSetting ExtraSetting; + for (int i = 0; i < ExtraSettings.Num(); i++) + { + fSetting = Settings->Settings.Find(ExtraSettings[i].Key); + + if (fSetting) + { + fSetting->Data = ExtraSettings[i].Data; + } + else + { + ExtraSetting.Data = ExtraSettings[i].Data; + ExtraSetting.AdvertisementType = EOnlineDataAdvertisementType::ViaOnlineService; + Settings->Settings.Add(ExtraSettings[i].Key, ExtraSetting); + } + } + + Sessions->UpdateSession(NAME_GameSession, *Settings, bRefreshOnlineData); + + // OnUpdateCompleted will get called, nothing more to do now return; } - - // This gets the actual session itself - //FNamedOnlineSession * curSession = Sessions->GetNamedSession(NAME_GameSession); - FOnlineSessionSettings* Settings = Sessions->GetSessionSettings(NAME_GameSession); - - if (!Settings) + else { - // Fail immediately - OnFailure.Broadcast(); - return; + FFrame::KismetExecutionMessage(TEXT("Sessions not supported by Online Subsystem"), ELogVerbosity::Warning); } - - OnUpdateSessionCompleteDelegateHandle = Sessions->AddOnUpdateSessionCompleteDelegate_Handle(OnUpdateSessionCompleteDelegate); - - // FOnlineSessionSettings Settings; - //Settings->BuildUniqueId = GetBuildUniqueId(); - Settings->NumPublicConnections = NumPublicConnections; - Settings->NumPrivateConnections = NumPrivateConnections; - //Settings->bShouldAdvertise = true; - Settings->bAllowJoinInProgress = bAllowJoinInProgress; - Settings->bIsLANMatch = bUseLAN; - //Settings->bUsesPresence = true; - //Settings->bAllowJoinViaPresence = true; - Settings->bAllowInvites = bAllowInvites; - Settings->bAllowJoinInProgress = bAllowJoinInProgress; - Settings->bIsDedicated = bDedicatedServer; - - FOnlineSessionSetting * fSetting = NULL; - FOnlineSessionSetting ExtraSetting; - for (int i = 0; i < ExtraSettings.Num(); i++) - { - fSetting = Settings->Settings.Find(ExtraSettings[i].Key); - - if (fSetting) - { - fSetting->Data = ExtraSettings[i].Data; - } - else - { - ExtraSetting.Data = ExtraSettings[i].Data; - ExtraSetting.AdvertisementType = EOnlineDataAdvertisementType::ViaOnlineService; - Settings->Settings.Add(ExtraSettings[i].Key, ExtraSetting); - } - } - - Sessions->UpdateSession(NAME_GameSession, *Settings, bRefreshOnlineData); - - // OnUpdateCompleted will get called, nothing more to do now - return; - } - else - { - FFrame::KismetExecutionMessage(TEXT("Sessions not supported by Online Subsystem"), ELogVerbosity::Warning); } // Fail immediately OnFailure.Broadcast(); @@ -101,15 +104,20 @@ void UUpdateSessionCallbackProxyAdvanced::Activate() void UUpdateSessionCallbackProxyAdvanced::OnUpdateCompleted(FName SessionName, bool bWasSuccessful) { - IOnlineSessionPtr Sessions = Online::GetSessionInterface(GetWorld()); - if (Sessions.IsValid()) + const FOnlineSubsystemBPCallHelperAdvanced Helper(TEXT("UpdateSessionCallback"), GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull)); + + if (Helper.OnlineSub != nullptr) { - Sessions->ClearOnUpdateSessionCompleteDelegate_Handle(OnUpdateSessionCompleteDelegateHandle); - - if (bWasSuccessful) + const auto Sessions = Helper.OnlineSub->GetSessionInterface(); + if (Sessions.IsValid()) { - OnSuccess.Broadcast(); - return; + Sessions->ClearOnUpdateSessionCompleteDelegate_Handle(OnUpdateSessionCompleteDelegateHandle); + + if (bWasSuccessful) + { + OnSuccess.Broadcast(); + return; + } } }