OROCHI
 
Loading...
Searching...
No Matches
GxP2PMessageManager.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_P2P_NAMESPACE_BEGIN()
14
15//---- クラス宣言
17
18//===========================================================================
20//===========================================================================
22{
23 //-----------------------------------------------------------
25 //-----------------------------------------------------------
27public:
29 static constexpr size_t INNER_BUFFER_SIZE = GxMath::VALUE_512;
30
33 {
34 nu32 _id;
35 nu32 _kind;
36 size_t _size;
37 };
38
40 static const size_t MESSAGE_HEADER_SIZE = sizeof(GxMessageHeader);
42 static const size_t MESSAGE_BODY_MAX = INNER_BUFFER_SIZE - MESSAGE_HEADER_SIZE;
43
46 {
48 GX_CHAR _body[MESSAGE_BODY_MAX];
49 };
50
52 static const size_t MESSAGE_QUEUE_BLOCK_NUM = GxMath::VALUE_128;
53
55 //-----------------------------------------------------------
57 //-----------------------------------------------------------
59public:
64
66 void initialize(GxP2PSessionManager* pSessionManager);
67
69 //-----------------------------------------------------------
71 //-----------------------------------------------------------
73public:
75 b32 sendMessageUnicast(nu32 id, nu32 kind, const void* pData, size_t size);
77 b32 sendMessageMulticast(nu32 kind, const void* pData, size_t size);
78
79private:
81 size_t createMessage(GX_STR dstBuffer, size_t bufferSize, nu32 kind, const void* pData, size_t size);
83 b32 transportMessage(void);
85 b32 transportMessage(nu8 id, const void* pBuffer, size_t size);
87 b32 transportMessage(const void* pBuffer, size_t size);
88
89public:
91 void update(void);
93 b32 dequeueRecieveQueue(GxP2PMessageManager::GxMessageAll& output);
95 GX_FORCE_INLINE nu32 getRecieveQueueNum(void) const { return _recieveQueue.getQueueNum(); }
96#if GX_DEVELOP
98 GX_FORCE_INLINE nu32 getRecieveQueueMaxNum(void) const { return _recieveQueue.getMaxQueueNum(); }
99#endif // GX_DEVELOP
100
101private:
103 void analyzeRecvMessage(GX_STR buffer, size_t size);
104
106 //-----------------------------------------------------------
108 //-----------------------------------------------------------
110private:
112 constexpr GX_CSTR getSendBuffer(void) const { return _sendBuffer; }
114 GX_FORCE_INLINE GX_STR getFreePointer(void) { return &_sendBuffer[_sendUsedSize]; }
116 constexpr size_t getFreeSize(void) const { return INNER_BUFFER_SIZE - _sendUsedSize; }
118 constexpr size_t getUsedSize(void) const { return _sendUsedSize; }
120 constexpr void addUsedSize(size_t size) { _sendUsedSize += size; }
122 constexpr void clearUsedSize(void) { _sendUsedSize = 0; }
123
125 //-----------------------------------------------------------
127 //-----------------------------------------------------------
129private:
130 GxP2PSessionManager* _pSessionManager;
131 GX_CHAR _recieveBuffer[INNER_BUFFER_SIZE];
132 GX_CHAR _sendBuffer[INNER_BUFFER_SIZE];
133 size_t _sendUsedSize;
135
137};
138
139GX_P2P_NAMESPACE_END()
static constexpr u32 VALUE_512
512
Definition GxMath.h:128
static constexpr u32 VALUE_128
128
Definition GxMath.h:126
メッセージ通信マネージャクラス
Definition GxP2PMessageManager.h:22
GX_FORCE_INLINE nu32 getRecieveQueueNum(void) const
受信キュー確認
Definition GxP2PMessageManager.h:95
Queueクラス
Definition GxP2PQueue.h:20
P2Pセッションマネージャ
Definition GxP2PSessionManager.h:123
メッセージ全体
Definition GxP2PMessageManager.h:46
GxMessageHeader _header
ヘッダー
Definition GxP2PMessageManager.h:47
メッセージヘッダー
Definition GxP2PMessageManager.h:33
nu32 _kind
メッセージ種類
Definition GxP2PMessageManager.h:35
nu32 _id
送信元インデックス
Definition GxP2PMessageManager.h:34
size_t _size
データサイズ
Definition GxP2PMessageManager.h:36
32bitブーリアン
Definition GxDefine.h:173