本文整理汇总了C++中IOnlineSubsystem类的典型用法代码示例。如果您正苦于以下问题:C++ IOnlineSubsystem类的具体用法?C++ IOnlineSubsystem怎么用?C++ IOnlineSubsystem使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了IOnlineSubsystem类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ClientStartOnlineGame_Implementation
/** Starts the online game using the session name in the PlayerState */
void AShooterPlayerController::ClientStartOnlineGame_Implementation()
{
if (!IsPrimaryPlayer())
return;
AShooterPlayerState* ShooterPlayerState = Cast<AShooterPlayerState>(PlayerState);
if (ShooterPlayerState)
{
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
if (OnlineSub)
{
IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface();
if (Sessions.IsValid())
{
UE_LOG(LogOnline, Log, TEXT("Starting session %s on client"), *ShooterPlayerState->SessionName.ToString() );
Sessions->StartSession(ShooterPlayerState->SessionName);
}
}
}
else
{
// Keep retrying until player state is replicated
GetWorld()->GetTimerManager().SetTimer(FTimerDelegate::CreateUObject(this, &AShooterPlayerController::ClientStartOnlineGame_Implementation), 0.2f, false);
}
}
示例2: GetLocalPlayer
void APuzzlePresetPlayerController::OnEndTurn()
{
/*UPuzzlePresetGameInstance* ppgi = Cast<UPuzzlePresetGameInstance>(GetGameInstance());
ULocalPlayer* LocalPlayer = GetLocalPlayer();
ppgi->HostSession(MakeShareable(LocalPlayer->GetControllerId()),)
return;*/
IOnlineSubsystem* ion = IOnlineSubsystem::Get(FName("Steam"));
if (ion != nullptr)
{
ULocalPlayer* LocalPlayer = GetLocalPlayer();
if (LocalPlayer && LocalPlayer->GetControllerId() != -1)
{
UE_LOG(LogTemp, Warning, TEXT("steam user name: %s"), *PlayerState->PlayerName);
uint8 status = ion->GetIdentityInterface()->GetLoginStatus(LocalPlayer->GetControllerId());
UE_LOG(LogTemp, Warning, TEXT("steam user status: %d"), status);
}
/*if (ion->InitSteamworksClient(false, 480))
{
UE_LOG(LogTemp, Warning, TEXT("Steam API initialized succesfully!"));
}
else
{
UE_LOG(LogTemp, Warning, TEXT("Failed to initialize Steam API :("));
}*/
}
}
示例3: StartPlatformEnvironmentCheck
void UUpdateManager::StartPlatformEnvironmentCheck()
{
IOnlineSubsystem* OnlineSubConsole = IOnlineSubsystem::GetByPlatform();
if (!bPlatformEnvironmentDetected &&
OnlineSubConsole != nullptr &&
OnlineSubConsole->GetIdentityInterface().IsValid())
{
SetUpdateState(EUpdateState::DetectingPlatformEnvironment);
ULocalPlayer* LP = GetGameInstance()->GetFirstGamePlayer();
if (LP != nullptr)
{
const int32 ControllerId = LP->GetControllerId();
OnLoginConsoleCompleteHandle = OnlineSubConsole->GetIdentityInterface()->AddOnLoginCompleteDelegate_Handle(
ControllerId,
FOnLoginCompleteDelegate::CreateUObject(this, &ThisClass::PlatformEnvironmentCheck_OnLoginConsoleComplete)
);
OnlineSubConsole->GetIdentityInterface()->Login(ControllerId, FOnlineAccountCredentials());
}
}
else
{
StartHotfixCheck();
}
}
示例4: OnStartOnlineGameComplete
/**
* Delegate fired when a session start request has completed
*
* @param SessionName the name of the session this callback is for
* @param bWasSuccessful true if the async action completed without error, false if there was an error
*/
void URadeGameInstance::OnStartOnlineGameComplete(FName SessionName, bool bWasSuccessful)
{
//GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, FString::Printf(TEXT("OnStartSessionComplete %s, %d"), *SessionName.ToString(), bWasSuccessful));
// Get the Online Subsystem so we can get the Session Interface
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
if (OnlineSub)
{
// Get the Session Interface to clear the Delegate
IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface();
if (Sessions.IsValid())
{
// Clear the delegate, since we are done with this call
Sessions->ClearOnStartSessionCompleteDelegate_Handle(OnStartSessionCompleteDelegateHandle);
}
}
// If the start was successful, we can open a NewMap if we want. Make sure to use "listen" as a parameter!
if (bWasSuccessful)
{
//BattleArena
UGameplayStatics::OpenLevel(GetWorld(), *TheMapName, true, "listen");
}
}
示例5: GetWorld
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;
}
示例6: 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();
}
}
}
}
示例7: JoinSession
// Join Session
bool URadeGameInstance::JoinSession(TSharedPtr<const FUniqueNetId> UserId, FName SessionName, const FOnlineSessionSearchResult& SearchResult)
{
// Return bool
bool bSuccessful = false;
// Get OnlineSubsystem we want to work with
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
if (OnlineSub)
{
// Get SessionInterface from the OnlineSubsystem
IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface();
if (Sessions.IsValid() && UserId.IsValid())
{
// Set the Handle again
OnJoinSessionCompleteDelegateHandle = Sessions->AddOnJoinSessionCompleteDelegate_Handle(OnJoinSessionCompleteDelegate);
// Call the "JoinSession" Function with the passed "SearchResult". The "SessionSearch->SearchResults" can be used to get such a
// "FOnlineSessionSearchResult" and pass it. Pretty straight forward!
bSuccessful = Sessions->JoinSession(*UserId, SessionName, SearchResult);
}
}
return bSuccessful;
}
示例8: OnJoinSessionComplete
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);
}
}
}
}
示例9: OnCreateSessionComplete
/**
* Delegate fired when a session create request has completed
*
* @param SessionName the name of the session this callback is for
* @param bWasSuccessful true if the async action completed without error, false if there was an error
*/
void URadeGameInstance::OnCreateSessionComplete(FName SessionName, bool bWasSuccessful)
{
//GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, FString::Printf(TEXT("OnCreateSessionComplete %s, %d"), *SessionName.ToString(), bWasSuccessful));
// Get the OnlineSubsystem so we can get the Session Interface
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
if (OnlineSub)
{
// Get the Session Interface to call the StartSession function
IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface();
if (Sessions.IsValid())
{
// Clear the SessionComplete delegate handle, since we finished this call
Sessions->ClearOnCreateSessionCompleteDelegate_Handle(OnCreateSessionCompleteDelegateHandle);
if (bWasSuccessful)
{
// Set the StartSession delegate handle
OnStartSessionCompleteDelegateHandle = Sessions->AddOnStartSessionCompleteDelegate_Handle(OnStartSessionCompleteDelegate);
//printr(SessionName.ToString());
// Our StartSessionComplete delegate should get called after this
Sessions->StartSession(SessionName);
}
}
}
}
示例10: RegisterOnlineDelegates
/**
* Register all delegates needed to manage online sessions
*/
void UOnlineSessionClient::RegisterOnlineDelegates(UWorld* InWorld)
{
IOnlineSubsystem* OnlineSub = Online::GetSubsystem(InWorld);
if (OnlineSub)
{
SessionInt = OnlineSub->GetSessionInterface();
if (SessionInt.IsValid())
{
int32 ControllerId = GetControllerId();
if (ControllerId != INVALID_CONTROLLERID)
{
// Always on the lookout for invite acceptance (via actual invite or join from external ui)
OnSessionInviteAcceptedDelegate = FOnSessionInviteAcceptedDelegate::CreateUObject(this, &UOnlineSessionClient::OnSessionInviteAccepted);
SessionInt->AddOnSessionInviteAcceptedDelegate(ControllerId, OnSessionInviteAcceptedDelegate);
}
}
OnJoinSessionCompleteDelegate = FOnJoinSessionCompleteDelegate::CreateUObject(this, &UOnlineSessionClient::OnJoinSessionComplete);
OnEndForJoinSessionCompleteDelegate = FOnEndSessionCompleteDelegate::CreateUObject(this, &UOnlineSessionClient::OnEndForJoinSessionComplete);
OnDestroyForJoinSessionCompleteDelegate = FOnDestroySessionCompleteDelegate::CreateUObject(this, &UOnlineSessionClient::OnDestroyForJoinSessionComplete);
}
// Register disconnect delegate even if we don't have an online system
OnDestroyForMainMenuCompleteDelegate = FOnDestroySessionCompleteDelegate::CreateUObject(this, &UOnlineSessionClient::OnDestroyForMainMenuComplete);
}
示例11: GetMessageSanitizer
IMessageSanitizerPtr FOnlineSubsystemImpl::GetMessageSanitizer(int32 LocalUserNum, FString& OutAuthTypeToExclude) const
{
IMessageSanitizerPtr MessageSanitizer;
IOnlineSubsystem* PlatformSubsystem = IOnlineSubsystem::GetByPlatform();
if (PlatformSubsystem && PlatformSubsystem != static_cast<const IOnlineSubsystem*>(this))
{
MessageSanitizer = PlatformSubsystem->GetMessageSanitizer(LocalUserNum, OutAuthTypeToExclude);
}
return MessageSanitizer;
}
示例12: Serialize
/**
* Serialize the voice packet data to a buffer
*
* @param Ar buffer to write into
*/
void FVoicePacketImpl::Serialize(class FArchive& Ar)
{
// Make sure not to overflow the buffer by reading an invalid amount
if (Ar.IsLoading())
{
FString SenderStr;
Ar << SenderStr;
// Don't need to distinguish OSS interfaces here with world because we just want the create function below
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
IOnlineIdentityPtr IdentityInt = OnlineSub->GetIdentityInterface();
if (IdentityInt.IsValid())
{
Sender = IdentityInt->CreateUniquePlayerId(SenderStr);
}
Ar << Length;
// Verify the packet is a valid size
if (Length <= MAX_VOICE_DATA_SIZE)
{
Buffer.Empty(Length);
Buffer.AddUninitialized(Length);
Ar.Serialize(Buffer.GetData(), Length);
#if DEBUG_VOICE_PACKET_ENCODING
uint32 CRC = 0;
Ar << CRC;
if (CRC != FCrc::MemCrc32(Buffer.GetData(), Length))
{
UE_LOG(LogVoice, Warning, TEXT("CRC Mismatch in voice packet"));
Length = 0;
}
#endif
}
else
{
Length = 0;
}
}
else
{
check(Sender.IsValid());
FString SenderStr = Sender->ToString();
Ar << SenderStr;
Ar << Length;
// Always safe to save the data as the voice code prevents overwrites
Ar.Serialize(Buffer.GetData(), Length);
#if DEBUG_VOICE_PACKET_ENCODING
uint32 CRC = FCrc::MemCrc32(Buffer.GetData(), Length);
Ar << CRC;
#endif
}
}
示例13: 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());
}
}
示例14: UpdateAchievementProgress
void AShooterPlayerController::UpdateAchievementProgress( const FString& Id, float Percent )
{
ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(Player);
if (LocalPlayer)
{
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
if(OnlineSub)
{
IOnlineIdentityPtr Identity = OnlineSub->GetIdentityInterface();
if (Identity.IsValid())
{
TSharedPtr<FUniqueNetId> UserId = Identity->GetUniquePlayerId(LocalPlayer->ControllerId);
if (UserId.IsValid())
{
IOnlineAchievementsPtr Achievements = OnlineSub->GetAchievementsInterface();
if (Achievements.IsValid() && (!WriteObject.IsValid() || WriteObject->WriteState != EOnlineAsyncTaskState::InProgress))
{
WriteObject = MakeShareable(new FOnlineAchievementsWrite());
WriteObject->SetFloatStat(*Id, Percent);
FOnlineAchievementsWriteRef WriteObjectRef = WriteObject.ToSharedRef();
Achievements->WriteAchievements(*UserId.Get(), WriteObjectRef);
}
else
{
UE_LOG(LogOnline, Warning, TEXT("No valid achievement interface or another write is in progress."));
}
}
else
{
UE_LOG(LogOnline, Warning, TEXT("No valid user id for this controller."));
}
}
else
{
UE_LOG(LogOnline, Warning, TEXT("No valid identity interface."));
}
}
else
{
UE_LOG(LogOnline, Warning, TEXT("No default online subsystem."));
}
}
else
{
UE_LOG(LogOnline, Warning, TEXT("No local player, cannot update achievements."));
}
}
示例15: DestroySessionAndLeaveGame
// Destroy Session
void URadeGameInstance::DestroySessionAndLeaveGame()
{
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
if (OnlineSub)
{
IOnlineSessionPtr Sessions = OnlineSub->GetSessionInterface();
if (Sessions.IsValid())
{
Sessions->AddOnDestroySessionCompleteDelegate_Handle(OnDestroySessionCompleteDelegate);
Sessions->DestroySession(GameSessionName);
}
}
}