7#include "CoreMinimal.h"
8#include "OnlineSubsystemPico.h"
9#include "Interfaces/OnlineSessionInterface.h"
10#include "OnlineSubsystemPicoPackage.h"
15#define SETTING_PICO_POOL FName(TEXT("PICOPOOL"))
17#define SETTING_PICO_BUILD_UNIQUE_ID FName(TEXT("PICOSESSIONBUILDUNIQUEID"))
19#define SEARCH_PICO_MODERATED_ROOMS_ONLY FName(TEXT("PICOMODERATEDROOMSONLY"))
21#define GET_MODERATEDROOMS_PAGEINDEX FName(TEXT("GETMODERATEDROOMSPAGEINDEX"))
23#define GET_MODERATEDROOMS_PAGESIZE FName(TEXT("GETMODERATEDROOMSPAGESIZE"))
25class FUniqueNetIdPico;
26class FOnlineSessionInfoPico;
30DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameConnectionComplete,
int ,
bool );
31DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameRequestFailedComplete,
int ,
bool );
32DECLARE_MULTICAST_DELEGATE_OneParam(FOnGameStateResetComplete,
bool );
33DECLARE_MULTICAST_DELEGATE_OneParam(FOnMatchmakingCancel2Complete,
bool );
34DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomLeaveComplete,
const FString& ,
bool );
35DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomJoin2Complete,
const FString& ,
bool );
36DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomSetDescriptionComplete,
const FString& ,
bool );
37DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomKickUserComplete,
const FString& ,
bool );
38DECLARE_MULTICAST_DELEGATE_OneParam(FOnRoomUpdateOwnerComplete,
bool );
39DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateDataStoreComplete,
const FString& ,
bool );
40DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateMembershipLockStatusComplete,
const FString& ,
bool );
41DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateComplete,
const FString& ,
bool );
42DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomInviteAcceptedComplete,
const FString& ,
bool );
65 TMap<FName, TSharedPtr<FNamedOnlineSession>>
Sessions;
82 TArray<TSharedRef<const FOnlineSessionSearchResult>> PendingInviteAcceptedSessions;
83 ppfID InviteAcceptedRoomID;
92 FDelegateHandle OnRoomNotificationUpdateHandle;
93 void OnRoomNotificationUpdate(ppfMessageHandle Message,
bool bIsError);
95 FDelegateHandle OnRoomNotificationInviteAcceptedHandle;
96 void OnRoomInviteAccepted(ppfMessageHandle Message,
bool bIsError);
98 FDelegateHandle OnMatchmakingNotificationMatchFoundHandle;
99 void OnMatchmakingNotificationMatchFound(ppfMessageHandle Message,
bool bIsError);
101 TSharedRef<FOnlineSession> CreateSessionFromRoom(ppfRoomHandle Room)
const;
103 void UpdateSessionFromRoom(FNamedOnlineSession& Session, ppfRoomHandle Room)
const;
104 void UpdateSessionSettingsFromDataStore(FOnlineSessionSettings& SessionSettings, ppfDataStoreHandle DataStore)
const;
106 void TickPendingInvites(
float DeltaTime);
108 bool CreateRoomSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
109 bool CreateMatchmakingSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
110 void OnCreateRoomComplete(ppfMessageHandle Message,
bool bIsError, FName SessionName);
133 bool UpdateRoomDataStore(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings);
160 virtual bool CreateSession(int32 HostingPlayerNum, FName SessionName,
const FOnlineSessionSettings& NewSessionSettings)
override;
161 virtual bool CreateSession(
const FUniqueNetId& HostingPlayerId, FName SessionName,
const FOnlineSessionSettings& NewSessionSettings)
override;
183 virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings,
bool bShouldRefreshOnlineData =
true)
override;
206 virtual bool DestroySession(FName SessionName,
const FOnDestroySessionCompleteDelegate& CompletionDelegate = FOnDestroySessionCompleteDelegate())
override;
230 virtual bool StartMatchmaking(
const TArray< FUniqueNetIdRef >& LocalPlayers, FName SessionName,
const FOnlineSessionSettings& NewSessionSettings, TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
242 virtual bool CancelMatchmaking(
const FUniqueNetId& SearchingPlayerId, FName SessionName)
override;
253 virtual bool FindSessions(int32 SearchingPlayerNum,
const TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
254 virtual bool FindSessions(
const FUniqueNetId& SearchingPlayerId,
const TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
267 virtual bool FindSessionById(
const FUniqueNetId& SearchingUserId,
const FUniqueNetId& SessionId,
const FUniqueNetId& FriendId,
const FOnSingleSessionResultCompleteDelegate& CompletionDelegate)
override;
268 virtual bool CancelFindSessions()
override;
269 virtual bool PingSearchResults(
const FOnlineSessionSearchResult& SearchResult)
override;
281 virtual bool JoinSession(int32 PlayerNum, FName SessionName,
const FOnlineSessionSearchResult& DesiredSession)
override;
282 virtual bool JoinSession(
const FUniqueNetId& PlayerId, FName SessionName,
const FOnlineSessionSearchResult& DesiredSession)
override;
284 virtual bool FindFriendSession(int32 LocalUserNum,
const FUniqueNetId& Friend)
override;
285 virtual bool FindFriendSession(
const FUniqueNetId& LocalUserId,
const FUniqueNetId& Friend)
override;
286 virtual bool FindFriendSession(
const FUniqueNetId& LocalUserId,
const TArray<FUniqueNetIdRef>& FriendList)
override;
288 virtual bool SendSessionInviteToFriend(int32 LocalUserNum, FName SessionName,
const FUniqueNetId& Friend)
override;
289 virtual bool SendSessionInviteToFriend(
const FUniqueNetId& LocalUserId, FName SessionName,
const FUniqueNetId& Friend)
override;
290 virtual bool SendSessionInviteToFriends(int32 LocalUserNum, FName SessionName,
const TArray< FUniqueNetIdRef >& Friends)
override;
291 virtual bool SendSessionInviteToFriends(
const FUniqueNetId& LocalUserId, FName SessionName,
const TArray< FUniqueNetIdRef >& Friends)
override;
292 virtual bool GetResolvedConnectString(FName SessionName, FString& ConnectInfo, FName PortType = NAME_GamePort)
override;
293 virtual bool GetResolvedConnectString(
const class FOnlineSessionSearchResult& SearchResult, FName PortType, FString& ConnectInfo)
override;
294 virtual FOnlineSessionSettings* GetSessionSettings(FName SessionName)
override;
295 virtual bool RegisterPlayer(FName SessionName,
const FUniqueNetId& PlayerId,
bool bWasInvited)
override;
296 virtual bool RegisterPlayers(FName SessionName,
const TArray< FUniqueNetIdRef >& Players,
bool bWasInvited =
false)
override;
297 virtual bool UnregisterPlayer(FName SessionName,
const FUniqueNetId& PlayerId)
override;
298 virtual bool UnregisterPlayers(FName SessionName,
const TArray< FUniqueNetIdRef >& Players)
override;
299 virtual void RegisterLocalPlayer(
const FUniqueNetId& PlayerId, FName SessionName,
const FOnRegisterLocalPlayerCompleteDelegate& Delegate)
override;
300 virtual void UnregisterLocalPlayer(
const FUniqueNetId& PlayerId, FName SessionName,
const FOnUnregisterLocalPlayerCompleteDelegate& Delegate)
override;
301 virtual int32 GetNumSessions()
override;
302 virtual void DumpSessionState()
override;
304 virtual FUniqueNetIdPtr CreateSessionIdFromString(
const FString& SessionIdStr)
override;
305 FNamedOnlineSession* GetNamedSession(FName SessionName)
override;
306 virtual void RemoveNamedSession(FName SessionName)
override;
307 virtual EOnlineSessionState::Type GetSessionState(FName SessionName)
const override;
308 virtual bool HasPresenceSession()
override;
309 class FNamedOnlineSession* AddNamedSession(FName SessionName,
const FOnlineSessionSettings& SessionSettings)
override;
310 class FNamedOnlineSession* AddNamedSession(FName SessionName,
const FOnlineSession& Session)
override;
314 FString InitStateErrorMessage = FString(
"Error: InitSuccess is false");
315 bool InitSuccess =
false;
316 bool OnUpdateRoomData(ppfRoomHandle Room, ppfID RoomId);
317 void OnRoomInviteAccepted(ppfID RoomId);
320 void OnGetAccessTokenComplete(ppfMessageHandle Message,
bool bIsError);
321 void OnGameInitializeComplete(ppfMessageHandle Message,
bool bIsError);
323 FDelegateHandle OnNetNotificationConnectionHandle;
324 void OnNetNotificationConnection(ppfMessageHandle Message,
bool bIsError);
326 FDelegateHandle OnNetNotificationRequestFailedHandle;
327 void OnNetNotificationRequestFailed(ppfMessageHandle Message,
bool bIsError);
329 FDelegateHandle OnNetNotificationGameStateResetHandle;
330 void OnNetNotificationGameStateReset(ppfMessageHandle Message,
bool bIsError);
332 FDelegateHandle OnMatchmakingNotificationCancel2Handle;
333 void OnMatchmakingNotificationCancel2(ppfMessageHandle Message,
bool bIsError);
335 FDelegateHandle OnRoomNotificationLeaveHandle;
336 void OnRoomNotificationLeave(ppfMessageHandle Message,
bool bIsError);
338 FDelegateHandle OnRoomNotificationJoin2Handle;
339 void OnRoomNotificationJoin2(ppfMessageHandle Message,
bool bIsError);
341 FDelegateHandle OnRoomNotificationSetDescriptionHandle;
342 void OnRoomNotificationSetDescription(ppfMessageHandle Message,
bool bIsError);
344 FDelegateHandle OnRoomNotificationKickUserHandle;
345 void OnRoomNotificationKickUser(ppfMessageHandle Message,
bool bIsError);
347 FDelegateHandle OnRoomNotificationUpdateOwnerHandle;
348 void OnRoomNotificationUpdateOwner(ppfMessageHandle Message,
bool bIsError);
350 FDelegateHandle OnRoomNotificationUpdateDataStoreHandle;
351 void OnRoomNotificationUpdateDataStore(ppfMessageHandle Message,
bool bIsError);
353 FDelegateHandle OnRoomNotificationUpdateMembershipLockStatusHandle;
354 void OnRoomNotificationUpdateMembershipLockStatus(ppfMessageHandle Message,
bool bIsError);
356 void LogRoomData(ppfRoomHandle Room)
const;
400 FOnRoomUpdateComplete RoomUpdateCallback;
401 FOnRoomInviteAcceptedComplete RoomInviteAcceptedCallback;
403 FOnGameConnectionComplete GameConnectionCallback;
404 FOnGameRequestFailedComplete GameRequestFailedCallback;
405 FOnGameStateResetComplete GameStateResetCallback;
406 FOnMatchmakingCancel2Complete MatchmakingCancel2Callback;
407 FOnRoomLeaveComplete RoomLeaveCallback;
408 FOnRoomJoin2Complete RoomJoin2Callback;
409 FOnRoomSetDescriptionComplete RoomSetDescriptionCallback;
410 FOnRoomKickUserComplete RoomKickUserCallback;
411 FOnRoomUpdateOwnerComplete RoomUpdateOwnerCallback;
412 FOnRoomUpdateDataStoreComplete RoomUpdateDataStoreCallback;
413 FOnRoomUpdateMembershipLockStatusComplete RoomUpdateMembershipLockStatusCallback;
415 const char* JoinPolicyNames[6] = {
"None",
"Everyone",
"FriendsOfMembers",
"FriendsOfOwner",
"InvitedUsers",
"Unknown" };
416 const char* RoomTypeNames[4] = {
"Unknown",
"Matchmaking",
"Moderated",
"Private" };
417 const char* ConnectionResultNames[8] = {
"Connected",
"Closed",
"Lost",
"Resumed",
"KickedByRelogin",
"KickedByGameServer",
"GameLogicError",
"Unknown" };
418 const char* JoinabilityNames[7] = {
"Unknown",
"AreIn",
"AreKicked",
"CanJoin",
"IsFull",
"NoViewer",
"PolicyPrevents" };
420 void TestDumpNamedSession(
const FNamedOnlineSession* NamedSession)
const;
421 void TestDumpSession(
const FOnlineSession* Session)
const;
422 void TestDumpSessionSettings(
const FOnlineSessionSettings* SessionSettings)
const;
426typedef TSharedPtr<FOnlineSessionPico, ESPMode::ThreadSafe> FOnlineSessionPicoPtr;
FOnlineSessionPico class inherited from IOnlineSession(Unreal Engine).
Definition: OnlineSessionInterfacePico.h:58
bool IsInitSuccess() const
Checks the current state of InitSuccess.
FOnlineSubsystemPico & PicoSubsystem
Reference to the main Pico subsystem.
Definition: OnlineSessionInterfacePico.h:62
virtual bool FindSessions(int32 SearchingPlayerNum, const TSharedRef< FOnlineSessionSearch > &SearchSettings) override
Searches for sessions matching the settings specified.
TSharedPtr< FOnlineSessionSearch > InProgressMatchmakingSearch
The SearchSettings for matchmaking.
Definition: OnlineSessionInterfacePico.h:68
FName InProgressMatchmakingSearchName
The SessionName when in matchmaking.
Definition: OnlineSessionInterfacePico.h:71
virtual bool CreateSession(int32 HostingPlayerNum, FName SessionName, const FOnlineSessionSettings &NewSessionSettings) override
Creates an online session based on the specified settings.
virtual ~FOnlineSessionPico()
The default destructor.
virtual bool JoinSession(int32 PlayerNum, FName SessionName, const FOnlineSessionSearchResult &DesiredSession) override
Joins the session specified.
TMap< FName, TSharedPtr< FNamedOnlineSession > > Sessions
Current sessions map.
Definition: OnlineSessionInterfacePico.h:65
void OnForcedCancelMatchmaking()
Forces to cancel matchmaking.
virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings &UpdatedSessionSettings, bool bShouldRefreshOnlineData=true) override
Updates the localized settings/properties for the session in question.
virtual bool StartMatchmaking(const TArray< FUniqueNetIdRef > &LocalPlayers, FName SessionName, const FOnlineSessionSettings &NewSessionSettings, TSharedRef< FOnlineSessionSearch > &SearchSettings) override
Starts cloud-based matchmaking for a session.
FOnlineSessionPico(FOnlineSubsystemPico &InSubsystem)
The constructor.
int32 GetRoomBuildUniqueId(const ppfRoomHandle Room)
Gets the build unique ID of a room.
TArray< TSharedRef< const FOnlineSessionSearchResult > > InviteAcceptedSessions
Returns the search results of the sessions where the invitation has been accepted....
Definition: OnlineSessionInterfacePico.h:79
bool FindMatchmakingSessions(const FString Pool, const TSharedRef< FOnlineSessionSearch > &SearchSettings)
Searches for the "browse" type matchmaking rooms.
bool Uninitialize()
Uninitializes the game module.
ppfID GetRoomIDOfSession(const FNamedOnlineSession &Session) const
Gets the room ID of the session.
void OnForcedLeaveRoom(ppfID RoomID)
Forces to leave the specified room.
virtual bool CancelMatchmaking(int32 SearchingPlayerNum, FName SessionName) override
Cancels a matchmaking request for a given session.
void Initialize()
Initializes the game module.
void SetInitState(bool State)
Sets InitSuccess for the game module.
virtual bool StartSession(FName SessionName) override
Marks an online session as in progress (as opposed to being in lobby or pending).
virtual bool DestroySession(FName SessionName, const FOnDestroySessionCompleteDelegate &CompletionDelegate=FOnDestroySessionCompleteDelegate()) override
Destroys the specified online session.
virtual bool EndSession(FName SessionName) override
Marks an online session as having been ended.
bool FindModeratedRoomSessions(const TSharedRef< FOnlineSessionSearch > &SearchSettings)
Searches for moderated rooms.
virtual bool FindSessionById(const FUniqueNetId &SearchingUserId, const FUniqueNetId &SessionId, const FUniqueNetId &FriendId, const FOnSingleSessionResultCompleteDelegate &CompletionDelegate) override
Finds a session by session ID.
bool IsInMatchmakingProgress()
Checks InProgressMatchmakingSearch and SearchState.
virtual bool IsPlayerInSession(FName SessionName, const FUniqueNetId &UniqueId) override
Determines if the player is registered in the specified session.