⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_msg_que.cpp

📁 墨香最新私服
💻 CPP
字号:
#include "main_msg_que.h"
#include "define.h"

CMsgQue*		g_pMsgQue = NULL;
CMsgQue::CMsgQue()
{
	memset(this,0,sizeof(CMsgQue));
}
BOOL CMsgQue::Initialize(DWORD dwMaxBufferSize)
{
	BOOL		bResult = FALSE;

	m_pBuffer = new char[dwMaxBufferSize+32];
	m_dwMaxBufferSize = dwMaxBufferSize;

	if (!m_pBuffer)
		goto lb_return;

	if (!m_pNext)
	{
		m_pNext = new CMsgQue;	
		m_pNext->m_pNext = this;
		m_pNext->Initialize(dwMaxBufferSize);
	}

	bResult = TRUE;

lb_return:
	return bResult;
}
BOOL CMsgQue::PushMsg(DWORD dwIndex,DWORD dwType,WSABUF* pBuf,DWORD dwNum,DWORD dwMsgSize)
{
	DWORD			i;
	BOOL			bResult = FALSE;
	MSG_CONTAINER*	pMsg;

	pMsg = (MSG_CONTAINER*)(m_pBuffer + m_dwBufferPosition);
	
	if ((dwType & MSG_TYPE_TCP_MASK) == MSG_TYPE_TCP_MASK)
	{
		if (m_dwBufferPosition + MSG_HEADER_SIZE > m_dwMaxBufferSize)
			goto lb_return;

		pMsg->m_dwConnectionIndex = dwIndex;
		pMsg->m_dwFlag = NULL;
		pMsg->m_dwSize = 0;
		pMsg->m_dwType = dwType;
		m_dwBufferPosition += MSG_HEADER_SIZE;
		m_dwMsgNum++;
		bResult = TRUE;
		goto lb_return;
	}

	if (m_dwBufferPosition + dwNum*MSG_HEADER_SIZE + dwMsgSize > m_dwMaxBufferSize)
		goto lb_return;
	
	for (i=0; i<dwNum; i++)
	{
		pMsg->m_dwConnectionIndex = dwIndex;
		pMsg->m_dwFlag = NULL;
		pMsg->m_dwSize = pBuf[i].len;

//		printf("\n Dll 叼滚弊 沥焊 9 : Set MSG_CONTAINER : Len = %d\n", pBuf[i].len);


		pMsg->m_dwType = dwType;
		memcpy(pMsg->m_pBuffer,pBuf[i].buf,pBuf[i].len);
		m_dwBufferPosition += (pBuf[i].len + MSG_HEADER_SIZE);
		pMsg = (MSG_CONTAINER*)(m_pBuffer + m_dwBufferPosition);
		m_dwMsgNum++;
		bResult = TRUE;
	}
	

lb_return:
	return bResult;
}


MSG_CONTAINER* CMsgQue::DispatchMsg()
{
	MSG_CONTAINER*		pMsg;
	pMsg = (MSG_CONTAINER*)(m_pBuffer + m_dwDispatchPosition);
	m_dwDispatchPosition += (MSG_HEADER_SIZE + pMsg->m_dwSize);

//	printf("\n Dll 叼滚弊 沥焊 10 : DispatchMsg : pMsg->m_dwSize = %d\n", pMsg->m_dwSize);

	
	return pMsg;
}


CMsgQue::~CMsgQue()
{
	if (m_pNext)
	{
		m_pNext->m_pNext = NULL;
		delete m_pNext;
		m_pNext = NULL;
	}
	if (m_pBuffer)
	{
		delete [] m_pBuffer;
		m_pBuffer = NULL;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -