PICO Unreal Platform SDK
OnlineSessionInterfacePico.h
1// Copyright® 2015-2023 PICO Technology Co., Ltd. All rights reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "OnlineSubsystemPico.h"
7#include "Interfaces/OnlineSessionInterface.h"
8#include "OnlineSubsystemPicoPackage.h"
9
11
12// @brief Used to set the matchmaking pool name.
13#define SETTING_PICO_POOL FName(TEXT("PICOPOOL"))
14// @brief Used to set the pico build unique ID.
15#define SETTING_PICO_BUILD_UNIQUE_ID FName(TEXT("PICOSESSIONBUILDUNIQUEID"))
16// @brief Used to set whether to search for moderated rooms.
17#define SEARCH_PICO_MODERATED_ROOMS_ONLY FName(TEXT("PICOMODERATEDROOMSONLY"))
18// @brief Used to set the page index when searching for moderated rooms.
19#define GET_MODERATEDROOMS_PAGEINDEX FName(TEXT("GETMODERATEDROOMSPAGEINDEX"))
20// @brief Used to set the page size when searching for moderated rooms.
21#define GET_MODERATEDROOMS_PAGESIZE FName(TEXT("GETMODERATEDROOMSPAGESIZE"))
22
23class FUniqueNetIdPico;
24class FOnlineSessionInfoPico;
25
26
27// Notifications
28DECLARE_MULTICAST_DELEGATE_FourParams(FOnGameInitializeComplete, bool /*bWasSuccessful*/, int, /*ErrorCode,*/ const FString& /*ErrorMessage*/, int /*Result*/);
29DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameConnectionComplete, int /*Result*/, bool /*bWasSuccessful*/);
30DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameRequestFailedComplete, int /*Result*/, bool /*bWasSuccessful*/);
31DECLARE_MULTICAST_DELEGATE_OneParam(FOnGameStateResetComplete, bool /*bWasSuccessful*/);
32DECLARE_MULTICAST_DELEGATE_OneParam(FOnMatchmakingCancel2Complete, bool /*bWasSuccessful*/);
33DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomLeaveComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
34DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomJoin2Complete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
35DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomSetDescriptionComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
36DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomKickUserComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
37DECLARE_MULTICAST_DELEGATE_OneParam(FOnRoomUpdateOwnerComplete, bool /*bWasSuccessful*/);
38DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateDataStoreComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
39DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateMembershipLockStatusComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
40DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomInviteAcceptedComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
41DECLARE_MULTICAST_DELEGATE_FourParams(FOnPicoSessionUserInviteAcceptedComplete, const bool /*bWasSuccessful*/, const int32 /*ControllerId*/, const FString& /*UserId*/, const FPicoOnlineSessionSearchResult& /*InviteResult*/);
42
43DECLARE_MULTICAST_DELEGATE_FourParams(FOnRoomUpdateComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/, int, /*ErrorCode,*/ const FString& /*ErrorMessage*/);
44DECLARE_MULTICAST_DELEGATE_FourParams(FOnMatchmakingFoundComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/, int, /*ErrorCode,*/ const FString& /*ErrorMessage*/);
45
46
59class FOnlineSessionPico : public IOnlineSession
60{
61private:
62
63 // <summary>Reference to the main Pico subsystem.</summary>
64 FOnlineSubsystemPico& PicoSubsystem;
65
66 // <summary>Current sessions map.</summary>
67 TMap<FName, TSharedPtr<FNamedOnlineSession>> Sessions;
68
69 // <summary>The SearchSettings for matchmaking.</summary>
70 TSharedPtr<FOnlineSessionSearch> InProgressMatchmakingSearch;
71
72 // <summary>The SessionName when in matchmaking.</summary>
73 FName InProgressMatchmakingSearchName;
74
78 ppfID GetRoomIDOfSession(const FNamedOnlineSession& Session) const;
79
80 // <summary>Returns the search results of the sessions where the invitation has been accepted. Supported version: 4.8.0 or later.</summary>
81 TArray<TSharedRef<const FOnlineSessionSearchResult>> InviteAcceptedSessions;
82
83
84 TArray<TSharedRef<const FOnlineSessionSearchResult>> PendingInviteAcceptedSessions;
85 ppfID InviteAcceptedRoomID;
86
90 int32 GetRoomBuildUniqueId(const ppfRoomHandle Room);
91
92 static void SaveLog(const ELogVerbosity::Type Verbosity, const FString& Log);
93
94PACKAGE_SCOPE:
95
96 FDelegateHandle OnRoomNotificationUpdateHandle;
97 void OnRoomNotificationUpdate(ppfMessageHandle Message, bool bIsError);
98
99 FDelegateHandle OnRoomNotificationInviteAcceptedHandle;
100 void OnRoomInviteAccepted(ppfMessageHandle Message, bool bIsError);
101
102 FDelegateHandle OnMatchmakingNotificationMatchFoundHandle;
103 void OnMatchmakingNotificationMatchFound(ppfMessageHandle Message, bool bIsError);
104
105 TSharedRef<FOnlineSession> CreateSessionFromRoom(ppfRoomHandle Room) const;
106
107 void UpdateSessionFromRoom(FNamedOnlineSession& Session, ppfRoomHandle Room) const;
108 void UpdateSessionSettingsFromDataStore(FOnlineSessionSettings& SessionSettings, ppfDataStoreHandle DataStore) const;
109
110 void TickPendingInvites(float DeltaTime);
111
112 bool CreateRoomSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
113 bool CreateMatchmakingSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
114 void OnCreateRoomComplete(ppfMessageHandle Message, bool bIsError, FName SessionName);
115
124 bool FindModeratedRoomSessions(const TSharedRef<FOnlineSessionSearch>& SearchSettings);
125
135 bool FindMatchmakingSessions(const FString Pool, const TSharedRef<FOnlineSessionSearch>& SearchSettings);
136
137 bool UpdateRoomDataStore(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings);
138
139
140public:
141
142 // <summary>The constructor.</summary>
143 // <param name="InSubsystem">A reference to the online subsystem.</param>
144 FOnlineSessionPico(FOnlineSubsystemPico& InSubsystem);
145
148
149
150 // Begin IOnlineSession interface
151
165 virtual bool CreateSession(int32 HostingPlayerNum, FName SessionName, const FOnlineSessionSettings& NewSessionSettings) override;
166 virtual bool CreateSession(const FUniqueNetId& HostingPlayerId, FName SessionName, const FOnlineSessionSettings& NewSessionSettings) override;
167
176 virtual bool StartSession(FName SessionName) override;
177
188 virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings, bool bShouldRefreshOnlineData = true) override;
189
198 virtual bool EndSession(FName SessionName) override;
199
212 virtual bool DestroySession(FName SessionName, const FOnDestroySessionCompleteDelegate& CompletionDelegate = FOnDestroySessionCompleteDelegate()) override;
213
223 virtual bool IsPlayerInSession(FName SessionName, const FUniqueNetId& UniqueId) override;
224
236 virtual bool StartMatchmaking(const TArray< TSharedRef<const FUniqueNetId> >& LocalPlayers, FName SessionName, const FOnlineSessionSettings& NewSessionSettings, TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
237
247 virtual bool CancelMatchmaking(int32 SearchingPlayerNum, FName SessionName) override;
248 virtual bool CancelMatchmaking(const FUniqueNetId& SearchingPlayerId, FName SessionName) override;
249
259 virtual bool FindSessions(int32 SearchingPlayerNum, const TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
260 virtual bool FindSessions(const FUniqueNetId& SearchingPlayerId, const TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
261
273 virtual bool FindSessionById(const FUniqueNetId& SearchingUserId, const FUniqueNetId& SessionId, const FUniqueNetId& FriendId, const FOnSingleSessionResultCompleteDelegate& CompletionDelegate) override;
274 virtual bool CancelFindSessions() override;
275 virtual bool PingSearchResults(const FOnlineSessionSearchResult& SearchResult) override;
276
287 virtual bool JoinSession(int32 PlayerNum, FName SessionName, const FOnlineSessionSearchResult& DesiredSession) override;
288 virtual bool JoinSession(const FUniqueNetId& PlayerId, FName SessionName, const FOnlineSessionSearchResult& DesiredSession) override;
289
290 virtual bool FindFriendSession(int32 LocalUserNum, const FUniqueNetId& Friend) override;
291 virtual bool FindFriendSession(const FUniqueNetId& LocalUserId, const FUniqueNetId& Friend) override;
292 virtual bool FindFriendSession(const FUniqueNetId& LocalUserId, const TArray<TSharedRef<const FUniqueNetId>>& FriendList) override;
293
294 virtual bool SendSessionInviteToFriend(int32 LocalUserNum, FName SessionName, const FUniqueNetId& Friend) override;
295 virtual bool SendSessionInviteToFriend(const FUniqueNetId& LocalUserId, FName SessionName, const FUniqueNetId& Friend) override;
296 virtual bool SendSessionInviteToFriends(int32 LocalUserNum, FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Friends) override;
297 virtual bool SendSessionInviteToFriends(const FUniqueNetId& LocalUserId, FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Friends) override;
298 virtual bool GetResolvedConnectString(FName SessionName, FString& ConnectInfo, FName PortType = NAME_GamePort) override;
299 virtual bool GetResolvedConnectString(const class FOnlineSessionSearchResult& SearchResult, FName PortType, FString& ConnectInfo) override;
300 virtual FOnlineSessionSettings* GetSessionSettings(FName SessionName) override;
301 virtual bool RegisterPlayer(FName SessionName, const FUniqueNetId& PlayerId, bool bWasInvited) override;
302 virtual bool RegisterPlayers(FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Players, bool bWasInvited = false) override;
303 virtual bool UnregisterPlayer(FName SessionName, const FUniqueNetId& PlayerId) override;
304 virtual bool UnregisterPlayers(FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Players) override;
305 virtual void RegisterLocalPlayer(const FUniqueNetId& PlayerId, FName SessionName, const FOnRegisterLocalPlayerCompleteDelegate& Delegate) override;
306 virtual void UnregisterLocalPlayer(const FUniqueNetId& PlayerId, FName SessionName, const FOnUnregisterLocalPlayerCompleteDelegate& Delegate) override;
307 virtual int32 GetNumSessions() override;
308 virtual void DumpSessionState() override;
309
310 virtual TSharedPtr<const FUniqueNetId> CreateSessionIdFromString(const FString& SessionIdStr) override;
311 FNamedOnlineSession* GetNamedSession(FName SessionName) override;
312 virtual void RemoveNamedSession(FName SessionName) override;
313 virtual EOnlineSessionState::Type GetSessionState(FName SessionName) const override;
314 virtual bool HasPresenceSession() override;
315 class FNamedOnlineSession* AddNamedSession(FName SessionName, const FOnlineSessionSettings& SessionSettings) override;
316 class FNamedOnlineSession* AddNamedSession(FName SessionName, const FOnlineSession& Session) override;
317
318
319private:
320 FString InitStateErrorMessage = FString("Error: InitSuccess is false");
321 bool InitSuccess = false;
322 bool OnUpdateRoomData(ppfRoomHandle Room, ppfID RoomId);
323 void OnRoomInviteAccepted(ppfID RoomId);
324PACKAGE_SCOPE:
325
326 void OnGetAccessTokenComplete(ppfMessageHandle Message, bool bIsError);
327 void OnGameInitializeComplete(ppfMessageHandle Message, bool bIsError);
328
329 FDelegateHandle OnNetNotificationConnectionHandle;
330 void OnNetNotificationConnection(ppfMessageHandle Message, bool bIsError);
331
332 FDelegateHandle OnNetNotificationRequestFailedHandle;
333 void OnNetNotificationRequestFailed(ppfMessageHandle Message, bool bIsError);
334
335 FDelegateHandle OnNetNotificationGameStateResetHandle;
336 void OnNetNotificationGameStateReset(ppfMessageHandle Message, bool bIsError);
337
338 FDelegateHandle OnMatchmakingNotificationCancel2Handle;
339 void OnMatchmakingNotificationCancel2(ppfMessageHandle Message, bool bIsError);
340
341 FDelegateHandle OnRoomNotificationLeaveHandle;
342 void OnRoomNotificationLeave(ppfMessageHandle Message, bool bIsError);
343
344 FDelegateHandle OnRoomNotificationJoin2Handle;
345 void OnRoomNotificationJoin2(ppfMessageHandle Message, bool bIsError);
346
347 FDelegateHandle OnRoomNotificationSetDescriptionHandle;
348 void OnRoomNotificationSetDescription(ppfMessageHandle Message, bool bIsError);
349
350 FDelegateHandle OnRoomNotificationKickUserHandle;
351 void OnRoomNotificationKickUser(ppfMessageHandle Message, bool bIsError);
352
353 FDelegateHandle OnRoomNotificationUpdateOwnerHandle;
354 void OnRoomNotificationUpdateOwner(ppfMessageHandle Message, bool bIsError);
355
356 FDelegateHandle OnRoomNotificationUpdateDataStoreHandle;
357 void OnRoomNotificationUpdateDataStore(ppfMessageHandle Message, bool bIsError);
358
359 FDelegateHandle OnRoomNotificationUpdateMembershipLockStatusHandle;
360 void OnRoomNotificationUpdateMembershipLockStatus(ppfMessageHandle Message, bool bIsError);
361
362 void LogRoomData(ppfRoomHandle Room) const;
363
364public:
367
371
379 void SetInitState(bool State);
380
388 bool IsInitSuccess() const;
389
392
395 void OnForcedLeaveRoom(ppfID RoomID);
396
405
406 FOnMatchmakingFoundComplete MatchmakingFoundCallback;
407 FOnRoomUpdateComplete RoomUpdateCallback;
408
409 FOnRoomInviteAcceptedComplete RoomInviteAcceptedCallback;
410 FOnPicoSessionUserInviteAcceptedComplete PicoSessionUserInviteAcceptedCallback;
411
412 FOnGameInitializeComplete GameInitializeCompleteCallback;
413 FOnGameConnectionComplete GameConnectionCallback;
414 FOnGameRequestFailedComplete GameRequestFailedCallback;
415 FOnGameStateResetComplete GameStateResetCallback;
416 FOnMatchmakingCancel2Complete MatchmakingCancel2Callback;
417 FOnRoomLeaveComplete RoomLeaveCallback;
418 FOnRoomJoin2Complete RoomJoin2Callback;
419 FOnRoomUpdateOwnerComplete RoomUpdateOwnerCallback;
420 // Not Used
421 FOnRoomSetDescriptionComplete RoomSetDescriptionCallback;
422 FOnRoomKickUserComplete RoomKickUserCallback;
423 FOnRoomUpdateDataStoreComplete RoomUpdateDataStoreCallback;
424 FOnRoomUpdateMembershipLockStatusComplete RoomUpdateMembershipLockStatusCallback;
425
426 const char* JoinPolicyNames[6] = { "None", "Everyone", "FriendsOfMembers", "FriendsOfOwner", "InvitedUsers", "Unknown" };
427 const char* RoomTypeNames[4] = { "Unknown", "Matchmaking", "Moderated", "Private" };
428 const char* ConnectionResultNames[8] = { "Connected", "Closed", "Lost", "Resumed", "KickedByRelogin", "KickedByGameServer", "GameLogicError", "Unknown" };
429 const char* JoinabilityNames[7] = { "Unknown", "AreIn", "AreKicked", "CanJoin", "IsFull", "NoViewer", "PolicyPrevents" };
430
431 void TestDumpNamedSession(const FNamedOnlineSession* NamedSession) const;
432 void TestDumpSession(const FOnlineSession* Session) const;
433 void TestDumpSessionSettings(const FOnlineSessionSettings* SessionSettings) const;
434}; // end of Session(OnlineSub) // end of Function
437typedef TSharedPtr<FOnlineSessionPico, ESPMode::ThreadSafe> FOnlineSessionPicoPtr;
FOnlineSessionPico class inherited from IOnlineSession(Unreal Engine).
Definition: OnlineSessionInterfacePico.h:60
bool IsInitSuccess() const
Checks the current state of InitSuccess.
virtual bool FindSessions(int32 SearchingPlayerNum, const TSharedRef< FOnlineSessionSearch > &SearchSettings) override
Searches for sessions matching the settings specified.
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.
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.
int32 GetRoomBuildUniqueId(const ppfRoomHandle Room)
Gets the build unique ID of a room.
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 StartMatchmaking(const TArray< TSharedRef< const FUniqueNetId > > &LocalPlayers, FName SessionName, const FOnlineSessionSettings &NewSessionSettings, TSharedRef< FOnlineSessionSearch > &SearchSettings) override
Starts cloud-based matchmaking for a session.
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.
Representation of a single search result. Similar to FOnlineSessionSearchResult.
Definition: OnlineSubsystemPicoNames.h:383