// 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& 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& SearchSettings) override; virtual bool FindSessions(const FUniqueNetId& SearchingPlayerId, const TSharedRef& 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& 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& Results); FUniqueNetIdEOSPlusPtr GetNetIdPlus(const FString& SourceId); FUniqueNetIdPtr GetBaseNetId(const FString& SourceId); FUniqueNetIdPtr GetEOSNetId(const FString& SourceId); TArray GetBaseNetIds(const TArray& Players); TArray GetEOSNetIds(const TArray& 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> 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 Sessions; IOnlineSessionPtr BaseSessionInterface; IOnlineSessionPtr EOSSessionInterface; TUniqueNetIdMap> CachedSearchSettingsPerSearchingUser; }; typedef TSharedPtr FOnlineSessionEOSPlusPtr;