forked from LosaDev/ls-2019-source
LosaDev source snapshot 2019
This commit is contained in:
commit
c198676e97
20588 files changed
+8812878
No files matched your search
@@ -0,0 +1,117 @@
|
||||
|
||||
|
||||
#include "../stdafx.h"
|
||||
#include "SendBuffer.h"
|
||||
|
||||
SendBuffer::SendBuffer()
|
||||
{
|
||||
InitBuffer();
|
||||
}
|
||||
|
||||
SendBuffer::~SendBuffer()
|
||||
{
|
||||
ClearBuffer();
|
||||
}
|
||||
|
||||
void SendBuffer::InitBuffer()
|
||||
{
|
||||
memset(m_pBuffer, 0, sizeof(m_pBuffer) );
|
||||
m_pStart = m_pEnd = m_pBuffer;
|
||||
m_iRestCnt = 0;
|
||||
m_bBlock = false;
|
||||
}
|
||||
|
||||
void SendBuffer::ClearBuffer()
|
||||
{
|
||||
memset(m_pBuffer, 0, sizeof(m_pBuffer) );
|
||||
m_pStart = m_pEnd = m_pBuffer;
|
||||
m_iRestCnt = 0;
|
||||
m_bBlock = false;
|
||||
}
|
||||
|
||||
bool SendBuffer::EnqueueData( const char *pData, int iPacketSize)
|
||||
{
|
||||
if( m_iRestCnt + iPacketSize > MAX_BUFFER )
|
||||
return false;
|
||||
|
||||
memcpy(m_pEnd, pData, iPacketSize);
|
||||
|
||||
int iExtra = 0;
|
||||
iExtra = m_pEnd + iPacketSize - m_pBuffer - MAX_BUFFER;
|
||||
if( iExtra >= 0) // MAX_TEMP_BUFF 까지 복사가 되었는지
|
||||
{
|
||||
memcpy(m_pBuffer, m_pBuffer + MAX_BUFFER, iExtra);
|
||||
m_pEnd = m_pBuffer + iExtra;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pEnd += iPacketSize;
|
||||
}
|
||||
|
||||
m_iRestCnt += iPacketSize;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int SendBuffer::DequeueData(int iTransfered)
|
||||
{
|
||||
int iExtra = m_pStart + iTransfered - m_pBuffer - MAX_BUFFER;
|
||||
int iRestSize = 0;
|
||||
|
||||
if( iExtra >= 0)
|
||||
m_pStart = m_pBuffer + iExtra;
|
||||
else
|
||||
m_pStart += iTransfered;
|
||||
|
||||
m_iRestCnt -= iTransfered;
|
||||
iRestSize = m_iRestCnt;
|
||||
|
||||
if( iRestSize > 0)
|
||||
{
|
||||
if( iRestSize > MAX_TEMP_BUFF ) iRestSize = MAX_TEMP_BUFF;
|
||||
|
||||
iExtra = m_pBuffer + MAX_BUFFER - m_pStart;
|
||||
|
||||
if( iExtra < iRestSize ) // 앞쪽에 있는 데이터를 뒤로 복사해옴
|
||||
{
|
||||
memcpy( m_pBuffer + MAX_BUFFER, m_pBuffer, iRestSize - iExtra );
|
||||
}
|
||||
}
|
||||
|
||||
return iRestSize;
|
||||
}
|
||||
|
||||
int SendBuffer::GetRestCnt()
|
||||
{
|
||||
int iRestSize = m_iRestCnt;
|
||||
int iExtra = 0;
|
||||
|
||||
if( iRestSize > 0)
|
||||
{
|
||||
if( iRestSize > MAX_TEMP_BUFF ) iRestSize = MAX_TEMP_BUFF;
|
||||
|
||||
iExtra = m_pBuffer + MAX_BUFFER - m_pStart;
|
||||
|
||||
if( iExtra < iRestSize )
|
||||
{
|
||||
memcpy( m_pBuffer + MAX_BUFFER, m_pBuffer, iRestSize - iExtra);
|
||||
}
|
||||
}
|
||||
|
||||
return iRestSize;
|
||||
}
|
||||
|
||||
char* SendBuffer::GetQueuePtr() const
|
||||
{
|
||||
return m_pStart;
|
||||
}
|
||||
|
||||
void SendBuffer::SetBlock( bool bBlock )
|
||||
{
|
||||
m_bBlock = bBlock;
|
||||
}
|
||||
|
||||
bool SendBuffer::IsBlocked() const
|
||||
{
|
||||
return m_bBlock;
|
||||
}
|
||||
Reference in new issue
Block a user