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;
26class FOnlineSessionInfoPico;
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>
142 FOnlineSessionPico(FOnlineSubsystemPico& InSubsystem);
143
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:
365
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;
FOnlineSessionPico class inherited from IOnlineSession(Unreal Engine).
Definition: OnlineSessionInterfacePico.h:58
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.