void URadeGameInstance::OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result) { // Get the OnlineSubsystem we want to work with IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get(); if (OnlineSub) { // Get SessionInterface from the OnlineSubsystem IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface(); if (Sessions.IsValid()) { // Clear the Delegate again Sessions->ClearOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegateHandle); // Get the first local PlayerController, so we can call "ClientTravel" to get to the Server Map // This is something the Blueprint Node "Join Session" does automatically! APlayerController * const PlayerController = GetFirstLocalPlayerController(); // We need a FString to use ClientTravel and we can let the SessionInterface contruct such a // String for us by giving him the SessionName and an empty String. We want to do this, because // Every OnlineSubsystem uses different TravelURLs FString TravelURL; if (PlayerController && Sessions->GetResolvedConnectString(SessionName, TravelURL)) { // Finally call the ClienTravel. If you want, you could print the TravelURL to see // how it really looks like PlayerController->ClientTravel(TravelURL, ETravelType::TRAVEL_Absolute); } } } }
bool APartyBeaconClient::RequestReservation(const FOnlineSessionSearchResult& DesiredHost, const FUniqueNetIdRepl& RequestingPartyLeader, const TArray<FPlayerReservation>& PartyMembers) { bool bSuccess = false; if (DesiredHost.IsValid()) { UWorld* World = GetWorld(); IOnlineSubsystem* OnlineSub = Online::GetSubsystem(World); if (OnlineSub) { IOnlineSessionPtr SessionInt = OnlineSub->GetSessionInterface(); if (SessionInt.IsValid()) { FString ConnectInfo; if (SessionInt->GetResolvedConnectString(DesiredHost, BeaconPort, ConnectInfo)) { FString SessionId = DesiredHost.Session.SessionInfo->GetSessionId().ToString(); return RequestReservation(ConnectInfo, SessionId, RequestingPartyLeader, PartyMembers); } } } } if (!bSuccess) { OnFailure(); } return bSuccess; }
void UtrnetDemoGameInstance::OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result) { isLoading_ = false; GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, FString::Printf(TEXT("OnJoinSessionComplete %s, %d"), *SessionName.ToString(), static_cast<int32>(Result))); // Get SessionInterface from the OnlineSubsystem IOnlineSessionPtr Sessions = GetSession(); if (!Sessions.IsValid()) { return; } // Clear the Delegate again Sessions->ClearOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegateHandle); // Get the first local PlayerController, so we can call "ClientTravel" to get to the Server Map // This is something the Blueprint Node "Join Session" does automatically! APlayerController * const PlayerController = GetFirstLocalPlayerController(); // We need a FString to use ClientTravel and we can let the SessionInterface contruct such a // String for us by giving him the SessionName and an empty String. We want to do this, because // Every OnlineSubsystem uses different TravelURLs FString TravelURL; if (PlayerController && Sessions->GetResolvedConnectString(SessionName, TravelURL)) { // Finally call the ClienTravel. If you want, you could print the TravelURL to see // how it really looks like PlayerController->ClientTravel(TravelURL, ETravelType::TRAVEL_Absolute); } }
void UOnlineSessionClient::OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type Result) { UE_LOG(LogOnline, Verbose, TEXT("OnJoinSessionComplete %s bSuccess: %d"), *SessionName.ToString(), static_cast<int32>(Result)); IOnlineSessionPtr SessionInt = GetSessionInt(); if (SessionInt.IsValid()) { SessionInt->ClearOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegateHandle); if (Result == EOnJoinSessionCompleteResult::Success) { FString URL; if (SessionInt->GetResolvedConnectString(SessionName, URL)) { APlayerController* PC = GetGameInstance()->GetFirstLocalPlayerController(GetWorld()); if (PC) { if (bIsFromInvite) { URL += TEXT("?bIsFromInvite"); bIsFromInvite = false; } PC->ClientTravel(URL, TRAVEL_Absolute); } } else { UE_LOG(LogOnline, Warning, TEXT("Failed to join session %s"), *SessionName.ToString()); } } } }