void UShowLoginUICallbackProxy::Activate() { if (!PlayerControllerWeakPtr.IsValid()) { FFrame::KismetExecutionMessage(TEXT("A player controller must be provided in order to show the external login UI."), ELogVerbosity::Warning); OnFailure.Broadcast(PlayerControllerWeakPtr.Get()); return; } FOnlineSubsystemBPCallHelper Helper(TEXT("ShowLoginUI"), GEngine->GetWorldFromContextObject(WorldContextObject)); if (Helper.OnlineSub == nullptr) { OnFailure.Broadcast(PlayerControllerWeakPtr.Get()); return; } IOnlineExternalUIPtr OnlineExternalUI = Helper.OnlineSub->GetExternalUIInterface(); if (!OnlineExternalUI.IsValid()) { FFrame::KismetExecutionMessage(TEXT("External UI not supported by the current online subsystem"), ELogVerbosity::Warning); OnFailure.Broadcast(PlayerControllerWeakPtr.Get()); return; } const ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(PlayerControllerWeakPtr->Player); if (LocalPlayer == nullptr) { FFrame::KismetExecutionMessage(TEXT("Can only show login UI for local players"), ELogVerbosity::Warning); OnFailure.Broadcast(PlayerControllerWeakPtr.Get()); return; } const bool bWaitForDelegate = OnlineExternalUI->ShowLoginUI(LocalPlayer->GetControllerId(), false, IOnlineExternalUI::FOnLoginUIClosedDelegate::CreateUObject(this, &UShowLoginUICallbackProxy::OnShowLoginUICompleted)); if (!bWaitForDelegate) { FFrame::KismetExecutionMessage(TEXT("The online subsystem couldn't show its login UI"), ELogVerbosity::Log); OnFailure.Broadcast(PlayerControllerWeakPtr.Get()); } }
UtrnetDemoGameInstance::UtrnetDemoGameInstance(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) , isLoading_(false) , hasExternalLoginUI_(false) , isLogin_(true){ /** Bind function for CREATING a Session */ OnCreateSessionCompleteDelegate = FOnCreateSessionCompleteDelegate::CreateUObject(this, &UtrnetDemoGameInstance::OnCreateSessionComplete); OnStartSessionCompleteDelegate = FOnStartSessionCompleteDelegate::CreateUObject(this, &UtrnetDemoGameInstance::OnStartOnlineGameComplete); /** Bind function for FINDING a Session */ OnFindSessionsCompleteDelegate = FOnFindSessionsCompleteDelegate::CreateUObject(this, &UtrnetDemoGameInstance::OnFindSessionsComplete); /** Bind function for JOINING a Session */ OnJoinSessionCompleteDelegate = FOnJoinSessionCompleteDelegate::CreateUObject(this, &UtrnetDemoGameInstance::OnJoinSessionComplete); /** Bind function for DESTROYING a Session */ OnDestroySessionCompleteDelegate = FOnDestroySessionCompleteDelegate::CreateUObject(this, &UtrnetDemoGameInstance::OnDestroySessionComplete); IOnlineSubsystem* const OnlineSub = IOnlineSubsystem::Get(); IOnlineExternalUIPtr externalUI = OnlineSub->GetExternalUIInterface(); hasExternalLoginUI_ = externalUI.IsValid(); UE_LOG(LogInit, Warning, TEXT("hasExternalLoginUI_: %s"), hasExternalLoginUI_ ? TEXT("true"):TEXT("false")); if (hasExternalLoginUI_) { isLogin_ = false; } }