Beispiel #1
0
	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();
	}
}