📄 cmpackqueue.cpp
字号:
#include "CMPacket.h"
#include <windows.h>
#include "CMPackQueue.h"
using namespace MatrixCore::Network;
//-------------------------------------------------------------------------------------------------------
// Name :: CMPackQueue()
// Create Date :: 2004/01/13
// Description :: 积己磊
// param ::
// Return Value ::
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
CMPackQueue::CMPackQueue()
{
m_pDataBuf = (char *) new char[PACKDATASIZE];
m_pBuf = (_PackData *) new _PackData[PACKQUEUESIZE];
if( m_pBuf == NULL || m_pDataBuf == NULL)
{
//::MessageBox
return ;
}
for(int i = 0; i < PACKQUEUESIZE ; i++)
{
m_pBuf[i].iNum = i;
m_pBuf[i].iSize = 0;
m_pBuf[i].s = INVALID_SOCKET;
m_pBuf[i].pPackDataPoint = NULL;
}
m_pDataHeadPos = m_pDataTailPos = m_pDataBuf;
m_pHeadPos = m_pBuf;
m_pTailPos = m_pBuf;
m_nHead = 0 ;
m_nTail= 0;
m_nPackSize = 0;
//农府萍拿 冀记 檬扁拳.
InitializeCriticalSection(&m_PushCS);
InitializeCriticalSection(&m_PopCS);
}
//-------------------------------------------------------------------------------------------------------
// Name :: ~CMPackQueue()
// Create Date :: 2004/01/13
// Description :: 家戈磊
// param ::
// Return Value ::
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
CMPackQueue::~CMPackQueue()
{
m_pDataHeadPos = m_pDataTailPos = NULL;
if(m_pDataBuf != NULL)
{
delete [] m_pDataBuf;
m_pDataBuf = NULL;
}
if(m_pBuf != NULL)
{
delete m_pBuf;
m_pBuf = NULL;
}
DeleteCriticalSection(&m_PushCS);
DeleteCriticalSection(&m_PopCS);
}
//-------------------------------------------------------------------------------------------------------
// Name :: PointPush()
// Create Date :: 2004/01/13
// Description :: 钮俊 单捞鸥甫 笼绢持绰促.
// param ::
// void* pPushData : void 器牢磐屈
// int iSize : 菩哦 辨捞..
// Return Value :: 力措肺 甸绢啊搁 TRUE
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
BOOL CMPackQueue::PackPush(SOCKET s,char* pPushData , int iSize ,DWORD dwRandomID ,CMOVERLAPPED* pOverlapped)
{
char * pOldDataHeadPos;
__try {
EnterCriticalSection( &m_PushCS );
//
pOldDataHeadPos = m_pDataHeadPos;
// 钮俊 单捞鸥啊 呈公 腹捞 甸绢哎版快 例措 吧府搁 救瞪 何盒...~!!
if(m_nPackSize == (PACKQUEUESIZE-1) )
{
return FALSE;
}
// 单捞鸥 钮啊 菜蛮惑怕. 八荤 窍绊 逞败霖促.
// 持阑荐 乐绰 单捞鸥 荤捞令甫 拌魂俊 巢篮 傍埃捞 利栏搁.. 单捞鸥 菊俊辑何磐 促矫 持绰促.
if(m_pDataTailPos >= pOldDataHeadPos)
{
if(m_pDataTailPos + PACKETBUFFERMAXSIZE > m_pDataBuf + PACKDATASIZE)
{
m_pDataTailPos = m_pDataBuf;
if(m_pDataTailPos + PACKETBUFFERMAXSIZE > pOldDataHeadPos && m_nPackSize != 0)
{
// 皋葛府啊 菜蛮 惑怕..
return FALSE;
}
}
}
else
{
if(m_pDataTailPos + PACKETBUFFERMAXSIZE > pOldDataHeadPos)
{
// 皋葛府啊 菜蛮 惑怕..
return FALSE;
}
}
//立加 辆丰矫 皋葛府甫 秦力 窍骨肺 咯扁俊 吧府霸 等促..
if(m_pDataTailPos == NULL)
return FALSE;
memcpy(m_pDataTailPos,pPushData,iSize);
memset(m_pDataTailPos+iSize,'\0',1); // 场何盒俊 '0' 技泼 ?
m_pTailPos->pPackDataPoint = m_pDataTailPos;
m_pTailPos->s = s;
m_pTailPos->iSize = iSize;
m_pTailPos->dwSockID = dwRandomID;
m_pTailPos->pOverlapped = pOverlapped;
// 持篮 单捞鸥 父怒 捞悼 茄促.
m_pDataTailPos += (iSize + 1);
//钮 付瘤阜俊 持菌促 促矫 贸澜何磐 笼绢 持绰促..
if(m_nTail == PACKQUEUESIZE-1)
{
m_pTailPos = m_pBuf;
m_nTail = 0;
}
else
{
// 促澜 单捞鸥 困摹肺 器牢磐 捞悼
m_pTailPos++;
m_nTail++;
}
// 滴俺 鞍捞 遏 吧府绰 何盒 吝夸
InterlockedIncrement(&m_nPackSize);
}
__finally
{
LeaveCriticalSection( &m_PushCS );
}
return TRUE;
}
//-------------------------------------------------------------------------------------------------------
// Name :: _PackData* PointPop()
// Create Date :: 2004/01/13
// Description :: 钮俊辑 扑阑 茄促.
// param ::
// Return Value :: 单捞鸥啊 绝绰版快 NULL
// Bug Report :: 唱吝俊 佬绰 何盒捞 钢萍 静饭靛啊 酒聪扼搁 农府萍拿 康开阑 绝局 霖促.
//-------------------------------------------------------------------------------------------------------
_PackData* CMPackQueue::PackPop()
{
_PackData *PopData ;
__try {
EnterCriticalSection( &m_PopCS );
if(m_nPackSize <= 0)
{
//单捞鸥啊 绝绰 版快.
return NULL;
}
PopData = m_pHeadPos;
//钮 付瘤阜俊辑 佬菌促 促矫 贸澜何磐 笼绢 持绰促..
if(m_nHead == PACKQUEUESIZE-1)
{
m_pHeadPos = m_pBuf;
m_nHead = 0;
}
else
{
// 促澜俊 持阑荐 困摹肺 器牢磐 捞悼
m_pHeadPos++;
m_nHead ++;
}
m_pDataHeadPos += (PopData->iSize + 1);
if(m_pDataHeadPos + PACKETBUFFERMAXSIZE > m_pDataBuf + PACKDATASIZE)
{
m_pDataHeadPos = m_pDataBuf;
}
// 滴俺 鞍捞 遏 吧府绰 何盒 吝夸
::InterlockedDecrement(&m_nPackSize);
}
__finally
{
LeaveCriticalSection( &m_PopCS );
}
return PopData;
}
//-------------------------------------------------------------------------------------------------------
// Name :: BOOL PointReturn(_PackData* pRtnData)
// Create Date :: 2004/01/13
// Description :: pop茄 单捞鸥甫 促佬绢 客辑 静绊 抄饶 皋葛府甫 檬扁拳 窍绰 窃荐..
// param ::
// Return Value :: 后单捞鸥 傍埃捞扼搁 FASLE
// 力措肺 馆券 窍看促搁. TRUE
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
BOOL CMPackQueue::PointReturn(_PackData* pRtnData)
{
if(pRtnData == NULL || pRtnData->pPackDataPoint == NULL)
return FALSE;
memset(pRtnData->pPackDataPoint,0,pRtnData->iSize +1); // 且鞘夸绰 绝促.. ? 唱吝俊 瘤况林磊..
pRtnData->pPackDataPoint = NULL;
pRtnData->iSize = 0;
pRtnData->s = INVALID_SOCKET;
return TRUE;
}
//-------------------------------------------------------------------------------------------------------
// Name :: IsEmpty()
// Create Date :: 2004/01/13
// Description :: 钮俊 单捞鸥啊 乐绰瘤甫 八荤茄促.
// param ::
// Return Value :: 钮俊 单捞鸥啊 茄俺扼档 乐促搁 FASLE
// 茄俺档 绝促搁.. TRUE
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
BOOL CMPackQueue::IsEmpty()
{
if( m_nPackSize == 0)
return TRUE;
return FALSE;
}
//-------------------------------------------------------------------------------------------------------
// Name :: void Reset()
// Create Date :: 2004/01/13
// Description :: 皋葛府甫 檬扁拳 矫挪促.
// param ::
// Return Value ::
// Bug Report ::
//-------------------------------------------------------------------------------------------------------
void CMPackQueue::Reset()
{
__try {
EnterCriticalSection( &m_PopCS );
EnterCriticalSection( &m_PushCS );
for(int i = 0; i < PACKQUEUESIZE ; i++)
{
m_pBuf[i].iNum = i;
m_pBuf[i].iSize = 0;
m_pBuf[i].s = INVALID_SOCKET;
m_pBuf[i].pPackDataPoint = NULL;
}
m_nHead = 0;
m_nTail = 0;
m_nPackSize = 0;
m_pHeadPos = m_pBuf;
m_pTailPos = m_pBuf;
m_pDataHeadPos = m_pDataTailPos = m_pDataBuf;
//农府萍拿 冀记 檬扁拳.
InitializeCriticalSection(&m_PushCS);
InitializeCriticalSection(&m_PopCS);
}
__finally
{
LeaveCriticalSection( &m_PopCS );
LeaveCriticalSection( &m_PushCS );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -