Pico Unreal Platform SDK
OnlineSessionInterfacePico.h
1// Copyright 2022 Pico Technology Co., Ltd.All rights reserved.
2// This plugin incorporates portions of the Unreal® Engine. Unreal® is a trademark or registered trademark of Epic Games, Inc.In the United States of America and elsewhere.
3// Unreal® Engine, Copyright 1998 – 2022, Epic Games, Inc.All rights reserved.
4
5#pragma once
6
7#include "CoreMinimal.h"
8#include "OnlineSubsystemPico.h"
9#include "Interfaces/OnlineSessionInterface.h"
10#include "OnlineSubsystemPicoPackage.h"
11
13
14// @brief Used to set the matchmaking pool name.
15#define SETTING_PICO_POOL FName(TEXT("PICOPOOL"))
16// @brief Used to set the pico build unique ID.
17#define SETTING_PICO_BUILD_UNIQUE_ID FName(TEXT("PICOSESSIONBUILDUNIQUEID"))
18// @brief Used to set whether to search for moderated rooms.
19#define SEARCH_PICO_MODERATED_ROOMS_ONLY FName(TEXT("PICOMODERATEDROOMSONLY"))
20// @brief Used to set the page index when searching for moderated rooms.
21#define GET_MODERATEDROOMS_PAGEINDEX FName(TEXT("GETMODERATEDROOMSPAGEINDEX"))
22// @brief Used to set the page size when searching for moderated rooms.
23#define GET_MODERATEDROOMS_PAGESIZE FName(TEXT("GETMODERATEDROOMSPAGESIZE"))
24
25class FUniqueNetIdPico;
27
28
29// Notifications
30DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameConnectionComplete, int /*Result*/, bool /*bWasSuccessful*/);
31DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameRequestFailedComplete, int /*Result*/, bool /*bWasSuccessful*/);
32DECLARE_MULTICAST_DELEGATE_OneParam(FOnGameStateResetComplete, bool /*bWasSuccessful*/);
33DECLARE_MULTICAST_DELEGATE_OneParam(FOnMatchmakingCancel2Complete, bool /*bWasSuccessful*/);
34DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomLeaveComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
35DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomJoin2Complete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
36DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomSetDescriptionComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
37DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomKickUserComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
38DECLARE_MULTICAST_DELEGATE_OneParam(FOnRoomUpdateOwnerComplete, bool /*bWasSuccessful*/);
39DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateDataStoreComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
40DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateMembershipLockStatusComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
41DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
42DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomInviteAcceptedComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
43
44
57class FOnlineSessionPico : public IOnlineSession
58{
59private:
60
61 // <summary>Reference to the main Pico subsystem.</summary>
62 FOnlineSubsystemPico& PicoSubsystem;
63
64 // <summary>Current sessions map.</summary>
65 TMap<FName, TSharedPtr<FNamedOnlineSession>> Sessions;
66
67 // <summary>The SearchSettings for matchmaking.</summary>
68 TSharedPtr<FOnlineSessionSearch> InProgressMatchmakingSearch;
69
70 // <summary>The SessionName when in matchmaking.</summary>
71 FName InProgressMatchmakingSearchName;
72
76 ppfID GetRoomIDOfSession(const FNamedOnlineSession& Session) const;
77
78 // <summary>Returns the search results of the sessions where the invitation has been accepted. Supported version: 4.8.0 or later.</summary>
79 TArray<TSharedRef<const FOnlineSessionSearchResult>> InviteAcceptedSessions;
80
81
82 TArray<TSharedRef<const FOnlineSessionSearchResult>> PendingInviteAcceptedSessions;
83 ppfID InviteAcceptedRoomID;
84
88 int32 GetRoomBuildUniqueId(const ppfRoomHandle Room);
89
90 static void SaveLog(const ELogVerbosity::Type Verbosity, const FString& Log);
91
92PACKAGE_SCOPE:
93
94 FDelegateHandle OnRoomNotificationUpdateHandle;
95 void OnRoomNotificationUpdate(ppfMessageHandle Message, bool bIsError);
96
97 FDelegateHandle OnRoomNotificationInviteAcceptedHandle;
98 void OnRoomInviteAccepted(ppfMessageHandle Message, bool bIsError);
99
100 FDelegateHandle OnMatchmakingNotificationMatchFoundHandle;
101 void OnMatchmakingNotificationMatchFound(ppfMessageHandle Message, bool bIsError);
102
103 TSharedRef<FOnlineSession> CreateSessionFromRoom(ppfRoomHandle Room) const;
104
105 void UpdateSessionFromRoom(FNamedOnlineSession& Session, ppfRoomHandle Room) const;
106 void UpdateSessionSettingsFromDataStore(FOnlineSessionSettings& SessionSettings, ppfDataStoreHandle DataStore) const;
107
108 void TickPendingInvites(float DeltaTime);
109
110 bool CreateRoomSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
111 bool CreateMatchmakingSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
112 void OnCreateRoomComplete(ppfMessageHandle Message, bool bIsError, FName SessionName);
113
122 bool FindModeratedRoomSessions(const TSharedRef<FOnlineSessionSearch>& SearchSettings);
123
133 bool FindMatchmakingSessions(const FString Pool, const TSharedRef<FOnlineSessionSearch>& SearchSettings);
134
135 bool UpdateRoomDataStore(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings);
136
137
138public:
139
140 // <summary>The constructor.</summary>
141 // <param name="InSubsystem">A reference to the online subsystem.</param>
143
145 virtual ~FOnlineSessionPico();
146
147
148 // Begin IOnlineSession interface
149
163 virtual bool CreateSession(int32 HostingPlayerNum, FName SessionName, const FOnlineSessionSettings& NewSessionSettings) override;
164 virtual bool CreateSession(const FUniqueNetId& HostingPlayerId, FName SessionName, const FOnlineSessionSettings& NewSessionSettings) override;
165
174 virtual bool StartSession(FName SessionName) override;
175
186 virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings, bool bShouldRefreshOnlineData = true) override;
187
196 virtual bool EndSession(FName SessionName) override;
197
210 virtual bool DestroySession(FName SessionName, const FOnDestroySessionCompleteDelegate& CompletionDelegate = FOnDestroySessionCompleteDelegate()) override;
211
221 virtual bool IsPlayerInSession(FName SessionName, const FUniqueNetId& UniqueId) override;
222
234 virtual bool StartMatchmaking(const TArray< TSharedRef<const FUniqueNetId> >& LocalPlayers, FName SessionName, const FOnlineSessionSettings& NewSessionSettings, TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
235
245 virtual bool CancelMatchmaking(int32 SearchingPlayerNum, FName SessionName) override;
246 virtual bool CancelMatchmaking(const FUniqueNetId& SearchingPlayerId, FName SessionName) override;
247
257 virtual bool FindSessions(int32 SearchingPlayerNum, const TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
258 virtual bool FindSessions(const FUniqueNetId& SearchingPlayerId, const TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
259
271 virtual bool FindSessionById(const FUniqueNetId& SearchingUserId, const FUniqueNetId& SessionId, const FUniqueNetId& FriendId, const FOnSingleSessionResultCompleteDelegate& CompletionDelegate) override;
272 virtual bool CancelFindSessions() override;
273 virtual bool PingSearchResults(const FOnlineSessionSearchResult& SearchResult) override;
274
285 virtual bool JoinSession(int32 PlayerNum, FName SessionName, const FOnlineSessionSearchResult& DesiredSession) override;
286 virtual bool JoinSession(const FUniqueNetId& PlayerId, FName SessionName, const FOnlineSessionSearchResult& DesiredSession) override;
287
288 virtual bool FindFriendSession(int32 LocalUserNum, const FUniqueNetId& Friend) override;
289 virtual bool FindFriendSession(const FUniqueNetId& LocalUserId, const FUniqueNetId& Friend) override;
290 virtual bool FindFriendSession(const FUniqueNetId& LocalUserId, const TArray<TSharedRef<const FUniqueNetId>>& FriendList) override;
291
292 virtual bool SendSessionInviteToFriend(int32 LocalUserNum, FName SessionName, const FUniqueNetId& Friend) override;
293 virtual bool SendSessionInviteToFriend(const FUniqueNetId& LocalUserId, FName SessionName, const FUniqueNetId& Friend) override;
294 virtual bool SendSessionInviteToFriends(int32 LocalUserNum, FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Friends) override;
295 virtual bool SendSessionInviteToFriends(const FUniqueNetId& LocalUserId, FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Friends) override;
296 virtual bool GetResolvedConnectString(FName SessionName, FString& ConnectInfo, FName PortType = NAME_GamePort) override;
297 virtual bool GetResolvedConnectString(const class FOnlineSessionSearchResult& SearchResult, FName PortType, FString& ConnectInfo) override;
298 virtual FOnlineSessionSettings* GetSessionSettings(FName SessionName) override;
299 virtual bool RegisterPlayer(FName SessionName, const FUniqueNetId& PlayerId, bool bWasInvited) override;
300 virtual bool RegisterPlayers(FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Players, bool bWasInvited = false) override;
301 virtual bool UnregisterPlayer(FName SessionName, const FUniqueNetId& PlayerId) override;
302 virtual bool UnregisterPlayers(FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Players) override;
303 virtual void RegisterLocalPlayer(const FUniqueNetId& PlayerId, FName SessionName, const FOnRegisterLocalPlayerCompleteDelegate& Delegate) override;
304 virtual void UnregisterLocalPlayer(const FUniqueNetId& PlayerId, FName SessionName, const FOnUnregisterLocalPlayerCompleteDelegate& Delegate) override;
305 virtual int32 GetNumSessions() override;
306 virtual void DumpSessionState() override;
307
308 virtual TSharedPtr<const FUniqueNetId> CreateSessionIdFromString(const FString& SessionIdStr) override;
309 FNamedOnlineSession* GetNamedSession(FName SessionName) override;
310 virtual void RemoveNamedSession(FName SessionName) override;
311 virtual EOnlineSessionState::Type GetSessionState(FName SessionName) const override;
312 virtual bool HasPresenceSession() override;
313 class FNamedOnlineSession* AddNamedSession(FName SessionName, const FOnlineSessionSettings& SessionSettings) override;
314 class FNamedOnlineSession* AddNamedSession(FName SessionName, const FOnlineSession& Session) override;
315
316
317private:
318 FString InitStateErrorMessage = FString("Error: InitSuccess is false");
319 bool InitSuccess = false;
320 bool OnUpdateRoomData(ppfRoomHandle Room, ppfID RoomId);
321 void OnRoomInviteAccepted(ppfID RoomId);
322PACKAGE_SCOPE:
323
324 void OnGetAccessTokenComplete(ppfMessageHandle Message, bool bIsError);
325 void OnGameInitializeComplete(ppfMessageHandle Message, bool bIsError);
326
327 FDelegateHandle OnNetNotificationConnectionHandle;
328 void OnNetNotificationConnection(ppfMessageHandle Message, bool bIsError);
329
330 FDelegateHandle OnNetNotificationRequestFailedHandle;
331 void OnNetNotificationRequestFailed(ppfMessageHandle Message, bool bIsError);
332
333 FDelegateHandle OnNetNotificationGameStateResetHandle;
334 void OnNetNotificationGameStateReset(ppfMessageHandle Message, bool bIsError);
335
336 FDelegateHandle OnMatchmakingNotificationCancel2Handle;
337 void OnMatchmakingNotificationCancel2(ppfMessageHandle Message, bool bIsError);
338
339 FDelegateHandle OnRoomNotificationLeaveHandle;
340 void OnRoomNotificationLeave(ppfMessageHandle Message, bool bIsError);
341
342 FDelegateHandle OnRoomNotificationJoin2Handle;
343 void OnRoomNotificationJoin2(ppfMessageHandle Message, bool bIsError);
344
345 FDelegateHandle OnRoomNotificationSetDescriptionHandle;
346 void OnRoomNotificationSetDescription(ppfMessageHandle Message, bool bIsError);
347
348 FDelegateHandle OnRoomNotificationKickUserHandle;
349 void OnRoomNotificationKickUser(ppfMessageHandle Message, bool bIsError);
350
351 FDelegateHandle OnRoomNotificationUpdateOwnerHandle;
352 void OnRoomNotificationUpdateOwner(ppfMessageHandle Message, bool bIsError);
353
354 FDelegateHandle OnRoomNotificationUpdateDataStoreHandle;
355 void OnRoomNotificationUpdateDataStore(ppfMessageHandle Message, bool bIsError);
356
357 FDelegateHandle OnRoomNotificationUpdateMembershipLockStatusHandle;
358 void OnRoomNotificationUpdateMembershipLockStatus(ppfMessageHandle Message, bool bIsError);
359
360 void LogRoomData(ppfRoomHandle Room) const;
361
362public:
364 void Initialize();
365
368 bool Uninitialize();
369
377 void SetInitState(bool State);
378
386 bool IsInitSuccess() const;
387
390
393 void OnForcedLeaveRoom(ppfID RoomID);
394
403
404 FOnRoomUpdateComplete RoomUpdateCallback;
405 FOnRoomInviteAcceptedComplete RoomInviteAcceptedCallback;
406
407 FOnGameConnectionComplete GameConnectionCallback;
408 FOnGameRequestFailedComplete GameRequestFailedCallback;
409 FOnGameStateResetComplete GameStateResetCallback;
410 FOnMatchmakingCancel2Complete MatchmakingCancel2Callback;
411 FOnRoomLeaveComplete RoomLeaveCallback;
412 FOnRoomJoin2Complete RoomJoin2Callback;
413 FOnRoomSetDescriptionComplete RoomSetDescriptionCallback;
414 FOnRoomKickUserComplete RoomKickUserCallback;
415 FOnRoomUpdateOwnerComplete RoomUpdateOwnerCallback;
416 FOnRoomUpdateDataStoreComplete RoomUpdateDataStoreCallback;
417 FOnRoomUpdateMembershipLockStatusComplete RoomUpdateMembershipLockStatusCallback;
418
419 const char* JoinPolicyNames[6] = { "None", "Everyone", "FriendsOfMembers", "FriendsOfOwner", "InvitedUsers", "Unknown" };
420 const char* RoomTypeNames[4] = { "Unknown", "Matchmaking", "Moderated", "Private" };
421 const char* ConnectionResultNames[8] = { "Connected", "Closed", "Lost", "Resumed", "KickedByRelogin", "KickedByGameServer", "GameLogicError", "Unknown" };
422 const char* JoinabilityNames[7] = { "Unknown", "AreIn", "AreKicked", "CanJoin", "IsFull", "NoViewer", "PolicyPrevents" };
423
424 void TestDumpNamedSession(const FNamedOnlineSession* NamedSession) const;
425 void TestDumpSession(const FOnlineSession* Session) const;
426 void TestDumpSessionSettings(const FOnlineSessionSettings* SessionSettings) const;
427}; // end of Session // end of Function
430typedef TSharedPtr<FOnlineSessionPico, ESPMode::ThreadSafe> FOnlineSessionPicoPtr;
Definition: OnlineSubsystemPicoTypes.h:224
FOnlineSessionPico class inherited from IOnlineSession(Unreal Engine).
Definition: OnlineSessionInterfacePico.h:58
bool IsInitSuccess() const
Checks the current state of InitSuccess.
Definition: OnlineSessionInterfacePico.cpp:1828
virtual bool StartSession(FName SessionName) override
Marks an online session as in progress (as opposed to being in lobby or pending).
Definition: OnlineSessionInterfacePico.cpp:437
void OnForcedCancelMatchmaking()
Forces to cancel matchmaking.
Definition: OnlineSessionInterfacePico.cpp:1832
virtual ~FOnlineSessionPico()
The default destructor.
Definition: OnlineSessionInterfacePico.cpp:93
virtual bool DestroySession(FName SessionName, const FOnDestroySessionCompleteDelegate &CompletionDelegate=FOnDestroySessionCompleteDelegate()) override
Destroys the specified online session.
Definition: OnlineSessionInterfacePico.cpp:602
FOnlineSessionPico(FOnlineSubsystemPico &InSubsystem)
Definition: OnlineSessionInterfacePico.cpp:31
int32 GetRoomBuildUniqueId(const ppfRoomHandle Room)
Gets the build unique ID of a room.
Definition: OnlineSessionInterfacePico.cpp:1722
virtual bool IsPlayerInSession(FName SessionName, const FUniqueNetId &UniqueId) override
Determines if the player is registered in the specified session.
Definition: OnlineSessionInterfacePico.cpp:643
bool FindMatchmakingSessions(const FString Pool, const TSharedRef< FOnlineSessionSearch > &SearchSettings)
Searches for the "browse" type matchmaking rooms.
Definition: OnlineSessionInterfacePico.cpp:902
bool Uninitialize()
Uninitializes the game module.
Definition: OnlineSessionInterfacePico.cpp:1745
ppfID GetRoomIDOfSession(const FNamedOnlineSession &Session) const
Gets the room ID of the session.
Definition: OnlineSessionInterfacePico.cpp:215
void OnForcedLeaveRoom(ppfID RoomID)
Forces to leave the specified room.
Definition: OnlineSessionInterfacePico.cpp:1841
virtual bool CancelMatchmaking(int32 SearchingPlayerNum, FName SessionName) override
Cancels a matchmaking request for a given session.
Definition: OnlineSessionInterfacePico.cpp:750
virtual bool CreateSession(int32 HostingPlayerNum, FName SessionName, const FOnlineSessionSettings &NewSessionSettings) override
Creates an online session based on the specified settings.
Definition: OnlineSessionInterfacePico.cpp:232
virtual bool FindSessionById(const FUniqueNetId &SearchingUserId, const FUniqueNetId &SessionId, const FUniqueNetId &FriendId, const FOnSingleSessionResultCompleteDelegate &CompletionDelegate) override
Finds a session by session ID.
Definition: OnlineSessionInterfacePico.cpp:970
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.
void Initialize()
Initializes the game module.
Definition: OnlineSessionInterfacePico.cpp:1756
void SetInitState(bool State)
Sets InitSuccess for the game module.
Definition: OnlineSessionInterfacePico.cpp:1824
virtual bool JoinSession(int32 PlayerNum, FName SessionName, const FOnlineSessionSearchResult &DesiredSession) override
Joins the session specified.
Definition: OnlineSessionInterfacePico.cpp:1044
virtual bool EndSession(FName SessionName) override
Marks an online session as having been ended.
Definition: OnlineSessionInterfacePico.cpp:572
bool FindModeratedRoomSessions(const TSharedRef< FOnlineSessionSearch > &SearchSettings)
Searches for moderated rooms.
Definition: OnlineSessionInterfacePico.cpp:830
virtual bool FindSessions(int32 SearchingPlayerNum, const TSharedRef< FOnlineSessionSearch > &SearchSettings) override
Searches for sessions matching the settings specified.
Definition: OnlineSessionInterfacePico.cpp:788
bool IsInMatchmakingProgress()
Checks InProgressMatchmakingSearch and SearchState.
Definition: OnlineSessionInterfacePico.cpp:1894
virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings &UpdatedSessionSettings, bool bShouldRefreshOnlineData=true) override
Updates the localized settings/properties for the session in question.
Definition: OnlineSessionInterfacePico.cpp:468
OnlineSubsystemPico class inherited from FOnlineSubsystemImpl(Unreal Engine)
Definition: OnlineSubsystemPico.h:44