PICO Unreal Platform SDK
OnlineSessionInterfacePico.h
1/*******************************************************************************
2Copyright © 2015-2022 PICO Technology Co., Ltd.All rights reserved.
3
4NOTICE:All information contained herein is, and remains the property of
5PICO Technology Co., Ltd. The intellectual and technical concepts
6contained herein are proprietary to PICO Technology Co., Ltd. and may be
7covered by patents, patents in process, and are protected by trade secret or
8copyright law. Dissemination of this information or reproduction of this
9material is strictly forbidden unless prior written permission is obtained from
10PICO Technology Co., Ltd.
11*******************************************************************************/
12// 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.
13// Unreal® Engine, Copyright 1998 – 2022, Epic Games, Inc.All rights reserved.
14
15#pragma once
16
17#include "CoreMinimal.h"
18#include "OnlineSubsystemPico.h"
19#include "Interfaces/OnlineSessionInterface.h"
20#include "OnlineSubsystemPicoPackage.h"
21
23
24// @brief Used to set the matchmaking pool name.
25#define SETTING_PICO_POOL FName(TEXT("PICOPOOL"))
26// @brief Used to set the pico build unique ID.
27#define SETTING_PICO_BUILD_UNIQUE_ID FName(TEXT("PICOSESSIONBUILDUNIQUEID"))
28// @brief Used to set whether to search for moderated rooms.
29#define SEARCH_PICO_MODERATED_ROOMS_ONLY FName(TEXT("PICOMODERATEDROOMSONLY"))
30// @brief Used to set the page index when searching for moderated rooms.
31#define GET_MODERATEDROOMS_PAGEINDEX FName(TEXT("GETMODERATEDROOMSPAGEINDEX"))
32// @brief Used to set the page size when searching for moderated rooms.
33#define GET_MODERATEDROOMS_PAGESIZE FName(TEXT("GETMODERATEDROOMSPAGESIZE"))
34
35class FUniqueNetIdPico;
36class FOnlineSessionInfoPico;
37
38
39// Notifications
40DECLARE_MULTICAST_DELEGATE_FourParams(FOnGameInitializeComplete, bool /*bWasSuccessful*/, int, /*ErrorCode,*/ const FString& /*ErrorMessage*/, int /*Result*/);
41DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameConnectionComplete, int /*Result*/, bool /*bWasSuccessful*/);
42DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameRequestFailedComplete, int /*Result*/, bool /*bWasSuccessful*/);
43DECLARE_MULTICAST_DELEGATE_OneParam(FOnGameStateResetComplete, bool /*bWasSuccessful*/);
44DECLARE_MULTICAST_DELEGATE_OneParam(FOnMatchmakingCancel2Complete, bool /*bWasSuccessful*/);
45DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomLeaveComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
46DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomJoin2Complete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
47DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomSetDescriptionComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
48DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomKickUserComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
49DECLARE_MULTICAST_DELEGATE_OneParam(FOnRoomUpdateOwnerComplete, bool /*bWasSuccessful*/);
50DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateDataStoreComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
51DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateMembershipLockStatusComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
52DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomInviteAcceptedComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/);
53DECLARE_MULTICAST_DELEGATE_FourParams(FOnPicoSessionUserInviteAcceptedComplete, const bool /*bWasSuccessful*/, const int32 /*ControllerId*/, const FString& /*UserId*/, const FPicoOnlineSessionSearchResult& /*InviteResult*/);
54
55DECLARE_MULTICAST_DELEGATE_FourParams(FOnRoomUpdateComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/, int, /*ErrorCode,*/ const FString& /*ErrorMessage*/);
56DECLARE_MULTICAST_DELEGATE_FourParams(FOnMatchmakingFoundComplete, const FString& /*RoomID*/, bool /*bWasSuccessful*/, int, /*ErrorCode,*/ const FString& /*ErrorMessage*/);
57
58
71class FOnlineSessionPico : public IOnlineSession
72{
73private:
74
75 // <summary>Reference to the main Pico subsystem.</summary>
76 FOnlineSubsystemPico& PicoSubsystem;
77
78 // <summary>Current sessions map.</summary>
79 TMap<FName, TSharedPtr<FNamedOnlineSession>> Sessions;
80
81 // <summary>The SearchSettings for matchmaking.</summary>
82 TSharedPtr<FOnlineSessionSearch> InProgressMatchmakingSearch;
83
84 // <summary>The SessionName when in matchmaking.</summary>
85 FName InProgressMatchmakingSearchName;
86
90 ppfID GetRoomIDOfSession(const FNamedOnlineSession& Session) const;
91
92 // <summary>Returns the search results of the sessions where the invitation has been accepted. Supported version: 4.8.0 or later.</summary>
93 TArray<TSharedRef<const FOnlineSessionSearchResult>> InviteAcceptedSessions;
94
95
96 TArray<TSharedRef<const FOnlineSessionSearchResult>> PendingInviteAcceptedSessions;
97 ppfID InviteAcceptedRoomID;
98
102 int32 GetRoomBuildUniqueId(const ppfRoomHandle Room);
103
104 static void SaveLog(const ELogVerbosity::Type Verbosity, const FString& Log);
105
106PACKAGE_SCOPE:
107
108 FDelegateHandle OnRoomNotificationUpdateHandle;
109 void OnRoomNotificationUpdate(ppfMessageHandle Message, bool bIsError);
110
111 FDelegateHandle OnRoomNotificationInviteAcceptedHandle;
112 void OnRoomInviteAccepted(ppfMessageHandle Message, bool bIsError);
113
114 FDelegateHandle OnMatchmakingNotificationMatchFoundHandle;
115 void OnMatchmakingNotificationMatchFound(ppfMessageHandle Message, bool bIsError);
116
117 TSharedRef<FOnlineSession> CreateSessionFromRoom(ppfRoomHandle Room) const;
118
119 void UpdateSessionFromRoom(FNamedOnlineSession& Session, ppfRoomHandle Room) const;
120 void UpdateSessionSettingsFromDataStore(FOnlineSessionSettings& SessionSettings, ppfDataStoreHandle DataStore) const;
121
122 void TickPendingInvites(float DeltaTime);
123
124 bool CreateRoomSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
125 bool CreateMatchmakingSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
126 void OnCreateRoomComplete(ppfMessageHandle Message, bool bIsError, FName SessionName);
127
136 bool FindModeratedRoomSessions(const TSharedRef<FOnlineSessionSearch>& SearchSettings);
137
147 bool FindMatchmakingSessions(const FString Pool, const TSharedRef<FOnlineSessionSearch>& SearchSettings);
148
149 bool UpdateRoomDataStore(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings);
150
151
152public:
153
154 // <summary>The constructor.</summary>
155 // <param name="InSubsystem">A reference to the online subsystem.</param>
156 FOnlineSessionPico(FOnlineSubsystemPico& InSubsystem);
157
160
161
162 // Begin IOnlineSession interface
163
177 virtual bool CreateSession(int32 HostingPlayerNum, FName SessionName, const FOnlineSessionSettings& NewSessionSettings) override;
178 virtual bool CreateSession(const FUniqueNetId& HostingPlayerId, FName SessionName, const FOnlineSessionSettings& NewSessionSettings) override;
179
188 virtual bool StartSession(FName SessionName) override;
189
200 virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings, bool bShouldRefreshOnlineData = true) override;
201
210 virtual bool EndSession(FName SessionName) override;
211
224 virtual bool DestroySession(FName SessionName, const FOnDestroySessionCompleteDelegate& CompletionDelegate = FOnDestroySessionCompleteDelegate()) override;
225
235 virtual bool IsPlayerInSession(FName SessionName, const FUniqueNetId& UniqueId) override;
236
248 virtual bool StartMatchmaking(const TArray< TSharedRef<const FUniqueNetId> >& LocalPlayers, FName SessionName, const FOnlineSessionSettings& NewSessionSettings, TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
249
259 virtual bool CancelMatchmaking(int32 SearchingPlayerNum, FName SessionName) override;
260 virtual bool CancelMatchmaking(const FUniqueNetId& SearchingPlayerId, FName SessionName) override;
261
271 virtual bool FindSessions(int32 SearchingPlayerNum, const TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
272 virtual bool FindSessions(const FUniqueNetId& SearchingPlayerId, const TSharedRef<FOnlineSessionSearch>& SearchSettings) override;
273
285 virtual bool FindSessionById(const FUniqueNetId& SearchingUserId, const FUniqueNetId& SessionId, const FUniqueNetId& FriendId, const FOnSingleSessionResultCompleteDelegate& CompletionDelegate) override;
286 virtual bool CancelFindSessions() override;
287 virtual bool PingSearchResults(const FOnlineSessionSearchResult& SearchResult) override;
288
299 virtual bool JoinSession(int32 PlayerNum, FName SessionName, const FOnlineSessionSearchResult& DesiredSession) override;
300 virtual bool JoinSession(const FUniqueNetId& PlayerId, FName SessionName, const FOnlineSessionSearchResult& DesiredSession) override;
301
302 virtual bool FindFriendSession(int32 LocalUserNum, const FUniqueNetId& Friend) override;
303 virtual bool FindFriendSession(const FUniqueNetId& LocalUserId, const FUniqueNetId& Friend) override;
304 virtual bool FindFriendSession(const FUniqueNetId& LocalUserId, const TArray<TSharedRef<const FUniqueNetId>>& FriendList) override;
305
306 virtual bool SendSessionInviteToFriend(int32 LocalUserNum, FName SessionName, const FUniqueNetId& Friend) override;
307 virtual bool SendSessionInviteToFriend(const FUniqueNetId& LocalUserId, FName SessionName, const FUniqueNetId& Friend) override;
308 virtual bool SendSessionInviteToFriends(int32 LocalUserNum, FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Friends) override;
309 virtual bool SendSessionInviteToFriends(const FUniqueNetId& LocalUserId, FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Friends) override;
310 virtual bool GetResolvedConnectString(FName SessionName, FString& ConnectInfo, FName PortType = NAME_GamePort) override;
311 virtual bool GetResolvedConnectString(const class FOnlineSessionSearchResult& SearchResult, FName PortType, FString& ConnectInfo) override;
312 virtual FOnlineSessionSettings* GetSessionSettings(FName SessionName) override;
313 virtual bool RegisterPlayer(FName SessionName, const FUniqueNetId& PlayerId, bool bWasInvited) override;
314 virtual bool RegisterPlayers(FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Players, bool bWasInvited = false) override;
315 virtual bool UnregisterPlayer(FName SessionName, const FUniqueNetId& PlayerId) override;
316 virtual bool UnregisterPlayers(FName SessionName, const TArray< TSharedRef<const FUniqueNetId> >& Players) override;
317 virtual void RegisterLocalPlayer(const FUniqueNetId& PlayerId, FName SessionName, const FOnRegisterLocalPlayerCompleteDelegate& Delegate) override;
318 virtual void UnregisterLocalPlayer(const FUniqueNetId& PlayerId, FName SessionName, const FOnUnregisterLocalPlayerCompleteDelegate& Delegate) override;
319 virtual int32 GetNumSessions() override;
320 virtual void DumpSessionState() override;
321
322 virtual TSharedPtr<const FUniqueNetId> CreateSessionIdFromString(const FString& SessionIdStr) override;
323 FNamedOnlineSession* GetNamedSession(FName SessionName) override;
324 virtual void RemoveNamedSession(FName SessionName) override;
325 virtual EOnlineSessionState::Type GetSessionState(FName SessionName) const override;
326 virtual bool HasPresenceSession() override;
327 class FNamedOnlineSession* AddNamedSession(FName SessionName, const FOnlineSessionSettings& SessionSettings) override;
328 class FNamedOnlineSession* AddNamedSession(FName SessionName, const FOnlineSession& Session) override;
329
330
331private:
332 FString InitStateErrorMessage = FString("Error: InitSuccess is false");
333 bool InitSuccess = false;
334 bool OnUpdateRoomData(ppfRoomHandle Room, ppfID RoomId);
335 void OnRoomInviteAccepted(ppfID RoomId);
336PACKAGE_SCOPE:
337
338 void OnGetAccessTokenComplete(ppfMessageHandle Message, bool bIsError);
339 void OnGameInitializeComplete(ppfMessageHandle Message, bool bIsError);
340
341 FDelegateHandle OnNetNotificationConnectionHandle;
342 void OnNetNotificationConnection(ppfMessageHandle Message, bool bIsError);
343
344 FDelegateHandle OnNetNotificationRequestFailedHandle;
345 void OnNetNotificationRequestFailed(ppfMessageHandle Message, bool bIsError);
346
347 FDelegateHandle OnNetNotificationGameStateResetHandle;
348 void OnNetNotificationGameStateReset(ppfMessageHandle Message, bool bIsError);
349
350 FDelegateHandle OnMatchmakingNotificationCancel2Handle;
351 void OnMatchmakingNotificationCancel2(ppfMessageHandle Message, bool bIsError);
352
353 FDelegateHandle OnRoomNotificationLeaveHandle;
354 void OnRoomNotificationLeave(ppfMessageHandle Message, bool bIsError);
355
356 FDelegateHandle OnRoomNotificationJoin2Handle;
357 void OnRoomNotificationJoin2(ppfMessageHandle Message, bool bIsError);
358
359 FDelegateHandle OnRoomNotificationSetDescriptionHandle;
360 void OnRoomNotificationSetDescription(ppfMessageHandle Message, bool bIsError);
361
362 FDelegateHandle OnRoomNotificationKickUserHandle;
363 void OnRoomNotificationKickUser(ppfMessageHandle Message, bool bIsError);
364
365 FDelegateHandle OnRoomNotificationUpdateOwnerHandle;
366 void OnRoomNotificationUpdateOwner(ppfMessageHandle Message, bool bIsError);
367
368 FDelegateHandle OnRoomNotificationUpdateDataStoreHandle;
369 void OnRoomNotificationUpdateDataStore(ppfMessageHandle Message, bool bIsError);
370
371 FDelegateHandle OnRoomNotificationUpdateMembershipLockStatusHandle;
372 void OnRoomNotificationUpdateMembershipLockStatus(ppfMessageHandle Message, bool bIsError);
373
374 void LogRoomData(ppfRoomHandle Room) const;
375
376public:
379
383
391 void SetInitState(bool State);
392
400 bool IsInitSuccess() const;
401
404
407 void OnForcedLeaveRoom(ppfID RoomID);
408
417
418 FOnMatchmakingFoundComplete MatchmakingFoundCallback;
419 FOnRoomUpdateComplete RoomUpdateCallback;
420
421 FOnRoomInviteAcceptedComplete RoomInviteAcceptedCallback;
422 FOnPicoSessionUserInviteAcceptedComplete PicoSessionUserInviteAcceptedCallback;
423
424 FOnGameInitializeComplete GameInitializeCompleteCallback;
425 FOnGameConnectionComplete GameConnectionCallback;
426 FOnGameRequestFailedComplete GameRequestFailedCallback;
427 FOnGameStateResetComplete GameStateResetCallback;
428 FOnMatchmakingCancel2Complete MatchmakingCancel2Callback;
429 FOnRoomLeaveComplete RoomLeaveCallback;
430 FOnRoomJoin2Complete RoomJoin2Callback;
431 FOnRoomUpdateOwnerComplete RoomUpdateOwnerCallback;
432 // Not Used
433 FOnRoomSetDescriptionComplete RoomSetDescriptionCallback;
434 FOnRoomKickUserComplete RoomKickUserCallback;
435 FOnRoomUpdateDataStoreComplete RoomUpdateDataStoreCallback;
436 FOnRoomUpdateMembershipLockStatusComplete RoomUpdateMembershipLockStatusCallback;
437
438 const char* JoinPolicyNames[6] = { "None", "Everyone", "FriendsOfMembers", "FriendsOfOwner", "InvitedUsers", "Unknown" };
439 const char* RoomTypeNames[4] = { "Unknown", "Matchmaking", "Moderated", "Private" };
440 const char* ConnectionResultNames[8] = { "Connected", "Closed", "Lost", "Resumed", "KickedByRelogin", "KickedByGameServer", "GameLogicError", "Unknown" };
441 const char* JoinabilityNames[7] = { "Unknown", "AreIn", "AreKicked", "CanJoin", "IsFull", "NoViewer", "PolicyPrevents" };
442
443 void TestDumpNamedSession(const FNamedOnlineSession* NamedSession) const;
444 void TestDumpSession(const FOnlineSession* Session) const;
445 void TestDumpSessionSettings(const FOnlineSessionSettings* SessionSettings) const;
446}; // end of Session(OnlineSub) // end of Function
449typedef TSharedPtr<FOnlineSessionPico, ESPMode::ThreadSafe> FOnlineSessionPicoPtr;
FOnlineSessionPico class inherited from IOnlineSession(Unreal Engine).
Definition: OnlineSessionInterfacePico.h:72
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:395