59 lines
1.2 KiB
C++
59 lines
1.2 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "TCPSocket.h"
|
|||
|
|
|
|||
|
|
CTCPSocket::CTCPSocket(WORD id, WORD socket, DWORD dwClientAddr, CIOCPServer* pIOCPServer)
|
|||
|
|
{
|
|||
|
|
m_wID = id;
|
|||
|
|
m_hSocket = socket;
|
|||
|
|
m_dwClientAddr = dwClientAddr;
|
|||
|
|
m_pIOCPServer = pIOCPServer;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CTCPSocket::~CTCPSocket(void)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CTCPSocket::sendData(void* data, DWORD len)
|
|||
|
|
{
|
|||
|
|
if (m_hSocket == INVALID_SOCKET)
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
if (data == NULL || len == 0)
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
return m_pIOCPServer->SendData(m_wID, data, len);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CTCPSocket::processRecvData(void* data, DWORD len)
|
|||
|
|
{
|
|||
|
|
const int HEADER_SIZE = 2;
|
|||
|
|
|
|||
|
|
// <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_recvBuffer.write(data, len);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СС<D0A1><D0A1>2<EFBFBD><32><EFBFBD>ֽ<EFBFBD>
|
|||
|
|
if (m_recvBuffer.size() < HEADER_SIZE)
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
// <20>ж<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>
|
|||
|
|
WORD size = 0;
|
|||
|
|
m_recvBuffer.get(&size, sizeof(size));
|
|||
|
|
if (size < HEADER_SIZE || size > MAX_USER_PACK_SIZE) {
|
|||
|
|
printf("<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, id=%d\n", m_wID);
|
|||
|
|
m_pIOCPServer->Disconnect(m_wID);
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (size > m_recvBuffer.size()) {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
BYTE userPack[MAX_USER_PACK_SIZE];
|
|||
|
|
m_recvBuffer.read(userPack, size);
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return processMessage(userPack, size);
|
|||
|
|
}
|