本文整理汇总了C++中IOnlineSessionPtr::GetSessionState方法的典型用法代码示例。如果您正苦于以下问题:C++ IOnlineSessionPtr::GetSessionState方法的具体用法?C++ IOnlineSessionPtr::GetSessionState怎么用?C++ IOnlineSessionPtr::GetSessionState使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IOnlineSessionPtr
的用法示例。
在下文中一共展示了IOnlineSessionPtr::GetSessionState方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: onClickEndGame
void AFPSGPlayerController::onClickEndGame() const
{
//Make sure it is the server calling the function
if (Role < ROLE_Authority && GetNetMode() == NM_Client) return;
//GEngine->AddOnScreenDebugMessage(-1, 40.0f, FColor::Cyan, "AFPSGPlayerController::onClickEndGame");
IOnlineSubsystem* onlineSubsystem = IOnlineSubsystem::Get();
IOnlineSessionPtr sessions = onlineSubsystem != NULL ? onlineSubsystem->GetSessionInterface() : NULL;
if (sessions.IsValid())
{
UWorld* world = GetWorld();
AFPSGGameState* gameState = world != NULL ? world->GetGameState<AFPSGGameState>() : NULL;
if (gameState != NULL)
{
//Retrieve the session state and match state
EOnlineSessionState::Type sessionState = sessions->GetSessionState(GameSessionName);
FName matchState = gameState->GetMatchState();
//Only attempt to end the game if both the session and match are in progress
if (sessionState == EOnlineSessionState::Type::InProgress && matchState == MatchState::InProgress)
{
gameState->onClickEndGame();
}
}
}
}
示例2: onClickQuitToMainMenu
void AFPSGPlayerController::onClickQuitToMainMenu()
{
//GEngine->AddOnScreenDebugMessage(-1, 40.0f, FColor::Cyan, "AFPSGPlayerController::onClickQuitToMainMenu");
IOnlineSubsystem* onlineSubsystem = IOnlineSubsystem::Get();
IOnlineSessionPtr sessions = onlineSubsystem != NULL ? onlineSubsystem->GetSessionInterface() : NULL;
if (!sessions.IsValid()) return;
UWorld* world = GetWorld();
AFPSGGameState* gameState = world != NULL ? world->GetGameState<AFPSGGameState>() : NULL;
if (gameState != NULL)
{
//Retrieve the session state and match state
FName matchState = gameState->GetMatchState();
EOnlineSessionState::Type sessionState = EOnlineSessionState::Type::NoSession;
if (Role == ROLE_Authority && GetNetMode() < NM_Client)
{
sessionState = sessions->GetSessionState(GameSessionName);
}
else
{
sessionState = PlayerState != NULL ? sessions->GetSessionState(PlayerState->SessionName) : EOnlineSessionState::Type::NoSession;
}
//Only attempt to end the game if both the session and match are in progress
if (sessionState == EOnlineSessionState::Type::InProgress && matchState == MatchState::InProgress)
{
//Check if it is a server or client that wants to quit to the main menu
if (Role == ROLE_Authority && GetNetMode() < NM_Client)
{
gameState->onClickQuitToMainMenu();
}
else
{
//Client will end and destroy its session locally, and then return to the main menu
clientEndSession();
clientOnlineMatchHasEnded(EEndMatchReason::NONE);
clientDestroySession();
ClientReturnToMainMenu_Implementation("");
}
}
}
}
示例3: GetSessionState
void UAdvancedSessionsLibrary::GetSessionState(TEnumAsByte<EBPOnlineSessionState::Type> &SessionState)
{
IOnlineSessionPtr SessionInterface = Online::GetSessionInterface();
if (!SessionInterface.IsValid())
{
UE_LOG(AdvancedSessionsLog, Warning, TEXT("GetSessionState couldn't get the session interface!"));
return;
}
SessionState = ((EBPOnlineSessionState::Type)SessionInterface->GetSessionState(GameSessionName));
}
示例4: CleanupSessionOnReturnToMenu
/** Ends and/or destroys game session */
void AShooterPlayerController::CleanupSessionOnReturnToMenu()
{
bool bPendingOnlineOp = false;
// end online game and then destroy it
AShooterPlayerState* ShooterPlayerState = Cast<AShooterPlayerState>(PlayerState);
if (ShooterPlayerState)
{
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
if (OnlineSub)
{
IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface();
if (Sessions.IsValid())
{
EOnlineSessionState::Type SessionState = Sessions->GetSessionState(ShooterPlayerState->SessionName);
UE_LOG(LogOnline, Log, TEXT("Session %s is '%s'"), *ShooterPlayerState->SessionName.ToString(), EOnlineSessionState::ToString(SessionState));
if (EOnlineSessionState::InProgress == SessionState)
{
UE_LOG(LogOnline, Log, TEXT("Ending session %s on return to main menu"), *ShooterPlayerState->SessionName.ToString() );
Sessions->AddOnEndSessionCompleteDelegate(OnEndSessionCompleteDelegate);
Sessions->EndSession(ShooterPlayerState->SessionName);
bPendingOnlineOp = true;
}
else if (EOnlineSessionState::Ending == SessionState)
{
UE_LOG(LogOnline, Log, TEXT("Waiting for session %s to end on return to main menu"), *ShooterPlayerState->SessionName.ToString() );
Sessions->AddOnEndSessionCompleteDelegate(OnEndSessionCompleteDelegate);
bPendingOnlineOp = true;
}
else if (EOnlineSessionState::Ended == SessionState ||
EOnlineSessionState::Pending == SessionState)
{
UE_LOG(LogOnline, Log, TEXT("Destroying session %s on return to main menu"), *ShooterPlayerState->SessionName.ToString() );
Sessions->AddOnDestroySessionCompleteDelegate(OnDestroySessionCompleteDelegate);
Sessions->DestroySession(ShooterPlayerState->SessionName);
bPendingOnlineOp = true;
}
else if (EOnlineSessionState::Starting == SessionState)
{
UE_LOG(LogOnline, Log, TEXT("Waiting for session %s to start, and then we will end it to return to main menu"), *ShooterPlayerState->SessionName.ToString() );
Sessions->AddOnStartSessionCompleteDelegate(OnStartSessionCompleteEndItDelegate);
bPendingOnlineOp = true;
}
}
}
}
if (!bPendingOnlineOp)
{
GEngine->HandleDisconnect(GetWorld(), GetWorld()->GetNetDriver());
}
}
示例5: Tick
void UUModGameInstance::Tick(float DeltaTime)
{
if (DelayedRunMap) {
ticks++;
if (ticks >= 5) {
if (IsLAN) {
FString opt = FString("game=") + AUModGameMode::StaticClass()->GetPathName() + FString("?listen?bIsLanMatch");
UGameplayStatics::OpenLevel(GetWorld(), FName(*CurSessionMapName), true, opt);
} else {
FString opt = FString("game=") + AUModGameMode::StaticClass()->GetPathName() + FString("?listen");
UGameplayStatics::OpenLevel(GetWorld(), FName(*CurSessionMapName), true, opt);
}
IsLAN = false;
CurSessionMapName = NULL;
DelayedRunMap = false;
ticks = 0;
}
} else if (DelayedServerConnect) {
ticks++;
if (ticks >= 5) {
ULocalPlayer* const Player = GetFirstGamePlayer();
Player->PlayerController->ClientTravel(ConnectIP, ETravelType::TRAVEL_Absolute);
ticks = 0;
}
}
if (!CurSessionName.IsEmpty()) {
IOnlineSubsystem* const OnlineSub = IOnlineSubsystem::Get();
IOnlineSessionPtr Sessions = NULL;
if (OnlineSub == NULL) {
return;
}
Sessions = OnlineSub->GetSessionInterface();
if (!Sessions.IsValid()) {
return;
}
EOnlineSessionState::Type state = Sessions->GetSessionState(*CurSessionName);
if (state == EOnlineSessionState::Ended) {
Disconnect(FString("Lost Connection..."));
}
}
}
示例6: JoinSession
void UOnlineSessionClient::JoinSession(FName SessionName, const FOnlineSessionSearchResult& SearchResult)
{
// Clean up existing sessions if applicable
IOnlineSessionPtr SessionInt = GetSessionInt();
if (SessionInt.IsValid())
{
EOnlineSessionState::Type SessionState = SessionInt->GetSessionState(SessionName);
if (SessionState != EOnlineSessionState::NoSession)
{
CachedSessionResult = SearchResult;
OnEndForJoinSessionCompleteDelegateHandle = EndExistingSession_Impl(SessionName, OnEndForJoinSessionCompleteDelegate);
}
else
{
GetGameInstance()->JoinSession(GetGameInstance()->GetFirstGamePlayer(), SearchResult);
}
}
}