16 #include <nn/pia/session/session_Definitions.h>
17 #include <nn/pia/session/session_Mesh.h>
19 #include <nn/pia/common/common_AsyncContext.h>
20 #include <nn/pia/common/common_CryptoSetting.h>
21 #include <nn/pia/common/common_ObjList.h>
22 #include <nn/pia/common/common_String.h>
24 #include <nn/pia/transport/transport_NetworkFactory.h>
25 #include <nn/pia/transport/transport_Transport.h>
26 #include <nn/pia/transport/transport_Station.h>
27 #include <nn/pia/transport/transport_StationConnectionInfo.h>
37 class CreateSessionSetting;
38 class JoinRandomSessionSetting;
39 class JoinSessionSetting;
40 class SessionStatusCheckJob;
41 class CreateSessionJob;
42 class AutoMatchmakeJob;
43 class BrowseMatchmakeJob;
45 class DestroySessionJob;
46 class LeaveSessionJob;
47 class OpenParticipationJob;
48 class CloseParticipationJob;
49 class GenerateMatchmakeSystemPasswordJob;
50 class ClearMatchmakeSystemPasswordJob;
51 class JointSessionJob;
52 class UpdateSessionSettingJob;
53 class UpdateApplicationDataJob;
54 class CommunityManagementJob;
55 class CreateCommunitySetting;
56 class JoinCommunitySetting;
57 class CommunitySearchCriteria;
58 class ICommunityInfoList;
59 class UpdateCommunitySetting;
61 class StationIdStatusTable;
62 class SessionProtocol;
63 class IMatchmakeSession;
65 class ISessionInfoList;
66 class MeshLayerController;
67 class MatchNetworkFactory;
68 class SessionSearchCriteria;
70 class ISessionInfoList;
71 class MeshEventListener;
72 class UpdateSessionSetting;
73 class ProcessHostMigrationJob;
75 #if NN_PIA_NINTENDOSDK && NN_PIA_ENABLE_NSA
76 class AddPlayHistoryJob;
89 friend class SessionStatusCheckJob;
90 friend class CreateSessionJob;
91 friend class AutoMatchmakeJob;
92 friend class JoinSessionJob;
93 friend class JointSessionJob;
94 friend class DestroySessionJob;
95 friend class LeaveSessionJob;
96 friend class OpenParticipationJob;
97 friend class CloseParticipationJob;
98 friend class SessionProtocol;
99 friend class StationIdStatusTable;
100 friend class MeshEventListener;
101 friend class MeshLayerController;
102 friend class UpdateApplicationDataJob;
103 friend class UpdateSessionSettingJob;
104 friend class GenerateMatchmakeSystemPasswordJob;
105 friend class ClearMatchmakeSystemPasswordJob;
106 friend class CommunityManagementJob;
107 friend class ProcessHostMigrationJob;
108 #if NN_PIA_NINTENDOSDK && NN_PIA_ENABLE_NSA
109 friend class AddPlayHistoryJob;
140 DebugSetting(
bool argIsRelayEmulationEnabled =
false,
bool argIsMatchmakeAnalysisEnabled =
false,
bool argIsCheckMaxSilenceTimeEnabled =
true)
186 ModuleState_Initialized = 0,
187 ModuleState_StartupComplete
197 MatchmakeStatus_NotInSession = 0,
198 MatchmakeStatus_JoinedMatchmake,
199 MatchmakeStatus_EstablishedSession,
200 MatchmakeStatus_ChangingSession,
201 MatchmakeStatus_EstablishedJointSession
209 enum ConnectionStatus
211 ConnectionStatus_NotConnected,
212 ConnectionStatus_Connected,
213 ConnectionStatus_DisconnectedSession,
214 ConnectionStatus_DisconnectedNetwork,
215 ConnectionStatus_DisconnectedNetworkByDuplicateLogin,
216 ConnectionStatus_DisconnectedNetworkByWifiOff,
217 ConnectionStatus_DisconnectedNetworkBySleep
227 ProcessType_None = 0,
228 ProcessType_MergeSession,
229 ProcessType_MergeRandomSession,
230 ProcessType_DemergeSession,
231 ProcessType_EmigrateSession,
232 ProcessType_EmigrateRandomSession,
233 ProcessType_CreateJointSession,
234 ProcessType_JoinJointSession,
235 ProcessType_JoinRandomJointSession,
236 ProcessType_DestroyJointSession,
237 ProcessType_LeaveJointSession,
246 enum LeaveMeshProcessType
248 LeaveMeshProcessType_Unknown = 0,
249 LeaveMeshProcessType_Leave,
250 LeaveMeshProcessType_LeaveWithHm,
251 LeaveMeshProcessType_Destroy
288 Status_DisconnectedNetworkByWifiOff,
289 Status_DisconnectedNetworkBySleep
357 typedef common::ObjList<StationId> TStationIdList;
375 return &(*m_Iterator);
379 return m_Iterator == rhs.m_Iterator;
383 return !(*
this == rhs);
392 TStationIdList::Iterator m_Iterator;
402 : m_ConstIterator(it)
407 return *m_ConstIterator;
411 return &(*m_ConstIterator);
415 return m_ConstIterator == rhs.m_ConstIterator;
419 return !(*
this == rhs);
428 TStationIdList::ConstIterator m_ConstIterator;
1234 void ResetSessionSystemPassword();
1384 MeshLayerController* GetMeshLayerControllerPtr()
1386 return m_pMeshLayerController;
1744 bool IsMeshHost()
const;
1752 bool IsOwner()
const;
1796 return m_LocalStationId;
1809 return m_HostStationId;
1965 MatchmakeStatus GetMatchmakeStatus()
const
1967 return m_MatchmakeStatus;
1977 ConnectionStatus GetConnectionStatus()
const
1979 return m_ConnectionStatus;
1984 StationIdStatusTable* GetStationIdStatusTablePtr()
1986 return m_pStationIdStatusTable;
1988 SessionProtocol* GetSessionProtocolPtr()
1990 return m_pSessionProtocol;
2007 return GetCurrentSessionId();
2021 void SetSessionId(uint32_t sessionId)
2023 SetCurrentSessionId(sessionId);
2279 bool IsCreateJointSessionCompleted()
const;
2305 Result GetCreateJointSessionResult()
const;
2340 bool IsJoinJointSessionCompleted()
const;
2393 Result GetJoinJointSessionResult()
const;
2416 Result LeaveJointSessionAsync();
2427 bool IsLeaveJointSessionCompleted()
const;
2452 Result GetLeaveJointSessionResult()
const;
2788 int GetJointSequence()
const;
2794 int GetJoinSequence()
const;
2795 int GetJoinAutoMatchmakeSequence()
const;
2796 int GetJoinMeshSequence()
const;
2837 void CheckStatusAtChangeMeshState();
2862 MeshEventListener* GetMeshEventListenerPtr();
2863 transport::Transport::DisconnectionEventListener GetDisconnectionEventListener();
2864 static uint8_t CheckHostCandidateRankingCallback(
StationIndex targetStationIndex,
bool isHost);
2865 static uint32_t GetSessionIdCallback();
2875 void JoinNotice(
StationId targetStationId);
3104 virtual void Trace(uint64_t flag)
const;
3120 bool SaveWaitingStationIndex();
3121 uint32_t UpdateWaitingStationIndexNum();
3122 void SetWaitingOtherClientsFlag(
bool flag);
3126 IMatchmakeSession* GetCurrentMatchmakeSession()
3128 return m_pMatchmakeSessionPtrArray[CurrentMatchmakeSessionIndex()];
3130 IMatchmakeSession* GetBufferMatchmakeSession()
3132 return m_pMatchmakeSessionPtrArray[BufferMatchmakeSessionIndex()];
3134 const IMatchmakeSession* GetCurrentMatchmakeSession()
const
3136 return m_pMatchmakeSessionPtrArray[CurrentMatchmakeSessionIndex()];
3138 const IMatchmakeSession* GetBufferMatchmakeSession()
const
3140 return m_pMatchmakeSessionPtrArray[BufferMatchmakeSessionIndex()];
3142 ISessionInfoList* GetSessionInfoListPtr()
3144 return m_pSessionInfoList;
3146 ICommunityInfoList* GetCommunityInfoListPtr()
3148 return m_pCommunityInfoList;
3150 uint32_t GetCurrentSessionId()
const
3152 return m_SessionId[CurrentMatchmakeSessionIndex()];
3154 uint32_t GetBufferSessionId()
const
3156 return m_SessionId[BufferMatchmakeSessionIndex()];
3158 uint16_t GetCurrentMaxParticipantNum()
const
3160 return m_MaxParticipantNum[CurrentMatchmakeSessionIndex()];
3162 uint16_t GetBufferMaxParticipantNum()
const
3164 return m_MaxParticipantNum[BufferMatchmakeSessionIndex()];
3168 return m_SessionOpenStatus[CurrentMatchmakeSessionIndex()];
3172 return m_SessionOpenStatus[BufferMatchmakeSessionIndex()];
3176 bool IsJointSessionEnabled()
const
3178 return (m_pJointSessionJob != NULL);
3181 bool IsLeaveIgnorable()
const
3183 return m_LeaveIgnorableFlag;
3185 bool IsPostponeJoinEvent()
const
3187 return m_PostponeJoinEventFlag;
3189 ModuleState GetModuleState()
const
3191 return m_ModuleState;
3193 ProcessType GetJointSessionProcessType()
const;
3194 void SetHostMigrationOccurred(
bool b);
3195 bool IsHostMigrationOccurred()
const;
3196 transport::Station::IdentificationToken* GetMatchmakeAnalysisToken();
3197 void NotifyOwnershipChange(uint32_t sessionId,
PrincipalId ownerId);
3198 void NotifyLeave(uint32_t sessionId,
PrincipalId principalId);
3199 void NotifyUnregister(uint32_t sessionId);
3200 bool IsPlayersCountedAsParticipants()
const;
3201 uint8_t GetLocalPlayerCount()
const;
3202 uint16_t GetParticipantNum()
const;
3203 void UpdateSessionStationInfo();
3204 common::AsyncContext* GetInternalAsyncContext();
3205 bool IsPreparedForCleanup()
const;
3208 #if NN_PIA_NINTENDOSDK && NN_PIA_ENABLE_NSA
3210 struct PlayerHistory
3213 uint8_t screenNameSize;
3214 uint8_t screenNameEncodingType;
3215 uint8_t nameStringLanguage;
3216 transport::Station::PlayerRegistrationKey registrationKey;
3219 typedef common::ObjList<PlayerHistory> PlayerHistoryList;
3223 bool IsProcessingJoin()
const;
3224 bool IsWaitingOtherClients()
const;
3225 bool IsPostponeNotice()
const;
3226 bool IsProcessingLeave()
const;
3233 Session(
const Setting& setting);
3244 Session(
const Session&);
3250 Session& operator=(
const Session&);
3253 bool UpdateStationIdToBecomeHost();
3254 bool UpdateStationIdToBecomeClient();
3259 void CleanupStatus(
bool isPostponeCleanupLocalStationId =
false);
3261 void ChangeStatusToDisconnectedSession();
3262 void ChangeStatusToDisconnectedNetwork();
3264 void CancelJoinProcessByFatalError();
3267 static Session* s_pInstance;
3269 static DebugSetting s_DebugSetting;
3271 bool m_IsNecessaryServer;
3273 MeshLayerController* m_pMeshLayerController;
3275 SessionStatusCheckJob* m_pSessionStatusCheckJob;
3276 CreateSessionJob* m_pCreateSessionJob;
3277 AutoMatchmakeJob* m_pAutoMatchmakeJob;
3278 BrowseMatchmakeJob* m_pBrowseMatchmakeJob;
3279 JoinSessionJob* m_pJoinSessionJob;
3280 LeaveSessionJob* m_pLeaveSessionJob;
3281 DestroySessionJob* m_pDestroySessionJob;
3282 OpenParticipationJob* m_pOpenParticipationJob;
3283 CloseParticipationJob* m_pCloseParticipationJob;
3285 GenerateMatchmakeSystemPasswordJob* m_pGenerateMatchmakeSystemPasswordJob;
3286 ClearMatchmakeSystemPasswordJob* m_pClearMatchmakeSystemPasswordJob;
3288 common::String* m_pSessionPassword;
3290 JointSessionJob* m_pJointSessionJob;
3292 UpdateSessionSettingJob* m_pUpdateSessionSettingJob;
3293 UpdateApplicationDataJob* m_pUpdateApplicationDataJob;
3295 CommunityManagementJob* m_pCommunityManagementJob;
3297 SessionSearchCriteria* m_pPrimarySessionSearchCriteria;
3298 SessionSearchCriteria* m_pSecondarySessionSearchCriteria;
3301 void* m_pSessionEventParam;
3304 StationIdStatusTable* m_pStationIdStatusTable;
3306 uint32_t m_SessionProtocolHandle;
3307 SessionProtocol* m_pSessionProtocol;
3309 ModuleState m_ModuleState;
3310 MatchmakeStatus m_MatchmakeStatus;
3312 ConnectionStatus m_ConnectionStatus;
3320 enum AsyncProcessingName
3322 AsyncProcessingName_Nothing = 0,
3323 AsyncProcessingName_JoinRandomSession,
3324 AsyncProcessingName_BrowseSession,
3325 AsyncProcessingName_CreateSession,
3326 AsyncProcessingName_JoinSession,
3327 AsyncProcessingName_LeaveSession,
3328 AsyncProcessingName_OpenSession,
3329 AsyncProcessingName_CloseSession,
3330 AsyncProcessingName_GenerateMatchmakeSystemPassword,
3331 AsyncProcessingName_ClearMatchmakeSystemPassword,
3332 AsyncProcessingName_CreateJointSession,
3333 AsyncProcessingName_JoinJointSession,
3334 AsyncProcessingName_JoinRandomJointSession,
3335 AsyncProcessingName_DestroyJointSession,
3336 AsyncProcessingName_LeaveJointSession,
3337 AsyncProcessingName_OpenJointSession,
3338 AsyncProcessingName_CloseJointSession,
3339 AsyncProcessingName_UpdateSessionSetting,
3340 AsyncProcessingName_UpdateJointSessionSetting,
3341 AsyncProcessingName_CreateCommunity,
3342 AsyncProcessingName_JoinCommunity,
3343 AsyncProcessingName_BrowseCommunity,
3344 AsyncProcessingName_DestroyCommunity,
3345 AsyncProcessingName_LeaveCommunity,
3346 AsyncProcessingName_RequestSessionInfo,
3347 AsyncProcessingName_RequestJointSessionInfo,
3348 AsyncProcessingName_UpdateCommunity
3351 void ResetInternalAsyncState();
3352 bool IsAsyncProcessCompleted(AsyncProcessingName processingName)
const;
3353 Result GetAsyncProcessResult(AsyncProcessingName processingName)
const;
3354 Result CancelAsyncProcess(AsyncProcessingName processingName);
3356 Result OpenSessionCore(uint32_t sessionId, IMatchmakeSession* pMatchmakeSession,
const UpdateSessionSetting* pUpdateSessionSetting);
3357 Result CloseSessionCore(uint32_t sessionId, IMatchmakeSession* pMatchmakeSession);
3358 Result UpdateSessionSettingAsyncCore(uint32_t targetSessionId, IMatchmakeSession* pMatchmakeSession,
const UpdateSessionSetting* pUpdateSessionSetting,
bool isOpenSession);
3360 common::AsyncContext m_InternalContext;
3361 AsyncProcessingName m_CurrentAsyncProcessingName;
3363 MeshEventListener* m_pMeshEventListener;
3367 uint32_t m_WaitingStationIndexBitmap;
3368 bool m_WaitingOtherClientsStationIdFlag;
3369 bool LeaveNoticeToWaitingStationIndex(
StationIndex leaveStationIndex);
3370 void ClearWaitingStationIndex();
3373 bool m_LeaveIgnorableFlag;
3374 bool m_PostponeJoinEventFlag;
3375 void SetLeaveIgnorableFlagEnabled(
bool isLeaveIgnorable)
3377 m_LeaveIgnorableFlag = isLeaveIgnorable;
3379 void SetPostponeJoinEventEnabled(
bool isPostponeJoinEvent)
3381 m_PostponeJoinEventFlag = isPostponeJoinEvent;
3384 uint8_t CurrentMatchmakeSessionIndex()
const
3386 return m_CurrentMatchmakeSessionIndex;
3388 uint8_t BufferMatchmakeSessionIndex()
const
3390 return (m_CurrentMatchmakeSessionIndex == 0 ? 1 : 0);
3392 void SetCurrentSessionId(uint32_t sessionId)
3394 m_SessionId[CurrentMatchmakeSessionIndex()] = sessionId;
3396 void SetBufferSessionId(uint32_t sessionId)
3398 m_SessionId[BufferMatchmakeSessionIndex()] = sessionId;
3400 void SetCurrentMaxParticipantNum(uint16_t num)
3402 m_MaxParticipantNum[CurrentMatchmakeSessionIndex()] = num;
3404 void SetBufferMaxParticipantNum(uint16_t num)
3406 m_MaxParticipantNum[BufferMatchmakeSessionIndex()] = num;
3408 void SetJoinRandomScore(uint32_t score)
3410 m_JoinRandomScore = score;
3411 m_IsJoinRandomScoreEnabled =
true;
3413 void SetJoinRandomJointScore(uint32_t score)
3415 m_JoinRandomJointScore = score;
3416 m_IsJoinRandomJointScoreEnabled =
true;
3419 uint16_t m_MaxParticipantNum[2];
3420 uint8_t m_CurrentMatchmakeSessionIndex;
3421 IMatchmakeSession* m_pMatchmakeSessionPtrArray[2];
3422 ISessionInfoList* m_pSessionInfoList;
3423 uint32_t m_SessionId[2];
3424 ICommunityInfoList* m_pCommunityInfoList;
3429 void ChangeStationIdConvertEnableFlag(
bool flag);
3431 TStationIdList m_ValidStationIdList;
3432 void* m_pValidStationIdListBuffer;
3433 void validateStationId(
StationId targetStationId);
3434 void invalidateStationId(
StationId targetStationId);
3436 uint32_t m_SessionIdOfJointSessionHost;
3440 bool m_IsHostMigrationOccurred;
3441 transport::Station::IdentificationToken m_MatchmakeAnalysisToken;
3443 uint16_t m_PlayerNum;
3444 uint16_t m_ParticipantNum;
3446 uint32_t m_JoinRandomScore;
3447 bool m_IsJoinRandomScoreEnabled;
3448 uint32_t m_JoinRandomJointScore;
3449 bool m_IsJoinRandomJointScoreEnabled;
3451 #if NN_PIA_NINTENDOSDK && NN_PIA_ENABLE_NSA
3452 void* m_pPlayerHistoryListBuffer;
3453 PlayerHistoryList m_PlayerHistoryList;
3454 AddPlayHistoryJob* m_pAddPlayHistoryJob;