/********************************************************************
*********
Description:添加数据到缓存
Input:pBuff[in]-待添加的数据;nLen[in]-待添加数据长度
Return: 如果当前缓冲区没有足够的空间存放 pBuff则返回 FALSE;否则返回
TRUE。
*********************************************************************
*********/
BOOL CDataBufferPool::AddBuff( char *pBuff, int nLen )
{
m_cs.Lock();///临界区锁
if ( nLen < 0 )
{
m_cs.Unlock();
return FALSE;
}
if ( nLen <= GetFreeSize() )///判断剩余空间是否足够存放 nLen长的数据
{
memcpy(m_pBuff + m_nOffset, pBuff, nLen);
m_nOffset += nLen;
}
else///若不够则扩充原有的空间
{
char *p = m_pBuff;
m_nSize += nLen*2;//每次增长 2*nLen
m_pBuff = new char[m_nSize];
memcpy(m_pBuff,p,m_nOffset);
delete []p;
memcpy(m_pBuff + m_nOffset, pBuff, nLen);
m_nOffset += nLen;
m_cs.Unlock();
return FALSE;
}
m_cs.Unlock();
return TRUE;
}
/********************************************************************
*********
Description:获取一个完整的包
Input:Buf[out]-获取到的数据;nLen[out]-获取到的数据长度