virtual TSharedPtr<const FUniqueNetId> GetGameSessionId() const override { if (GetOnlineIdentity().IsValid() && GetSessionInterface().IsValid()) { const FNamedOnlineSession* GameSession = GetSessionInterface()->GetNamedSession(GameSessionName); if (GameSession != nullptr) { TSharedPtr<FOnlineSessionInfo> UserSessionInfo = GameSession->SessionInfo; if (UserSessionInfo.IsValid()) { return GetOnlineIdentity()->CreateUniquePlayerId(UserSessionInfo->GetSessionId().ToString()); } } } return nullptr; }
bool FOnlineSubsystemImpl::HandleSessionExecCommands(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar) { bool bWasHandled = false; if (FParse::Command(&Cmd, TEXT("DUMPSESSIONS"))) { IOnlineSessionPtr SessionsInt = GetSessionInterface(); if (SessionsInt.IsValid()) { SessionsInt->DumpSessionState(); } bWasHandled = true; } return bWasHandled; }
void UGameInstance::Shutdown() { ReceiveShutdown(); const auto OnlineSub = IOnlineSubsystem::Get(); if (OnlineSub != nullptr) { IOnlineSessionPtr SessionInt = OnlineSub->GetSessionInterface(); if (SessionInt.IsValid()) { SessionInt->ClearOnSessionUserInviteAcceptedDelegate_Handle(OnSessionUserInviteAcceptedDelegateHandle); } } // Clear the world context pointer to prevent further access. WorldContext = nullptr; }
void UGameInstance::Init() { ReceiveInit(); const auto OnlineSub = IOnlineSubsystem::Get(); if (OnlineSub != nullptr) { IOnlineSessionPtr SessionInt = OnlineSub->GetSessionInterface(); if (SessionInt.IsValid()) { SessionInt->AddOnSessionUserInviteAcceptedDelegate_Handle(FOnSessionUserInviteAcceptedDelegate::CreateUObject(this, &UGameInstance::HandleSessionUserInviteAccepted)); } } UClass* SpawnClass = GetOnlineSessionClass(); OnlineSession = NewObject<UOnlineSession>(this, SpawnClass); if (OnlineSession) { OnlineSession->RegisterOnlineDelegates(); } }