OROCHI
 
Loading...
Searching...
No Matches
GxSysP2P.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_P2P_NAMESPACE_BEGIN()
14
15//===========================================================================
17//===========================================================================
18class GxSysP2P : public GxSysP2PBase
19{
20 //-------------------------------------------------------------
22 //-------------------------------------------------------------
24public:
25 // RTTI宣言
26 GX_RTTI_ABSTRACT_CLASS(GxSysP2P, GxSysP2PBase)
27 // ClassBase継承クラス用禁止宣言
29
30
32 {
33 NETWORK_SERVICE_MESSAGE = 0x00000001,
34 NETWORK_SERVICE_SYNC = 0x00000002,
35 NETWORK_SERVICE_DUPLICATE = 0x00000004,
36 NETWORK_SERVICE_REMOTE = 0x00000010,
37 NETWORK_SERVICE_UPNP = 0x00001000,
38
39 NETWORK_SERVICE_ALL = 0xFFFFFFFF
40 };
41
43 enum class NETWORK_RESULT
44 {
45 SUCCESS = 0,
46 ERROR_INVALID = -1
47 };
48
50 static constexpr u32 STATION_MAX = GxP2PSessionManager::NETWORK_GAMER_MAX;
51
53 //-------------------------------------------------------------
55 //-------------------------------------------------------------
57public:
59 GxSysP2P(void);
60
62 static void loadModule(void) {}
64 static void unloadModule(void) {}
65
67 void terminate(void) override;
68
72 virtual void endNetwork(void);
73
75 virtual b32 startService(u32 serviceFlags);
77 virtual void endService(u32 serviceFlags);
78
80 //-------------------------------------------------------------
82 //-------------------------------------------------------------
84public:
86 void update(void) override;
87
89 b32 createSession(GxP2PSessionManager::CREATE_MODE mode);
91 b32 joinSession(GX_CSTR address);
93 b32 joinSession(u32 address);
95 b32 joinSession(const GxP2PSessionManager::GxSessionInformation& session);
97 b32 leaveSession(void);
99 b32 searchSession(GxP2PSessionManager::GxSessionInformation* pDst, u32* pNum);
101 b32 kickoutSession(const GxP2PStation& station);
102
104 b32 createSessionAsync(GxP2PSessionManager::CREATE_MODE mode);
106 b32 joinSessionAsync(GX_CSTR address);
108 b32 joinSessionAsync(u32 address);
110 b32 joinSessionAsync(const GxP2PSessionManager::GxSessionInformation& session);
112 b32 leaveSessionAsync(void);
114 b32 searchSessionAsync(GxP2PSessionManager::GxSessionInformation* pDst, u32* pNum);
116 b32 kickoutSessionAsync(const GxP2PStation& station);
117
118public:
120 void readyGameSession(void);
122 b32 startGameSession(const GxP2PSessionManager::GxSessionParameter* pParam = nullptr);
124 b32 endGameSession(void);
125
127 static void callbackEvent(GxP2PSessionManager::EVENT type, GxP2PSessionManager::ERROR_TYPE error, u32 stationId);
128
130 //-----------------------------------------------------------
132 //-----------------------------------------------------------
134public:
136 GX_FORCE_INLINE GxP2PSessionManager::ASYNC_RESULT getAsyncResult(void) const { return (_pSessionManager) ? _pSessionManager->getAsyncResult() : GxP2PSessionManager::ASYNC_RESULT::SUCCESS; }
138 GX_FORCE_INLINE GxP2PSessionManager::ERROR_TYPE getError(void) const { return (_pSessionManager) ? _pSessionManager->getError() : GxP2PSessionManager::ERROR_TYPE::NONE; }
139
140 //---- ステーション情報
141
143 const GxP2PStation* getStation(void) const;
145 const GxP2PStation* getStation(u32 index) const;
147 const GxP2PStation* getStationHost(void) const;
149 u32 getStationNum(void) const;
151 u32 getStationId(void) const;
152
153 //---- サービス情報
154
156 GX_FORCE_INLINE b32 isServedSessionManager(void) const { return (_pSessionManager != nullptr); }
158 GX_FORCE_INLINE b32 isServedMessageManager(void) const { return (_pMessageManager != nullptr); }
160 GX_FORCE_INLINE b32 isServedSyncManager(void) const { return (_pSyncManager != nullptr); }
162 GX_FORCE_INLINE b32 isServedDuplicateManager(void) const { return (_pDuplicateManager != nullptr); }
164 GX_FORCE_INLINE b32 isServedRemoteManager(void) const { return (_pRemoteManager != nullptr); }
165#if defined(_WINDOWS)
167 GX_FORCE_INLINE b32 isServedUPnPManager(void) const { return (_pUPnPManager != nullptr); }
168#endif // _WINDOWS
169
170 //---- セッション情報
171
173 b32 isJoined(void) const;
175 b32 isHost(void) const;
177 b32 isReady(void) const;
179 b32 isGameSession(void) const;
180
182 constexpr GxP2PSessionManager* getSessionManager(void) const { return _pSessionManager; }
184 constexpr GxP2PMessageManager* getMessageManager(void) const { return _pMessageManager; }
186 constexpr GxP2PSyncManager* getSyncManager(void) const { return _pSyncManager; }
188 constexpr GxP2PDuplicateManager* getDuplicateManager(void) const { return _pDuplicateManager; }
190 constexpr GxP2PRemoteManager* getRemoteManager(void) const { return _pRemoteManager; }
191#if defined(_WINDOWS)
193 constexpr GxP2PUPnPManager* getUPnPManager(void) const { return _pUPnPManager; }
194#endif // _WINDOWS
195
197 //-------------------------------------------------------------
199 //-------------------------------------------------------------
201protected:
207#if defined(_WINDOWS)
208 GxP2PUPnPManager* _pUPnPManager;
209#endif // _WINDOWS
210
212};
213
214// アクセスインターフェース
215GX_FORCE_INLINE GxSysP2P* getGxSysP2P(void){ return static_cast<GxSysP2P*>(GxSysP2P::getSingletonPointer()); }
216
217//---------------------------------------------------------------------------
218// セッション作成
221//---------------------------------------------------------------------------
223{
224 return (_pSessionManager) ? _pSessionManager->createSession(mode) : static_cast<b32>(false);
225}
226
227//---------------------------------------------------------------------------
228// セッション参加 (IP文字列指定)
231//---------------------------------------------------------------------------
232GX_FORCE_INLINE b32 GxSysP2P::joinSession(GX_CSTR address)
233{
234 return (_pSessionManager) ? _pSessionManager->joinSession(address) : static_cast<b32>(false);
235}
236
237//---------------------------------------------------------------------------
238// セッション参加 (IP数値指定)
241//---------------------------------------------------------------------------
242GX_FORCE_INLINE b32 GxSysP2P::joinSession(u32 address)
243{
244 return (_pSessionManager) ? _pSessionManager->joinSession(address) : static_cast<b32>(false);
245}
246
247//---------------------------------------------------------------------------
248// セッション参加 (セッション指定)
251//---------------------------------------------------------------------------
253{
254 return (_pSessionManager) ? _pSessionManager->joinSession(session) : static_cast<b32>(false);
255}
256
257//---------------------------------------------------------------------------
258// セッション離脱
260//---------------------------------------------------------------------------
261GX_FORCE_INLINE b32 GxSysP2P::leaveSession(void)
262{
263 return (_pSessionManager) ? _pSessionManager->leaveSession() : static_cast<b32>(false);
264}
265
266//---------------------------------------------------------------------------
267// セッション探索
272//---------------------------------------------------------------------------
274{
275 return (_pSessionManager) ? _pSessionManager->searchSession(pDst, pNum) : static_cast<b32>(false);
276}
277
278//---------------------------------------------------------------------------
279// セッションメンバーキックアウト
282//---------------------------------------------------------------------------
283GX_FORCE_INLINE b32 GxSysP2P::kickoutSession(const GxP2PStation& station)
284{
285 return (_pSessionManager) ? _pSessionManager->kickoutSession(station) : static_cast<b32>(false);
286}
287
288//---------------------------------------------------------------------------
289// セッション作成 [非同期]
292//---------------------------------------------------------------------------
294{
295 return (_pSessionManager) ? _pSessionManager->createSessionAsync(mode) : static_cast<b32>(false);
296}
297
298//---------------------------------------------------------------------------
299// セッション参加 [非同期] (IP文字列指定)
302//---------------------------------------------------------------------------
303GX_FORCE_INLINE b32 GxSysP2P::joinSessionAsync(GX_CSTR address)
304{
305 return (_pSessionManager) ? _pSessionManager->joinSessionAsync(address) : static_cast<b32>(false);
306}
307
308//---------------------------------------------------------------------------
309// セッション参加 [非同期] (IP数値指定)
312//---------------------------------------------------------------------------
313GX_FORCE_INLINE b32 GxSysP2P::joinSessionAsync(u32 address)
314{
315 return (_pSessionManager) ? _pSessionManager->joinSessionAsync(address) : static_cast<b32>(false);
316}
317
318//---------------------------------------------------------------------------
319// セッション参加 [非同期] (LAN用)
322//---------------------------------------------------------------------------
324{
325 return (_pSessionManager) ? _pSessionManager->joinSessionAsync(session) : static_cast<b32>(false);
326}
327
328//---------------------------------------------------------------------------
329// セッション離脱 [非同期]
331//---------------------------------------------------------------------------
332GX_FORCE_INLINE b32 GxSysP2P::leaveSessionAsync(void)
333{
334 return (_pSessionManager) ? _pSessionManager->leaveSessionAsync() : static_cast<b32>(false);
335}
336
337//---------------------------------------------------------------------------
338// セッション探索 [非同期]
343// 探索完了時には実際に発見した数が pNum に格納されます
344//---------------------------------------------------------------------------
346{
347 return (_pSessionManager) ? _pSessionManager->searchSessionAsync(pDst, pNum) : static_cast<b32>(false);
348}
349
350//---------------------------------------------------------------------------
351// セッションメンバーキックアウト [非同期]
354//---------------------------------------------------------------------------
355GX_FORCE_INLINE b32 GxSysP2P::kickoutSessionAsync(const GxP2PStation& station)
356{
357 return (_pSessionManager) ? _pSessionManager->kickoutSessionAsync(station) : static_cast<b32>(false);
358}
359
360//---------------------------------------------------------------------------
361// ゲームセッション準備
362//---------------------------------------------------------------------------
363GX_FORCE_INLINE void GxSysP2P::readyGameSession(void)
364{
365 if( _pSessionManager )
366 {
368 }
369}
370
371//---------------------------------------------------------------------------
372// ゲームセッション開始 (ホスト専用)
375//---------------------------------------------------------------------------
377{
378 return (_pSessionManager) ? _pSessionManager->startGameSession(pParam) : static_cast<b32>(false);
379}
380
381//---------------------------------------------------------------------------
382// ゲームセッション終了 (ホスト専用)
384//---------------------------------------------------------------------------
385GX_FORCE_INLINE b32 GxSysP2P::endGameSession(void)
386{
387 return (_pSessionManager) ? _pSessionManager->endGameSession() : static_cast<b32>(false);
388}
389
390//---------------------------------------------------------------------------
391// ステーションID取得
393//---------------------------------------------------------------------------
394GX_FORCE_INLINE u32 GxSysP2P::getStationId(void) const
395{
396 const GxP2PStation* pStation = getStation();
397 return (pStation) ? pStation->getIndex() : static_cast<u32>(GX_INVALID_HANDLE);
398}
399
400//---------------------------------------------------------------------------
401// 自分ステーション取得
403//---------------------------------------------------------------------------
404GX_FORCE_INLINE const GxP2PStation* GxSysP2P::getStation(void) const
405{
406 return (_pSessionManager) ? _pSessionManager->getStation() : nullptr;
407}
408
409//---------------------------------------------------------------------------
410// 指定ステーション取得
412//---------------------------------------------------------------------------
413GX_FORCE_INLINE const GxP2PStation* GxSysP2P::getStation(u32 index) const
414{
415 return (_pSessionManager) ? _pSessionManager->getStation(index) : nullptr;
416}
417
418//---------------------------------------------------------------------------
419// ホストステーション取得
421//---------------------------------------------------------------------------
422GX_FORCE_INLINE const GxP2PStation* GxSysP2P::getStationHost(void) const
423{
424 return (_pSessionManager) ? _pSessionManager->getStationHost() : nullptr;
425}
426
427//---------------------------------------------------------------------------
428// ステーション数取得
430//---------------------------------------------------------------------------
431GX_FORCE_INLINE u32 GxSysP2P::getStationNum(void) const
432{
434}
435
436//---------------------------------------------------------------------------
437// セッション参加中判定
439//---------------------------------------------------------------------------
440GX_FORCE_INLINE b32 GxSysP2P::isJoined(void) const
441{
442 return (_pSessionManager) ? _pSessionManager->isJoined() : static_cast<b32>(false);
443}
444
445//---------------------------------------------------------------------------
446// セッションホスト判定
448//---------------------------------------------------------------------------
449GX_FORCE_INLINE b32 GxSysP2P::isHost(void) const
450{
451 return (_pSessionManager) ? _pSessionManager->isHost() : static_cast<b32>(false);
452}
453
454//---------------------------------------------------------------------------
455// ゲームセッション準備確認 (ホスト専用)
458// 1人でも準備未完了であれば false を返却します。
459// 定員と参加人数に関するチェックは行いませんので注意してください。
460//---------------------------------------------------------------------------
461GX_FORCE_INLINE b32 GxSysP2P::isReady(void) const
462{
463 return (_pSessionManager) ? _pSessionManager->isReady() : static_cast<b32>(false);
464}
465
466//---------------------------------------------------------------------------
467// ゲームセッション中判定
469//---------------------------------------------------------------------------
470GX_FORCE_INLINE b32 GxSysP2P::isGameSession(void) const
471{
472 return (_pSessionManager) ? _pSessionManager->isGameSession() : static_cast<b32>(false);
473}
474
475GX_P2P_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
複製オブジェクト通信マネージャクラス
Definition GxP2PDuplicateManager.h:24
メッセージ通信マネージャクラス
Definition GxP2PMessageManager.h:22
GxP2PRemoteManagerクラス
Definition GxP2PRemoteManager.h:23
P2Pセッションマネージャ
Definition GxP2PSessionManager.h:123
static constexpr nu32 DEFAULT_MAGIC_NUMBER
ディフォルトマジックナンバー
Definition GxP2PSessionManager.h:156
b32 leaveSessionAsync(void)
セッション離脱 [非同期]
Definition GxP2PSessionManager.cpp:616
ASYNC_RESULT
非同期処理結果
Definition GxP2PSessionManager.h:213
CREATE_MODE
セッション生成モード (MyNetLib::SessionTypeEnum 並びに準拠)
Definition GxP2PSessionManager.h:162
static constexpr nu32 DEFAULT_USE_PORT
ディフォルト通信ポート番号
Definition GxP2PSessionManager.h:152
ERROR_TYPE
エラー定義 (要因)
Definition GxP2PSessionManager.h:188
static constexpr ns32 NETWORK_GAMER_MAX
ゲーマー数 (※最大接続人数)
Definition GxP2PSessionManager.h:148
b32 joinSession(GX_CSTR address)
セッション参加 (IP文字列指定)
Definition GxP2PSessionManager.cpp:301
constexpr nu32 getStationNum(void) const
ステーション数取得
Definition GxP2PSessionManager.h:455
b32 createSessionAsync(CREATE_MODE mode)
セッション作成 [非同期]
Definition GxP2PSessionManager.cpp:482
static constexpr nu32 DEFAULT_SYSTEM_LINK_PORT
ディフォルトシステムリンク通信ポート番号
Definition GxP2PSessionManager.h:154
b32 kickoutSessionAsync(const GxP2PStation &station)
セッションメンバーキックアウト [非同期]
Definition GxP2PSessionManager.cpp:679
const GxP2PStation * getStationHost(void) const
ホストステーション取得
Definition GxP2PSessionManager.cpp:826
void(*) EVENT_CALLBACK_FUNCTION(GxP2PSessionManager::EVENT type, GxP2PSessionManager::ERROR_TYPE error, nu32 gamerId)
イベントコールバック関数定義
Definition GxP2PSessionManager.h:271
const GxP2PStation * getStation(void) const
自分ステーション取得
Definition GxP2PSessionManager.cpp:792
b32 kickoutSession(const GxP2PStation &station)
セッションメンバーキックアウト
Definition GxP2PSessionManager.cpp:452
GX_FORCE_INLINE b32 isJoined(void) const
セッション参加中判定
Definition GxP2PSessionManager.h:458
b32 joinSessionAsync(GX_CSTR address)
セッション参加 [非同期] (IP文字列指定)
Definition GxP2PSessionManager.cpp:514
b32 createSession(CREATE_MODE mode)
セッション作成
Definition GxP2PSessionManager.cpp:271
b32 endGameSession(void)
ゲームセッション終了 (ホスト専用)
Definition GxP2PSessionManager.cpp:769
b32 isGameSession(void) const
ゲームセッション中判定
Definition GxP2PSessionManager.cpp:884
b32 searchSession(GxSessionInformation *pDst, nu32 *pNum)
セッション探索
Definition GxP2PSessionManager.cpp:422
b32 searchSessionAsync(GxSessionInformation *pDst, u32 *pNum)
セッション探索 [非同期]
Definition GxP2PSessionManager.cpp:647
b32 startGameSession(const GxSessionParameter *pParam=nullptr)
ゲームセッション開始 (ホスト専用)
Definition GxP2PSessionManager.cpp:731
void readyGameSession(void)
ゲームセッション準備
Definition GxP2PSessionManager.cpp:708
b32 leaveSession(void)
セッション離脱
Definition GxP2PSessionManager.cpp:390
b32 isReady(void) const
ゲームセッション準備確認 (ホスト専用)
Definition GxP2PSessionManager.cpp:849
EVENT
イベント定義
Definition GxP2PSessionManager.h:177
GX_FORCE_INLINE b32 isHost(void) const
セッションホスト判定
Definition GxP2PSessionManager.h:460
Stationクラス
Definition GxP2PSessionManager.h:19
constexpr nu32 getIndex(void) const
インデックス取得
Definition GxP2PSessionManager.h:55
同期通信(ロックステップ)マネージャクラス
Definition GxP2PSyncManager.h:23
P2P通信システム基底クラス
Definition GxSysP2PBase.h:19
P2P通信システム
Definition GxSysP2P.h:19
GX_FORCE_INLINE b32 isServedDuplicateManager(void) const
非同期オブジェクト通信稼動中判定
Definition GxSysP2P.h:162
static void unloadModule(void)
モジュールのアンロード
Definition GxSysP2P.h:64
b32 isReady(void) const
ゲームセッション準備確認 (ホスト専用)
Definition GxSysP2P.h:461
static void callbackEvent(GxP2PSessionManager::EVENT type, GxP2PSessionManager::ERROR_TYPE error, u32 stationId)
イベントコールバック
Definition GxSysP2P.cpp:262
constexpr GxP2PDuplicateManager * getDuplicateManager(void) const
非同期オブジェクト通信マネージャ
Definition GxSysP2P.h:188
b32 leaveSessionAsync(void)
セッション離脱 [非同期]
Definition GxSysP2P.h:332
constexpr GxP2PMessageManager * getMessageManager(void) const
メッセージ通信マネージャ
Definition GxSysP2P.h:184
b32 isJoined(void) const
セッション参加中判定
Definition GxSysP2P.h:440
const GxP2PStation * getStationHost(void) const
ホストステーション取得
Definition GxSysP2P.h:422
GxP2PMessageManager * _pMessageManager
メッセージ通信マネージャ
Definition GxSysP2P.h:203
b32 isHost(void) const
セッションホスト判定
Definition GxSysP2P.h:449
GX_FORCE_INLINE GxP2PSessionManager::ASYNC_RESULT getAsyncResult(void) const
非同期処理結果取得
Definition GxSysP2P.h:136
NETWORK_SERVICE
ネットワークサービス
Definition GxSysP2P.h:32
const GxP2PStation * getStation(void) const
自分ステーション取得
Definition GxSysP2P.h:404
b32 startGameSession(const GxP2PSessionManager::GxSessionParameter *pParam=nullptr)
ゲームセッション開始 (ホスト専用)
Definition GxSysP2P.h:376
u32 getStationId(void) const
ステーションID取得
Definition GxSysP2P.h:394
b32 kickoutSessionAsync(const GxP2PStation &station)
セッションメンバーキックアウト [非同期]
Definition GxSysP2P.h:355
GxP2PRemoteManager * _pRemoteManager
リモートコールバックマネージャ
Definition GxSysP2P.h:206
constexpr GxP2PSyncManager * getSyncManager(void) const
同期通信マネージャ
Definition GxSysP2P.h:186
b32 joinSession(GX_CSTR address)
セッション参加 (IP文字列指定)
Definition GxSysP2P.h:232
GxP2PSyncManager * _pSyncManager
同期通信マネージャ
Definition GxSysP2P.h:204
GX_FORCE_INLINE b32 isServedMessageManager(void) const
メッセージ通信稼働中判定
Definition GxSysP2P.h:158
GxP2PSessionManager * _pSessionManager
セッションマネージャ
Definition GxSysP2P.h:202
b32 createSession(GxP2PSessionManager::CREATE_MODE mode)
セッション作成
Definition GxSysP2P.h:222
b32 createSessionAsync(GxP2PSessionManager::CREATE_MODE mode)
セッション作成 [非同期]
Definition GxSysP2P.h:293
GX_FORCE_INLINE b32 isServedSyncManager(void) const
同期通信稼動中判定
Definition GxSysP2P.h:160
b32 searchSession(GxP2PSessionManager::GxSessionInformation *pDst, u32 *pNum)
セッション探索
Definition GxSysP2P.h:273
GX_FORCE_INLINE GxP2PSessionManager::ERROR_TYPE getError(void) const
エラー情報取得
Definition GxSysP2P.h:138
u32 getStationNum(void) const
ステーション数取得
Definition GxSysP2P.h:431
void readyGameSession(void)
ゲームセッション準備
Definition GxSysP2P.h:363
b32 isGameSession(void) const
ゲームセッション中判定
Definition GxSysP2P.h:470
b32 joinSessionAsync(GX_CSTR address)
セッション参加 [非同期] (IP文字列指定)
Definition GxSysP2P.h:303
static void loadModule(void)
モジュールのロード
Definition GxSysP2P.h:62
GxP2PDuplicateManager * _pDuplicateManager
非同期オブジェクト通信マネージャ
Definition GxSysP2P.h:205
GX_FORCE_INLINE b32 isServedSessionManager(void) const
セッション処理動作中判定
Definition GxSysP2P.h:156
NETWORK_RESULT
ネットワーク処理開始結果定義
Definition GxSysP2P.h:44
b32 searchSessionAsync(GxP2PSessionManager::GxSessionInformation *pDst, u32 *pNum)
セッション探索 [非同期]
Definition GxSysP2P.h:345
constexpr GxP2PRemoteManager * getRemoteManager(void) const
リモートコールバックマネージャ
Definition GxSysP2P.h:190
b32 kickoutSession(const GxP2PStation &station)
セッションメンバーキックアウト
Definition GxSysP2P.h:283
b32 leaveSession(void)
セッション離脱
Definition GxSysP2P.h:261
GX_FORCE_INLINE b32 isServedRemoteManager(void) const
リモートコールバック稼動中判定
Definition GxSysP2P.h:164
b32 endGameSession(void)
ゲームセッション終了 (ホスト専用)
Definition GxSysP2P.h:385
constexpr GxP2PSessionManager * getSessionManager(void) const
セッションマネージャ
Definition GxSysP2P.h:182
static constexpr GxSysP2PBase * getSingletonPointer(void)
Definition GxSingleton.h:59
セッション情報
Definition GxP2PSessionManager.h:221
セッションパラメータ
Definition GxP2PSessionManager.h:232
32bitブーリアン
Definition GxDefine.h:173