コード例 #1
0
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;
		}
	}
}
コード例 #2
0
ファイル: CHANDLE.cpp プロジェクト: FujiokaNaoto/DirectX_Base
/// デフォルトコンストラクタ
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);
}
コード例 #3
0
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--;
	}
}
コード例 #4
0
ファイル: CHANDLE.cpp プロジェクト: FujiokaNaoto/DirectX_Base
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;
}