void TcpTransport::ProcessData(std::list<std::string*>& outDataList) { while (m_recvBufUsed > int(sizeof(int))) { uint32_t msgLen = 0; msgLen = GetMsgSize(m_pRecvBuf); if (msgLen > m_recvBufSize) { if (ResizeBuf(msgLen)) { m_shrinkCheckCnt = DEFAULT_SHRINK_COUNT; } break; } else { TryShrink(msgLen); } if (m_recvBufUsed >= msgLen) { std::string* data = new std::string; data->assign(m_pRecvBuf,msgLen); outDataList.push_back(data); m_recvBufUsed -= msgLen; memmove(m_pRecvBuf, m_pRecvBuf + msgLen, m_recvBufUsed); } else { break; } } }
/// デフォルトコンストラクタ C_HANDLE::C_HANDLE( bool mem_init ) { m_pBuf = NULL; m_BufNum = 0; //確保中のバッファの量※ハンドル数 m_BufPos = 0; //バッファの位置 m_HandleNum = 0; if( mem_init == true ) ResizeBuf(512 * 4); }
void TcpTransport::TryShrink(uint32_t MsgLen) { m_shrinkMax = MsgLen > m_shrinkMax ? MsgLen : m_shrinkMax; if (m_shrinkCheckCnt == 0) { m_shrinkCheckCnt = DEFAULT_SHRINK_COUNT; if (m_recvBufSize > m_shrinkMax) { ResizeBuf(m_shrinkMax); } } else { m_shrinkCheckCnt--; } }
S_HANDLE C_HANDLE::CreateHandle(void *Adr) { assert(Adr); //値がNULLはハンドルにできません。 if(m_HandleNum * 4 > m_BufNum) { ResizeBuf(m_BufNum * 2); } do { m_BufPos++; if(m_BufPos >= m_BufNum) m_BufPos = 0; } while (m_pBuf[m_BufPos].Pointer); m_HandleNum++; m_pBuf[m_BufPos].Pointer = Adr; m_pBuf[m_BufPos].Count++; if(m_pBuf[m_BufPos].Count == 0) m_pBuf[m_BufPos].Count = 1; return (m_pBuf[m_BufPos].Count << 16) + m_BufPos; }