OROCHI
 
Loading...
Searching...
No Matches
GxP2PSessionManager.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_P2P_NAMESPACE_BEGIN()
14
15//===========================================================================
17//===========================================================================
19{
20 //-----------------------------------------------------------
22 //-----------------------------------------------------------
24public:
25 // friend宣言
26 friend class GxP2PSessionManager;
27
29 static constexpr nu32 INVALID_STATION_INDEX = static_cast<nu32>(-1);
30private:
32 static constexpr nu32 IPADDRESS_STRING_MAX = GxMath::VALUE_16;
33
35 //-----------------------------------------------------------
37 //-----------------------------------------------------------
39public:
41 GxP2PStation(void){ clear(); }
44
46 void clear(void);
47
49 //-----------------------------------------------------------
51 //-----------------------------------------------------------
53public:
55 constexpr nu32 getIndex(void) const { return _index; }
57 GX_FORCE_INLINE b32 isLocal(void) const { return _isLocal; }
59 GX_FORCE_INLINE b32 isHost(void) const { return _isHost; }
61 GX_FORCE_INLINE b32 isActive(void) const { return _isActive; }
63 GX_FORCE_INLINE b32 isReady(void) const { return _isReady; }
65 constexpr nu32 getPingAverage(void) const { return _pingAverage; }
67 constexpr nu32 getIPAddress(void) const { return _sockAddress.sin_addr.s_addr; }
69 constexpr nu32 getPort(void) const { return _sockAddress.sin_port; }
71 constexpr GX_CSTR getIPAddressString(void) const { return _ipAddress; }
72#if GX_DEVELOP
74 constexpr nu32 getRecievePacketBytesMomentary(void) const { return _recievePacketBytesMomentary; }
76 constexpr nu32 getSendPacketBytesMomentary(void) const { return _sendPacketBytesMomentary; }
78 constexpr nu32 getRecievePacketBytesPeek(void) const { return _recievePacketBytesPeek; }
80 constexpr nu32 getSendPacketBytesPeek(void) const { return _sendPacketBytesPeek; }
82 constexpr nu32 getRecievePacketCountMomentary(void) const { return _recievePacketCountMomentary; }
84 constexpr nu32 getSendPacketCountMomentary(void) const { return _sendPacketCountMomentary; }
86 constexpr nu32 getRecievePacketCountPeek(void) const { return _recievePacketCountPeek; }
88 constexpr nu32 getSendPacketCountPeek(void) const { return _sendPacketCountPeek; }
89#endif // GX_DEVELOP
90
92 //-----------------------------------------------------------
94 //-----------------------------------------------------------
96private:
97 nu32 _index;
98 b32 _isLocal;
99 b32 _isHost;
100 b32 _isActive;
101 b32 _isReady;
102 nu32 _pingAverage;
103 sockaddr_in _sockAddress;
104#if GX_DEVELOP
105 nu32 _recievePacketBytesMomentary;
106 nu32 _sendPacketBytesMomentary;
107 nu32 _recievePacketBytesPeek;
108 nu32 _sendPacketBytesPeek;
109 nu32 _recievePacketCountMomentary;
110 nu32 _sendPacketCountMomentary;
111 nu32 _recievePacketCountPeek;
112 nu32 _sendPacketCountPeek;
113#endif // GX_DEVELOP
114 GX_CHAR _ipAddress[IPADDRESS_STRING_MAX];
115
117};
118
119//===========================================================================
121//===========================================================================
123{
124 //-----------------------------------------------------------
126 //-----------------------------------------------------------
128public:
129 // フレンド宣言
130 friend class GxP2PMessageManager;
131
132private:
133 // プライベート定数定義
135 static constexpr nu32 DEBUG_SERVER_PRINT_LEVEL = 3;
137 static constexpr nu16 DEBUG_SERVER_RECV_PORT = 6200;
139 static constexpr nu16 DEBUG_SERVER_SEND_PORT = 6199;
141 static constexpr nu32 DEBUG_SERVER_MAGIC_NUMBER = 0x22222222;
142
143public:
144 // パブリック定数定義
146 static constexpr ns32 LOCAL_GAMER_MAX = 1;
148 static constexpr ns32 NETWORK_GAMER_MAX = 8;
150 static constexpr nu32 IPADDRESS_STRING_MAX = 16;
152 static constexpr nu32 DEFAULT_USE_PORT = 6221;
154 static constexpr nu32 DEFAULT_SYSTEM_LINK_PORT = 6220;
156 static constexpr nu32 DEFAULT_MAGIC_NUMBER = 0x00DCBA98;
158 static constexpr nu32 SEARCH_SESSION_MAX = MyNetworkSession::SYSTEMLINK_HOST_MAX;
159
161 enum class CREATE_MODE
162 {
163 LAN = 0,
164 INET
165 };
166
168 enum class LEAVE_MODE
169 {
170 EXCLUSION = 0,
171 TOLERANCE,
173 };
174
176 enum class EVENT
177 {
178 NONE = 0,
179 JOIN,
180 LEAVE,
181 DESTROY,
182 START_GAME,
183 END_GAME
184 };
185
187 enum class ERROR_TYPE
188 {
189 NONE = 0,
190
191 INVALID = -1,
192 NOTFOUND = -2,
193 HOST_END = -3,
194 DISCONNECT = -4,
195 NOT_HOST = -5,
196 NOT_SESSION = -6,
197 ALREADY_DONE = -7,
198 };
199
201 enum class ASYNC_PROCESS
202 {
203 NONE = 0,
209 };
210
212 enum class ASYNC_RESULT
213 {
214 PROGRESS = 0,
215 SUCCESS,
216 FAILED
217 };
218
221 {
222 union
223 {
225 nu64 _host;
226 } _union;
227 nu32 _magic;
228 };
229
236
239 {
241 //-----------------------------------------------------------
243 //-----------------------------------------------------------
245 public:
247 GxDebugServerInformation(GX_CSTR ip, ns32 printLV = DEBUG_SERVER_PRINT_LEVEL, nu16 recievePort = DEBUG_SERVER_RECV_PORT, nu16 sendPort = DEBUG_SERVER_SEND_PORT, nu32 magicNumber = DEBUG_SERVER_MAGIC_NUMBER)
248 : _ipAddress(ip)
249 , _printLV(printLV)
250 , _recievePort(recievePort)
251 , _sendPort(sendPort)
252 , _magicNumber(magicNumber)
253 {}
254
256 //-----------------------------------------------------------
258 //-----------------------------------------------------------
260
261 GX_CSTR _ipAddress;
262 ns32 _printLV;
266
268 };
269
272
273private:
275 class GxP2PAsyncThread : public GxThread
276 {
277 //-----------------------------------------------------------
279 //-----------------------------------------------------------
281 public:
283 static constexpr s32 WAIT_INFINITY = -1;
284
286 //-----------------------------------------------------------
288 //-----------------------------------------------------------
290 public:
292 void threadMain(void* pArgument) override;
293
295 GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond = WAIT_INFINITY) { return _startEvent.waitEvent(milliSecond); }
297 GX_FORCE_INLINE b32 setStartEvent(void) { return _startEvent.setEvent(); }
298
300 //-----------------------------------------------------------
302 //-----------------------------------------------------------
304 private:
305 GxEvent _startEvent;
306
308 };
309
311 //-----------------------------------------------------------
313 //-----------------------------------------------------------
315
316public:
321
323 b32 initialize(nu32 port = DEFAULT_USE_PORT, nu32 magicNumber = DEFAULT_MAGIC_NUMBER, nu32 systemLinkPort = DEFAULT_SYSTEM_LINK_PORT);
325 void terminate(void);
326
328 //-----------------------------------------------------------
330 //-----------------------------------------------------------
332public:
334 b32 update(nu32 elapsedMilliSecond);
335
338
339#if GX_DEVELOP
341 b32 initializeDebugServer(const GxDebugServerInformation& debugServerInformation);
343 void terminateDebugServer(void);
344#endif // GX_DEVELOP
345
349 b32 joinSession(GX_CSTR address);
351 b32 joinSession(nu32 address);
353 b32 joinSession(const GxSessionInformation& session);
355 b32 leaveSession(void);
357 b32 searchSession(GxSessionInformation* pDst, nu32* pNum);
359 b32 kickoutSession(const GxP2PStation& station);
360
364 b32 joinSessionAsync(GX_CSTR address);
366 b32 joinSessionAsync(nu32 address);
368 b32 joinSessionAsync(const GxSessionInformation& session);
372 b32 searchSessionAsync(GxSessionInformation* pDst, u32* pNum);
374 b32 kickoutSessionAsync(const GxP2PStation& station);
375
376public:
378 void readyGameSession(void);
380 b32 startGameSession(const GxSessionParameter* pParam = nullptr);
382 b32 endGameSession(void);
383
384private:
386 b32 getLocalNetworkGamer(MyNetLib::MyNetworkGamerLocal& dst);
387
389 b32 open(void);
391 b32 close(void);
392
394 void setErrorValue(MyNetLib::GPlatform::PLATFORM_RETURN error);
396 void setErrorValue(MyNetLib::SGS_Enum error);
398 void setErrorValue(MyNetLib::SGE_Enum error);
400 void setErrorValue(MyNetLib::GK_Enum error);
401
403 constexpr void setAsyncRequest(ASYNC_PROCESS request) { _asyncRequest = request; _asyncResult = ASYNC_RESULT::PROGRESS; _errorType = ERROR_TYPE::NONE; }
405 constexpr ASYNC_PROCESS getAsyncRequest(void) const { return _asyncRequest; }
407 GX_FORCE_INLINE b32 isConflictAsyncRequest(void) const { return (_asyncRequest != ASYNC_PROCESS::NONE); }
409 constexpr void setAsyncResult(ASYNC_RESULT result, ERROR_TYPE error) { _asyncRequest = ASYNC_PROCESS::NONE; _asyncResult = result; _errorType = error; }
411 void waitAsyncResult(void);
412
414 void clearStation(void);
415
417 static nu32 atoiIPAddress(GX_CSTR ipAddress);
418
420 static ns32 __stdcall callbackJoinedGamer(void* pObject, nu32 gamerId);
422 static ns32 __stdcall callbackLeftGamer(void* pObject, nu32 gamerId);
424 static ns32 __stdcall callbackFindHost(void* pObject, nu64 hosts[], nu32 magic[]);
426 static ns32 __stdcall callbackEndSession(void* pObject, MyNetLib::SEC_Enum error);
428 static ns32 __stdcall callbackStartGame(void* pObject);
430 static ns32 __stdcall callbackEndGame(void* pObject);
431
433 //-----------------------------------------------------------
435 //-----------------------------------------------------------
437public:
439 GX_FORCE_INLINE MyNetLib::MyNetworkSession* getSessionInstance(void) { return &_sessionInstance; }
440
442 constexpr GX_CSTR getIPAddressString(void) const { return _ipAddress; }
444 constexpr ASYNC_RESULT getAsyncResult(void) const { return _asyncResult; }
446 constexpr ERROR_TYPE getError(void) const { return _errorType; }
447
449 const GxP2PStation* getStation(void) const;
451 const GxP2PStation* getStation(nu32 index) const;
453 const GxP2PStation* getStationHost(void) const;
455 constexpr nu32 getStationNum(void) const { return _stationNum; }
456
458 GX_FORCE_INLINE b32 isJoined(void) const { return (getStation() != nullptr); }
460 GX_FORCE_INLINE b32 isHost(void) const { return _sessionInstance.IsHost(); }
462 b32 isReady(void) const;
464 b32 isGameSession(void) const;
465
467 static void getIPAddressFromValue(GX_STR pDst, u32 address);
469 static void getIPAddressFromHost(GX_STR pDst, u64 host);
470
471#if GX_DEVELOP
473 GX_FORCE_INLINE void setDebugSimulatePacketLatency(nu32 milliSeconds) { _sessionInstance.setDebugSimulatePacketLatency(milliSeconds); }
475 GX_FORCE_INLINE nu32 getDebugSimulatePacketLatency(void) const { return _sessionInstance.getDebugSimulatePacketLatency(); }
477 GX_FORCE_INLINE void setDebugSimulatePacketLost(nf32 probability) { _sessionInstance.setDebugSimulatePacketLost(probability); }
479 GX_FORCE_INLINE nf32 getDebugSimulatePacketLost(void) const { return _sessionInstance.getDebugSimulatePacketLost(); }
480#endif // GX_DEVELOP
481
483 //-----------------------------------------------------------
485 //-----------------------------------------------------------
487private:
488 MyNetLib::MyNetworkSession _sessionInstance;
489 GX_CHAR _ipAddress[IPADDRESS_STRING_MAX];
490 nu32 _port;
491 nu32 _magicNumber;
492 nu32 _systemLinkPort;
493
494 EVENT_CALLBACK_FUNCTION _pEventCallback;
496 nu32 _stationNum;
497
498 b32 _isOpenSession;
499 b32 _isGameSession;
500#if GX_DEVELOP
501 b32 _isUseDebugServer;
502#endif // GX_DEVELOP
503
504 GxP2PAsyncThread _thread;
505 b32 _isStopThread;
506 ASYNC_PROCESS _asyncRequest;
507 ASYNC_RESULT _asyncResult;
508 ERROR_TYPE _errorType;
509 MyNetLib::DCM_Enum _leaveMode;
510
511 nu32 _kickoutNo;
512
513 GxSessionInformation _joinHost;
514 GxSessionInformation* _pSearchResult;
515 nu32* _pSearchNum;
516
518};
519
520GX_P2P_NAMESPACE_END()
イベントクラス
Definition GxThread.h:132
b32 setEvent(void)
イベントを設定
Definition GxThread.cpp:268
b32 waitEvent(s32 milliSecond=-1)
イベント待機
Definition GxThread.cpp:291
static constexpr u32 VALUE_16
16
Definition GxMath.h:123
メッセージ通信マネージャクラス
Definition GxP2PMessageManager.h:22
P2Pセッションマネージャ
Definition GxP2PSessionManager.h:123
void terminate(void)
終了
Definition GxP2PSessionManager.cpp:132
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
@ LAN
LAN用セッション
@ INET
インターネット用セッション
static constexpr nu32 DEFAULT_USE_PORT
ディフォルト通信ポート番号
Definition GxP2PSessionManager.h:152
constexpr ASYNC_RESULT getAsyncResult(void) const
非同期処理結果取得
Definition GxP2PSessionManager.h:444
static void getIPAddressFromValue(GX_STR pDst, u32 address)
32bitアドレス情報 → IPアドレス取得
Definition GxP2PSessionManager.cpp:894
ERROR_TYPE
エラー定義 (要因)
Definition GxP2PSessionManager.h:188
@ ALREADY_DONE
既に実行されている
@ HOST_END
ホストが終了した
@ NOT_HOST
ホスト専用メソッドをクライアントがコールした
@ NOT_SESSION
セッションに参加していない
static constexpr ns32 LOCAL_GAMER_MAX
ローカルゲーマー数 (※1固定)
Definition GxP2PSessionManager.h:146
static constexpr ns32 NETWORK_GAMER_MAX
ゲーマー数 (※最大接続人数)
Definition GxP2PSessionManager.h:148
b32 joinSession(GX_CSTR address)
セッション参加 (IP文字列指定)
Definition GxP2PSessionManager.cpp:301
void registerEventCallback(EVENT_CALLBACK_FUNCTION callback)
イベントコールバック関数登録
Definition GxP2PSessionManager.cpp:174
constexpr nu32 getStationNum(void) const
ステーション数取得
Definition GxP2PSessionManager.h:455
b32 createSessionAsync(CREATE_MODE mode)
セッション作成 [非同期]
Definition GxP2PSessionManager.cpp:482
b32 initialize(nu32 port=DEFAULT_USE_PORT, nu32 magicNumber=DEFAULT_MAGIC_NUMBER, nu32 systemLinkPort=DEFAULT_SYSTEM_LINK_PORT)
初期化
Definition GxP2PSessionManager.cpp:89
GxP2PSessionManager(void)
デフォルトコンストラクタ
Definition GxP2PSessionManager.cpp:49
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
constexpr GX_CSTR getIPAddressString(void) const
IPアドレス文字列取得
Definition GxP2PSessionManager.h:442
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
ASYNC_PROCESS
非同期処理内容
Definition GxP2PSessionManager.h:202
@ JOIN_SESSION
セッション参加
@ LEAVE_SESSION
セッション離脱
@ KICKOUT_SESSION
セッションキックアウト
@ CREATE_SESSION
セッション生成
@ SEARCH_SESSION
セッション探索
~GxP2PSessionManager(void)
デストラクタ
Definition GxP2PSessionManager.cpp:77
b32 endGameSession(void)
ゲームセッション終了 (ホスト専用)
Definition GxP2PSessionManager.cpp:769
static constexpr nu32 SEARCH_SESSION_MAX
探索セッション最大数
Definition GxP2PSessionManager.h:158
b32 isGameSession(void) const
ゲームセッション中判定
Definition GxP2PSessionManager.cpp:884
static void getIPAddressFromHost(GX_STR pDst, u64 host)
64bitホスト情報 → IPアドレス取得
Definition GxP2PSessionManager.cpp:916
LEAVE_MODE
セッション離脱モード
Definition GxP2PSessionManager.h:169
@ EXCLUSION
除外モード (クライアント間で切断が発生したら、片方がセッションから弾かれる)
@ CLIENT_SERVER
C/Sモード (クライアント間の切断は無視)
@ TOLERANCE
慣用モード (クライアント間で切断が発生しても、セッションに残る)
b32 searchSession(GxSessionInformation *pDst, nu32 *pNum)
セッション探索
Definition GxP2PSessionManager.cpp:422
b32 searchSessionAsync(GxSessionInformation *pDst, u32 *pNum)
セッション探索 [非同期]
Definition GxP2PSessionManager.cpp:647
b32 update(nu32 elapsedMilliSecond)
更新
Definition GxP2PSessionManager.cpp:219
b32 startGameSession(const GxSessionParameter *pParam=nullptr)
ゲームセッション開始 (ホスト専用)
Definition GxP2PSessionManager.cpp:731
void readyGameSession(void)
ゲームセッション準備
Definition GxP2PSessionManager.cpp:708
b32 leaveSession(void)
セッション離脱
Definition GxP2PSessionManager.cpp:390
constexpr ERROR_TYPE getError(void) const
エラー情報取得
Definition GxP2PSessionManager.h:446
b32 isReady(void) const
ゲームセッション準備確認 (ホスト専用)
Definition GxP2PSessionManager.cpp:849
GX_FORCE_INLINE MyNetLib::MyNetworkSession * getSessionInstance(void)
MyNetLibセッションインスタンス取得
Definition GxP2PSessionManager.h:439
static constexpr nu32 IPADDRESS_STRING_MAX
IPアドレス文字列最大長
Definition GxP2PSessionManager.h:150
EVENT
イベント定義
Definition GxP2PSessionManager.h:177
@ JOIN
プレイヤー参加
@ START_GAME
ゲーム開始
@ DESTROY
セッション破棄
@ END_GAME
ゲーム終了
@ LEAVE
プレイヤー離脱
GX_FORCE_INLINE b32 isHost(void) const
セッションホスト判定
Definition GxP2PSessionManager.h:460
Stationクラス
Definition GxP2PSessionManager.h:19
GX_FORCE_INLINE b32 isActive(void) const
アクティブ判定
Definition GxP2PSessionManager.h:61
~GxP2PStation(void)
デストラクタ
Definition GxP2PSessionManager.h:43
constexpr nu32 getIndex(void) const
インデックス取得
Definition GxP2PSessionManager.h:55
constexpr nu32 getPort(void) const
ポート値取得
Definition GxP2PSessionManager.h:69
constexpr nu32 getIPAddress(void) const
IPアドレス値取得
Definition GxP2PSessionManager.h:67
GxP2PStation(void)
デフォルトコンストラクタ
Definition GxP2PSessionManager.h:41
constexpr GX_CSTR getIPAddressString(void) const
IPアドレス文字列取得
Definition GxP2PSessionManager.h:71
constexpr nu32 getPingAverage(void) const
通信速度平均値取得
Definition GxP2PSessionManager.h:65
GX_FORCE_INLINE b32 isReady(void) const
ゲーム移行可能判定
Definition GxP2PSessionManager.h:63
GX_FORCE_INLINE b32 isLocal(void) const
ローカルステーション判定
Definition GxP2PSessionManager.h:57
GX_FORCE_INLINE b32 isHost(void) const
ホストステーション判定
Definition GxP2PSessionManager.h:59
スレッドクラス
Definition GxThread.h:177
デバッグサーバ情報
Definition GxP2PSessionManager.h:239
ns32 _printLV
情報出力LV
Definition GxP2PSessionManager.h:262
nu16 _sendPort
送信ポート
Definition GxP2PSessionManager.h:264
nu16 _recievePort
受信ポート
Definition GxP2PSessionManager.h:263
GxDebugServerInformation(GX_CSTR ip, ns32 printLV=DEBUG_SERVER_PRINT_LEVEL, nu16 recievePort=DEBUG_SERVER_RECV_PORT, nu16 sendPort=DEBUG_SERVER_SEND_PORT, nu32 magicNumber=DEBUG_SERVER_MAGIC_NUMBER)
コンストラクタ
Definition GxP2PSessionManager.h:247
nu32 _magicNumber
通信マジックナンバー
Definition GxP2PSessionManager.h:265
GX_CSTR _ipAddress
IPアドレス
Definition GxP2PSessionManager.h:261
セッション情報
Definition GxP2PSessionManager.h:221
nu64 _host
ホスト情報
Definition GxP2PSessionManager.h:225
nu32 _magic
通信用マジック番号
Definition GxP2PSessionManager.h:227
CREATE_MODE _mode
生成モード
Definition GxP2PSessionManager.h:224
セッションパラメータ
Definition GxP2PSessionManager.h:232
b32 _allowHostMigration
ホスト委譲許可フラグ (true:許可 false:不許可)
Definition GxP2PSessionManager.h:233
b32 _allowJoinOnTheWay
途中参加許可フラグ (true:許可 false:不許可)
Definition GxP2PSessionManager.h:234
32bitブーリアン
Definition GxDefine.h:173