7#include "CoreMinimal.h"
8#include "OnlineSubsystemPico.h"
9#include "Interfaces/OnlineSessionInterface.h"
10#include "OnlineSubsystemPicoPackage.h"
15#define SETTING_PICO_POOL FName(TEXT("PICOPOOL"))
17#define SETTING_PICO_BUILD_UNIQUE_ID FName(TEXT("PICOSESSIONBUILDUNIQUEID"))
19#define SEARCH_PICO_MODERATED_ROOMS_ONLY FName(TEXT("PICOMODERATEDROOMSONLY"))
21#define GET_MODERATEDROOMS_PAGEINDEX FName(TEXT("GETMODERATEDROOMSPAGEINDEX"))
23#define GET_MODERATEDROOMS_PAGESIZE FName(TEXT("GETMODERATEDROOMSPAGESIZE"))
25class FUniqueNetIdPico;
30DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameConnectionComplete,
int ,
bool );
31DECLARE_MULTICAST_DELEGATE_TwoParams(FOnGameRequestFailedComplete,
int ,
bool );
32DECLARE_MULTICAST_DELEGATE_OneParam(FOnGameStateResetComplete,
bool );
33DECLARE_MULTICAST_DELEGATE_OneParam(FOnMatchmakingCancel2Complete,
bool );
34DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomLeaveComplete,
const FString& ,
bool );
35DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomJoin2Complete,
const FString& ,
bool );
36DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomSetDescriptionComplete,
const FString& ,
bool );
37DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomKickUserComplete,
const FString& ,
bool );
38DECLARE_MULTICAST_DELEGATE_OneParam(FOnRoomUpdateOwnerComplete,
bool );
39DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateDataStoreComplete,
const FString& ,
bool );
40DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateMembershipLockStatusComplete,
const FString& ,
bool );
41DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomUpdateComplete,
const FString& ,
bool );
42DECLARE_MULTICAST_DELEGATE_TwoParams(FOnRoomInviteAcceptedComplete,
const FString& ,
bool );
65 TMap<FName, TSharedPtr<FNamedOnlineSession>> Sessions;
68 TSharedPtr<FOnlineSessionSearch> InProgressMatchmakingSearch;
71 FName InProgressMatchmakingSearchName;
79 TArray<TSharedRef<const FOnlineSessionSearchResult>> InviteAcceptedSessions;
82 TArray<TSharedRef<const FOnlineSessionSearchResult>> PendingInviteAcceptedSessions;
83 ppfID InviteAcceptedRoomID;
90 static void SaveLog(
const ELogVerbosity::Type Verbosity,
const FString& Log);
94 FDelegateHandle OnRoomNotificationUpdateHandle;
95 void OnRoomNotificationUpdate(ppfMessageHandle Message,
bool bIsError);
97 FDelegateHandle OnRoomNotificationInviteAcceptedHandle;
98 void OnRoomInviteAccepted(ppfMessageHandle Message,
bool bIsError);
100 FDelegateHandle OnMatchmakingNotificationMatchFoundHandle;
101 void OnMatchmakingNotificationMatchFound(ppfMessageHandle Message,
bool bIsError);
103 TSharedRef<FOnlineSession> CreateSessionFromRoom(ppfRoomHandle Room)
const;
105 void UpdateSessionFromRoom(FNamedOnlineSession& Session, ppfRoomHandle Room)
const;
106 void UpdateSessionSettingsFromDataStore(FOnlineSessionSettings& SessionSettings, ppfDataStoreHandle DataStore)
const;
108 void TickPendingInvites(
float DeltaTime);
110 bool CreateRoomSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
111 bool CreateMatchmakingSession(FNamedOnlineSession& Session, ppfRoomJoinPolicy JoinPolicy);
112 void OnCreateRoomComplete(ppfMessageHandle Message,
bool bIsError, FName SessionName);
135 bool UpdateRoomDataStore(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings);
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;
186 virtual bool UpdateSession(FName SessionName, FOnlineSessionSettings& UpdatedSessionSettings,
bool bShouldRefreshOnlineData =
true)
override;
196 virtual bool EndSession(FName SessionName)
override;
210 virtual bool DestroySession(FName SessionName,
const FOnDestroySessionCompleteDelegate& CompletionDelegate = FOnDestroySessionCompleteDelegate())
override;
221 virtual bool IsPlayerInSession(FName SessionName,
const FUniqueNetId& UniqueId)
override;
234 virtual bool StartMatchmaking(
const TArray< TSharedRef<const FUniqueNetId> >& LocalPlayers, FName SessionName,
const FOnlineSessionSettings& NewSessionSettings, TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
245 virtual bool CancelMatchmaking(int32 SearchingPlayerNum, FName SessionName)
override;
246 virtual bool CancelMatchmaking(
const FUniqueNetId& SearchingPlayerId, FName SessionName)
override;
257 virtual bool FindSessions(int32 SearchingPlayerNum,
const TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
258 virtual bool FindSessions(
const FUniqueNetId& SearchingPlayerId,
const TSharedRef<FOnlineSessionSearch>& SearchSettings)
override;
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;
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;
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;
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;
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;
318 FString InitStateErrorMessage = FString(
"Error: InitSuccess is false");
319 bool InitSuccess =
false;
320 bool OnUpdateRoomData(ppfRoomHandle Room, ppfID RoomId);
321 void OnRoomInviteAccepted(ppfID RoomId);
324 void OnGetAccessTokenComplete(ppfMessageHandle Message,
bool bIsError);
325 void OnGameInitializeComplete(ppfMessageHandle Message,
bool bIsError);
327 FDelegateHandle OnNetNotificationConnectionHandle;
328 void OnNetNotificationConnection(ppfMessageHandle Message,
bool bIsError);
330 FDelegateHandle OnNetNotificationRequestFailedHandle;
331 void OnNetNotificationRequestFailed(ppfMessageHandle Message,
bool bIsError);
333 FDelegateHandle OnNetNotificationGameStateResetHandle;
334 void OnNetNotificationGameStateReset(ppfMessageHandle Message,
bool bIsError);
336 FDelegateHandle OnMatchmakingNotificationCancel2Handle;
337 void OnMatchmakingNotificationCancel2(ppfMessageHandle Message,
bool bIsError);
339 FDelegateHandle OnRoomNotificationLeaveHandle;
340 void OnRoomNotificationLeave(ppfMessageHandle Message,
bool bIsError);
342 FDelegateHandle OnRoomNotificationJoin2Handle;
343 void OnRoomNotificationJoin2(ppfMessageHandle Message,
bool bIsError);
345 FDelegateHandle OnRoomNotificationSetDescriptionHandle;
346 void OnRoomNotificationSetDescription(ppfMessageHandle Message,
bool bIsError);
348 FDelegateHandle OnRoomNotificationKickUserHandle;
349 void OnRoomNotificationKickUser(ppfMessageHandle Message,
bool bIsError);
351 FDelegateHandle OnRoomNotificationUpdateOwnerHandle;
352 void OnRoomNotificationUpdateOwner(ppfMessageHandle Message,
bool bIsError);
354 FDelegateHandle OnRoomNotificationUpdateDataStoreHandle;
355 void OnRoomNotificationUpdateDataStore(ppfMessageHandle Message,
bool bIsError);
357 FDelegateHandle OnRoomNotificationUpdateMembershipLockStatusHandle;
358 void OnRoomNotificationUpdateMembershipLockStatus(ppfMessageHandle Message,
bool bIsError);
360 void LogRoomData(ppfRoomHandle Room)
const;
404 FOnRoomUpdateComplete RoomUpdateCallback;
405 FOnRoomInviteAcceptedComplete RoomInviteAcceptedCallback;
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;
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" };
424 void TestDumpNamedSession(
const FNamedOnlineSession* NamedSession)
const;
425 void TestDumpSession(
const FOnlineSession* Session)
const;
426 void TestDumpSessionSettings(
const FOnlineSessionSettings* SessionSettings)
const;
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