117 lines
7.8 KiB
C++
117 lines
7.8 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Online/CoreOnline.h"
|
|
#include "OnlineSessionSettings.h"
|
|
#include "Interfaces/OnlineSessionInterface.h"
|
|
#include "OnlineUserEOSPlus.h"
|
|
|
|
class FOnlineSubsystemEOSPlus;
|
|
|
|
/**
|
|
* Interface for interacting with EOS sessions
|
|
*/
|
|
class FOnlineSessionEOSPlus :
|
|
public IOnlineSession
|
|
{
|
|
public:
|
|
FOnlineSessionEOSPlus() = delete;
|
|
virtual ~FOnlineSessionEOSPlus();
|
|
|
|
// IOnlineSession Interface
|
|
virtual FUniqueNetIdPtr CreateSessionIdFromString(const FString& SessionIdStr) override;
|
|
virtual bool CreateSession(int32 HostingPlayerNum, FName SessionName, const FOnlineSessionSettings& NewSessionSettings) override;
|
|
virtual bool CreateSession(const FUniqueNetId& HostingPlayerId, FName SessionName, const FOnlineSessionSettings& NewSessionSettings) override;
|
|
virtual bool StartSession(FName SessionName) override;
|
|
virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings, bool bShouldRefreshOnlineData = true) override;
|
|
virtual bool EndSession(FName SessionName) override;
|
|
virtual bool DestroySession(FName SessionName, const FOnDestroySessionCompleteDelegate& CompletionDelegate = FOnDestroySessionCompleteDelegate()) override;
|
|
virtual bool IsPlayerInSession(FName SessionName, const FUniqueNetId& UniqueId) override;
|
|
virtual bool StartMatchmaking(const TArray< FUniqueNetIdRef >& LocalPlayers, FName SessionName, const FOnlineSessionSettings& NewSessionSettings, TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
|
|
virtual bool CancelMatchmaking(int32 SearchingPlayerNum, FName SessionName) override;
|
|
virtual bool CancelMatchmaking(const FUniqueNetId& SearchingPlayerId, FName SessionName) override;
|
|
virtual bool FindSessions(int32 SearchingPlayerNum, const TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
|
|
virtual bool FindSessions(const FUniqueNetId& SearchingPlayerId, const TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
|
|
virtual bool FindSessionById(const FUniqueNetId& SearchingUserId, const FUniqueNetId& SessionId, const FUniqueNetId& FriendId, const FOnSingleSessionResultCompleteDelegate& CompletionDelegate) override;
|
|
virtual bool CancelFindSessions() override;
|
|
virtual bool PingSearchResults(const FOnlineSessionSearchResult& SearchResult) override;
|
|
virtual bool JoinSession(int32 PlayerNum, FName SessionName, const FOnlineSessionSearchResult& DesiredSession) override;
|
|
virtual bool JoinSession(const FUniqueNetId& PlayerId, FName SessionName, const FOnlineSessionSearchResult& DesiredSession) override;
|
|
virtual bool FindFriendSession(int32 LocalUserNum, const FUniqueNetId& Friend) override;
|
|
virtual bool FindFriendSession(const FUniqueNetId& LocalUserId, const FUniqueNetId& Friend) override;
|
|
virtual bool FindFriendSession(const FUniqueNetId& LocalUserId, const TArray<FUniqueNetIdRef>& FriendList) override;
|
|
virtual bool SendSessionInviteToFriend(int32 LocalUserNum, FName SessionName, const FUniqueNetId& Friend) override;
|
|
virtual bool SendSessionInviteToFriend(const FUniqueNetId& LocalUserId, FName SessionName, const FUniqueNetId& Friend) override;
|
|
virtual bool SendSessionInviteToFriends(int32 LocalUserNum, FName SessionName, const TArray< FUniqueNetIdRef >& Friends) override;
|
|
virtual bool SendSessionInviteToFriends(const FUniqueNetId& LocalUserId, FName SessionName, const TArray< FUniqueNetIdRef >& Friends) override;
|
|
virtual bool GetResolvedConnectString(FName SessionName, FString& ConnectInfo, FName PortType) override;
|
|
virtual bool GetResolvedConnectString(const FOnlineSessionSearchResult& SearchResult, FName PortType, FString& ConnectInfo) override;
|
|
virtual FOnlineSessionSettings* GetSessionSettings(FName SessionName) override;
|
|
virtual FString GetVoiceChatRoomName(int32 LocalUserNum, const FName& SessionName) override;
|
|
virtual bool RegisterPlayer(FName SessionName, const FUniqueNetId& PlayerId, bool bWasInvited) override;
|
|
virtual bool RegisterPlayers(FName SessionName, const TArray< FUniqueNetIdRef >& Players, bool bWasInvited = false) override;
|
|
virtual bool UnregisterPlayer(FName SessionName, const FUniqueNetId& PlayerId) override;
|
|
virtual bool UnregisterPlayers(FName SessionName, const TArray< FUniqueNetIdRef >& Players) override;
|
|
virtual void RegisterLocalPlayer(const FUniqueNetId& PlayerId, FName SessionName, const FOnRegisterLocalPlayerCompleteDelegate& Delegate) override;
|
|
virtual void UnregisterLocalPlayer(const FUniqueNetId& PlayerId, FName SessionName, const FOnUnregisterLocalPlayerCompleteDelegate& Delegate) override;
|
|
virtual int32 GetNumSessions() override;
|
|
virtual void DumpSessionState() override;
|
|
FNamedOnlineSession* GetNamedSession(FName SessionName) override;
|
|
virtual void RemoveNamedSession(FName SessionName) override;
|
|
virtual EOnlineSessionState::Type GetSessionState(FName SessionName) const override;
|
|
virtual bool HasPresenceSession() override;
|
|
virtual class FNamedOnlineSession* AddNamedSession(FName SessionName, const FOnlineSessionSettings& SessionSettings) override;
|
|
virtual class FNamedOnlineSession* AddNamedSession(FName SessionName, const FOnlineSession& Session) override;
|
|
|
|
// ~IOnlineSession Interface
|
|
|
|
PACKAGE_SCOPE:
|
|
FOnlineSessionEOSPlus(FOnlineSubsystemEOSPlus* InSubsystem);
|
|
|
|
/** Global callbacks that we'll need to broadcast back out */
|
|
void OnSessionUserInviteAcceptedBase(const bool bWasSuccessful, const int32 ControllerId, FUniqueNetIdPtr UserId, const FOnlineSessionSearchResult& InviteResult);
|
|
void OnSessionUserInviteAcceptedEOS(const bool bWasSuccessful, const int32 ControllerId, FUniqueNetIdPtr UserId, const FOnlineSessionSearchResult& InviteResult);
|
|
void OnSessionInviteReceivedBase(const FUniqueNetId& UserId, const FUniqueNetId& FromId, const FString& AppId, const FOnlineSessionSearchResult& InviteResult);
|
|
void OnSessionInviteReceivedEOS(const FUniqueNetId& UserId, const FUniqueNetId& FromId, const FString& AppId, const FOnlineSessionSearchResult& InviteResult);
|
|
void OnSessionFailure(const FUniqueNetId& Player, ESessionFailure::Type Failure);
|
|
|
|
FDelegateHandle OnCreateSessionCompleteDelegateHandleEOS;
|
|
void OnCreateSessionComplete(FName SessionName, bool bWasSuccessful);
|
|
void OnStartSessionComplete(FName SessionName, bool bWasSuccessful);
|
|
void OnUpdateSessionComplete(FName SessionName, bool bWasSuccessful);
|
|
void OnEndSessionComplete(FName SessionName, bool bWasSuccessful);
|
|
void OnFindSessionsComplete(bool bWasSuccessful);
|
|
void OnCancelFindSessionsComplete(bool bWasSuccessful);
|
|
void OnPingSearchResultsComplete(bool bWasSuccessful);
|
|
void OnJoinSessionComplete(FName SessionName, EOnJoinSessionCompleteResult::Type JoinResult);
|
|
void OnFindFriendSessionComplete(int32 LocalPlayerNum, bool bWasSuccessful, const TArray<FOnlineSessionSearchResult>& Results);
|
|
|
|
FUniqueNetIdEOSPlusPtr GetNetIdPlus(const FString& SourceId);
|
|
FUniqueNetIdPtr GetBaseNetId(const FString& SourceId);
|
|
FUniqueNetIdPtr GetEOSNetId(const FString& SourceId);
|
|
TArray<FUniqueNetIdRef> GetBaseNetIds(const TArray<FUniqueNetIdRef>& Players);
|
|
TArray<FUniqueNetIdRef> GetEOSNetIds(const TArray<FUniqueNetIdRef>& Players);
|
|
|
|
/** Support for platform session invitations, which we delay until login completion */
|
|
void OnLoginComplete(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error);
|
|
TUniqueNetIdMap<TSharedPtr<FOnlineSessionSearchResult>> PendingInviteResultsPerUser;
|
|
|
|
/** Reference to the owning EOS plus subsystem */
|
|
FOnlineSubsystemEOSPlus* EOSPlus;
|
|
bool bUseEOSSessions;
|
|
|
|
/** Critical sections for thread safe operation of session lists */
|
|
mutable FCriticalSection SessionLock;
|
|
/** Current session settings */
|
|
TArray<FNamedOnlineSession> Sessions;
|
|
|
|
IOnlineSessionPtr BaseSessionInterface;
|
|
IOnlineSessionPtr EOSSessionInterface;
|
|
|
|
TUniqueNetIdMap<TSharedRef<FOnlineSessionSearch>> CachedSearchSettingsPerSearchingUser;
|
|
};
|
|
|
|
typedef TSharedPtr<FOnlineSessionEOSPlus, ESPMode::ThreadSafe> FOnlineSessionEOSPlusPtr;
|