17#include "CoreMinimal.h"
18#include "OnlineSubsystemPico.h"
19#include "Interfaces/OnlineSessionInterface.h"
20#include "OnlineSubsystemPicoPackage.h"
25#define SETTING_PICO_POOL FName(TEXT("PICOPOOL"))
27#define SETTING_PICO_BUILD_UNIQUE_ID FName(TEXT("PICOSESSIONBUILDUNIQUEID"))
29#define SEARCH_PICO_MODERATED_ROOMS_ONLY FName(TEXT("PICOMODERATEDROOMSONLY"))
31#define GET_MODERATEDROOMS_PAGEINDEX FName(TEXT("GETMODERATEDROOMSPAGEINDEX"))
33#define GET_MODERATEDROOMS_PAGESIZE FName(TEXT("GETMODERATEDROOMSPAGESIZE"))
35class FUniqueNetIdPico;
36class FOnlineSessionInfoPico;
40DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameConnectionComplete,
int ,
bool );
41DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameRequestFailedComplete,
int ,
bool );
42DECLARE_MULTICAST_DELEGATE_OneParam(FOnGameStateResetComplete,
bool );
43DECLARE_MULTICAST_DELEGATE_OneParam(FOnMatchmakingCancel2Complete,
bool );
44DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomLeaveComplete,
const FString& ,
bool );
45DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomJoin2Complete,
const FString& ,
bool );
46DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomSetDescriptionComplete,
const FString& ,
bool );
47DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomKickUserComplete,
const FString& ,
bool );
48DECLARE_MULTICAST_DELEGATE_OneParam(FOnRoomUpdateOwnerComplete,
bool );
49DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateDataStoreComplete,
const FString& ,
bool );
50DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateMembershipLockStatusComplete,
const FString& ,
bool );
51DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomInviteAcceptedComplete,
const FString& ,
bool );
52DECLARE_MULTICAST_DELEGATE_FourParams(FOnPicoSessionUserInviteAcceptedComplete,
const bool ,
const int32 ,
const FString& ,
const FPicoOnlineSessionSearchResult& );
54DECLARE_MULTICAST_DELEGATE_FourParams(FOnRoomUpdateComplete,
const FString& ,
bool ,
int,
const FString& );
55DECLARE_MULTICAST_DELEGATE_FourParams(FOnMatchmakingFoundComplete,
const FString& ,
bool ,
int,
const FString& );
75 FOnlineSubsystemPico& PicoSubsystem;
78 TMap<FName, TSharedPtr<FNamedOnlineSession>> Sessions;
81 TSharedPtr<FOnlineSessionSearch> InProgressMatchmakingSearch;
84 FName InProgressMatchmakingSearchName;
92 TArray<TSharedRef<const FOnlineSessionSearchResult>> InviteAcceptedSessions;
95 TArray<TSharedRef<const FOnlineSessionSearchResult>> PendingInviteAcceptedSessions;
96 ppfID InviteAcceptedRoomID;
103 static void SaveLog(
const ELogVerbosity::Type Verbosity,
const FString& Log);
107 FDelegateHandle OnRoomNotificationUpdateHandle;
108 void OnRoomNotificationUpdate(ppfMessageHandle Message,
bool bIsError);
110 FDelegateHandle OnRoomNotificationInviteAcceptedHandle;
111 void OnRoomInviteAccepted(ppfMessageHandle Message,
bool bIsError);
113 FDelegateHandle OnMatchmakingNotificationMatchFoundHandle;
114 void OnMatchmakingNotificationMatchFound(ppfMessageHandle Message,
bool bIsError);
116 TSharedRef<FOnlineSession> CreateSessionFromRoom(ppfRoomHandle Room)
const;
118 void UpdateSessionFromRoom(FNamedOnlineSession& Session, ppfRoomHandle Room)
const;
119 void UpdateSessionSettingsFromDataStore(FOnlineSessionSettings& SessionSettings, ppfDataStoreHandle DataStore)
const;
121 void TickPendingInvites(
float DeltaTime);
123 bool CreateRoomSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
124 bool CreateMatchmakingSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
125 void OnCreateRoomComplete(ppfMessageHandle Message,
bool bIsError, FName SessionName);
148 bool UpdateRoomDataStore(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings);
176 virtual bool CreateSession(int32 HostingPlayerNum, FName SessionName,
const FOnlineSessionSettings& NewSessionSettings)
override;
177 virtual bool CreateSession(
const FUniqueNetId& HostingPlayerId, FName SessionName,
const FOnlineSessionSettings& NewSessionSettings)
override;
199 virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings,
bool bShouldRefreshOnlineData =
true)
override;
223 virtual bool DestroySession(FName SessionName,
const FOnDestroySessionCompleteDelegate& CompletionDelegate = FOnDestroySessionCompleteDelegate())
override;
247 virtual bool StartMatchmaking(
const TArray< TSharedRef<const FUniqueNetId> >& LocalPlayers, FName SessionName,
const FOnlineSessionSettings& NewSessionSettings, TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
259 virtual bool CancelMatchmaking(
const FUniqueNetId& SearchingPlayerId, FName SessionName)
override;
270 virtual bool FindSessions(int32 SearchingPlayerNum,
const TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
271 virtual bool FindSessions(
const FUniqueNetId& SearchingPlayerId,
const TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
284 virtual bool FindSessionById(
const FUniqueNetId& SearchingUserId,
const FUniqueNetId& SessionId,
const FUniqueNetId& FriendId,
const FOnSingleSessionResultCompleteDelegate& CompletionDelegate)
override;
285 virtual bool CancelFindSessions()
override;
286 virtual bool PingSearchResults(
const FOnlineSessionSearchResult& SearchResult)
override;
298 virtual bool JoinSession(int32 PlayerNum, FName SessionName,
const FOnlineSessionSearchResult& DesiredSession)
override;
299 virtual bool JoinSession(
const FUniqueNetId& PlayerId, FName SessionName,
const FOnlineSessionSearchResult& DesiredSession)
override;
301 virtual bool FindFriendSession(int32 LocalUserNum,
const FUniqueNetId& Friend)
override;
302 virtual bool FindFriendSession(
const FUniqueNetId& LocalUserId,
const FUniqueNetId& Friend)
override;
303 virtual bool FindFriendSession(
const FUniqueNetId& LocalUserId,
const TArray<TSharedRef<const FUniqueNetId>>& FriendList)
override;
305 virtual bool SendSessionInviteToFriend(int32 LocalUserNum, FName SessionName,
const FUniqueNetId& Friend)
override;
306 virtual bool SendSessionInviteToFriend(
const FUniqueNetId& LocalUserId, FName SessionName,
const FUniqueNetId& Friend)
override;
307 virtual bool SendSessionInviteToFriends(int32 LocalUserNum, FName SessionName,
const TArray< TSharedRef<const FUniqueNetId> >&
Friends)
override;
308 virtual bool SendSessionInviteToFriends(
const FUniqueNetId& LocalUserId, FName SessionName,
const TArray< TSharedRef<const FUniqueNetId> >&
Friends)
override;
309 virtual bool GetResolvedConnectString(FName SessionName, FString& ConnectInfo, FName PortType = NAME_GamePort)
override;
310 virtual bool GetResolvedConnectString(
const class FOnlineSessionSearchResult& SearchResult, FName PortType, FString& ConnectInfo)
override;
311 virtual FOnlineSessionSettings* GetSessionSettings(FName SessionName)
override;
312 virtual bool RegisterPlayer(FName SessionName,
const FUniqueNetId& PlayerId,
bool bWasInvited)
override;
313 virtual bool RegisterPlayers(FName SessionName,
const TArray< TSharedRef<const FUniqueNetId> >& Players,
bool bWasInvited =
false)
override;
314 virtual bool UnregisterPlayer(FName SessionName,
const FUniqueNetId& PlayerId)
override;
315 virtual bool UnregisterPlayers(FName SessionName,
const TArray< TSharedRef<const FUniqueNetId> >& Players)
override;
316 virtual void RegisterLocalPlayer(
const FUniqueNetId& PlayerId, FName SessionName,
const FOnRegisterLocalPlayerCompleteDelegate& Delegate)
override;
317 virtual void UnregisterLocalPlayer(
const FUniqueNetId& PlayerId, FName SessionName,
const FOnUnregisterLocalPlayerCompleteDelegate& Delegate)
override;
318 virtual int32 GetNumSessions()
override;
319 virtual void DumpSessionState()
override;
321 virtual TSharedPtr<const FUniqueNetId> CreateSessionIdFromString(
const FString& SessionIdStr)
override;
322 FNamedOnlineSession* GetNamedSession(FName SessionName)
override;
323 virtual void RemoveNamedSession(FName SessionName)
override;
324 virtual EOnlineSessionState::Type GetSessionState(FName SessionName)
const override;
325 virtual bool HasPresenceSession()
override;
326 class FNamedOnlineSession* AddNamedSession(FName SessionName,
const FOnlineSessionSettings& SessionSettings)
override;
327 class FNamedOnlineSession* AddNamedSession(FName SessionName,
const FOnlineSession& Session)
override;
331 FString InitStateErrorMessage = FString(
"Error: InitSuccess is false");
332 bool InitSuccess =
false;
333 bool OnUpdateRoomData(ppfRoomHandle Room, ppfID RoomId);
334 void OnRoomInviteAccepted(ppfID RoomId);
337 void OnGetAccessTokenComplete(ppfMessageHandle Message,
bool bIsError);
338 void OnGameInitializeComplete(ppfMessageHandle Message,
bool bIsError);
340 FDelegateHandle OnNetNotificationConnectionHandle;
341 void OnNetNotificationConnection(ppfMessageHandle Message,
bool bIsError);
343 FDelegateHandle OnNetNotificationRequestFailedHandle;
344 void OnNetNotificationRequestFailed(ppfMessageHandle Message,
bool bIsError);
346 FDelegateHandle OnNetNotificationGameStateResetHandle;
347 void OnNetNotificationGameStateReset(ppfMessageHandle Message,
bool bIsError);
349 FDelegateHandle OnMatchmakingNotificationCancel2Handle;
350 void OnMatchmakingNotificationCancel2(ppfMessageHandle Message,
bool bIsError);
352 FDelegateHandle OnRoomNotificationLeaveHandle;
353 void OnRoomNotificationLeave(ppfMessageHandle Message,
bool bIsError);
355 FDelegateHandle OnRoomNotificationJoin2Handle;
356 void OnRoomNotificationJoin2(ppfMessageHandle Message,
bool bIsError);
358 FDelegateHandle OnRoomNotificationSetDescriptionHandle;
359 void OnRoomNotificationSetDescription(ppfMessageHandle Message,
bool bIsError);
361 FDelegateHandle OnRoomNotificationKickUserHandle;
362 void OnRoomNotificationKickUser(ppfMessageHandle Message,
bool bIsError);
364 FDelegateHandle OnRoomNotificationUpdateOwnerHandle;
365 void OnRoomNotificationUpdateOwner(ppfMessageHandle Message,
bool bIsError);
367 FDelegateHandle OnRoomNotificationUpdateDataStoreHandle;
368 void OnRoomNotificationUpdateDataStore(ppfMessageHandle Message,
bool bIsError);
370 FDelegateHandle OnRoomNotificationUpdateMembershipLockStatusHandle;
371 void OnRoomNotificationUpdateMembershipLockStatus(ppfMessageHandle Message,
bool bIsError);
373 void LogRoomData(ppfRoomHandle Room)
const;
417 FOnMatchmakingFoundComplete MatchmakingFoundCallback;
418 FOnRoomUpdateComplete RoomUpdateCallback;
420 FOnRoomInviteAcceptedComplete RoomInviteAcceptedCallback;
421 FOnPicoSessionUserInviteAcceptedComplete PicoSessionUserInviteAcceptedCallback;
423 FOnGameConnectionComplete GameConnectionCallback;
424 FOnGameRequestFailedComplete GameRequestFailedCallback;
425 FOnGameStateResetComplete GameStateResetCallback;
426 FOnMatchmakingCancel2Complete MatchmakingCancel2Callback;
427 FOnRoomLeaveComplete RoomLeaveCallback;
428 FOnRoomJoin2Complete RoomJoin2Callback;
429 FOnRoomUpdateOwnerComplete RoomUpdateOwnerCallback;
431 FOnRoomSetDescriptionComplete RoomSetDescriptionCallback;
432 FOnRoomKickUserComplete RoomKickUserCallback;
433 FOnRoomUpdateDataStoreComplete RoomUpdateDataStoreCallback;
434 FOnRoomUpdateMembershipLockStatusComplete RoomUpdateMembershipLockStatusCallback;
436 const char* JoinPolicyNames[6] = {
"None",
"Everyone",
"FriendsOfMembers",
"FriendsOfOwner",
"InvitedUsers",
"Unknown" };
437 const char* RoomTypeNames[4] = {
"Unknown",
"Matchmaking",
"Moderated",
"Private" };
438 const char* ConnectionResultNames[8] = {
"Connected",
"Closed",
"Lost",
"Resumed",
"KickedByRelogin",
"KickedByGameServer",
"GameLogicError",
"Unknown" };
439 const char* JoinabilityNames[7] = {
"Unknown",
"AreIn",
"AreKicked",
"CanJoin",
"IsFull",
"NoViewer",
"PolicyPrevents" };
441 void TestDumpNamedSession(
const FNamedOnlineSession* NamedSession)
const;
442 void TestDumpSession(
const FOnlineSession* Session)
const;
443 void TestDumpSessionSettings(
const FOnlineSessionSettings* SessionSettings)
const;
447typedef TSharedPtr<FOnlineSessionPico, ESPMode::ThreadSafe> FOnlineSessionPicoPtr;
FOnlineSessionPico class inherited from IOnlineSession(Unreal Engine).
Definition: OnlineSessionInterfacePico.h:71
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