Beispiel #1
0
void CServerDlg::RemovePkgInfo(HP_CONNID dwHP_CONNID)
{
	//CCriSecLock locallock(m_spThis->m_csPkgInfo);

	TPkgInfo* pInfo = FindPkgInfo(dwHP_CONNID);
	ASSERT(pInfo != nullptr);

	delete pInfo;
}
Beispiel #2
0
EnHandleResult CServerDlg::OnReceive(CONNID dwConnID, int iLength)
{
	TPkgInfo* pInfo = FindPkgInfo(dwConnID);

	if(pInfo != nullptr)
	{
		int required = pInfo->length;
		int remain = iLength;

		while(remain >= required)
		{
			remain -= required;
			CBufferPtr buffer(required);

			EnFetchResult result = m_Server->Fetch(dwConnID, buffer, (int)buffer.Size());
			if(result == FR_OK)
			{
				if(pInfo->is_header)
				{
					TPkgHeader* pHeader = (TPkgHeader*)buffer.Ptr();
					TRACE("[Server] head -> seq: %d, body_len: %d\n", pHeader->seq, pHeader->body_len);

					required = pHeader->body_len;
				}
				else
				{
					TPkgBody* pBody = (TPkgBody*)(BYTE*)buffer;
					TRACE("[Server] body -> name: %s, age: %d, desc: %s\n", pBody->name, pBody->age, pBody->desc);

					required = sizeof(TPkgHeader);
				}

				pInfo->is_header = !pInfo->is_header;
				pInfo->length	 = required;

				::PostOnReceive(dwConnID, buffer, (int)buffer.Size());

				if(!m_Server->Send(dwConnID, buffer, (int)buffer.Size()))
					return HR_ERROR;
			}
		}
	}
	
	return HR_OK;
}