📄 nwclientconnect.cpp
字号:
#include "StdAfx.h"
#include "NWClientConnect.h"
#include "NWIOCompletionPort.h"
#include "NWSendThread.h"
#include "IOBuffer.h"
NWClientConnect::NWClientConnect(void)
:m_pcOutBuffer(new CIOBuffer(false))
,m_pcInBuffer(new CIOBuffer(true))
,m_ulClientIndex(0)
{
}
NWClientConnect::NWClientConnect(SOCKET ClientSocket,CSockAddr * pAddrInfo)
:m_pcOutBuffer(new CIOBuffer(false))
,m_pcInBuffer(new CIOBuffer(true))
,m_ulClientIndex(0)
{
m_Socket = ClientSocket ;
m_pDataAddr = *pAddrInfo;
}
NWClientConnect::~NWClientConnect(void)
{
Close();
if (m_pcOutBuffer)
{
delete m_pcOutBuffer;
m_pcOutBuffer = NULL ;
}
if (m_pcInBuffer)
{
delete m_pcOutBuffer;
m_pcOutBuffer = NULL ;
}
}
int NWClientConnect::StartRead()
{
MYEXCEPTIONFUNC_START();
DWORD dwNumBytes = 0;
DWORD dwFlags = 0;
if ( SOCKET_ERROR == ::WSARecv(
m_Socket,
m_pcInBuffer->GetWSABUF() ,
1,
&dwNumBytes,
&dwFlags,
&(m_pcInBuffer->m_Overlapped),
NULL ) )
{
DWORD lastError = ::WSAGetLastError();
if ( ERROR_IO_PENDING != lastError )
{
throw_NWException("ERROR_IO_PENDING != lastError");
}
}
iRetCode = 0 ;
MYEXCEPTIONFUNC_END("NWClientConnect::StartRead()");
}
int NWClientConnect::GetUploadStruct(pNWDataBuffer & UploadBuff)
{
MYEXCEPTIONFUNC_START();
if ( UploadBuff == NULL)
{
throw_NWException("UploadBuff == NULL");
}
UploadBuff->m_DataAddr = m_pDataAddr;
UploadBuff->m_SocketKey = this ;
memcpy(UploadBuff->DataBuffer,m_pcInBuffer->GetBuffer()+sizeof(WORD),m_pcInBuffer->m_nCurDatasetLen -sizeof(WORD) );
UploadBuff->BuffLength = m_pcInBuffer->m_nCurDatasetLen -sizeof(WORD) ;
iRetCode = 0 ;
MYEXCEPTIONFUNC_END("NWClientConnect::GetUploadStruct()");
}
int NWClientConnect::StartSend(const char * pDataBuffer,int nBufferLen)
{
MYEXCEPTIONFUNC_START();
m_pcOutBuffer->WriteDatasetBuf((BYTE *)pDataBuffer,nBufferLen);
iRetCode = NWSendThread::GetInstance()->WriteOneBuff(m_pcOutBuffer);
if (iRetCode != 0)
{
throw_NWException("WriteOneBuff error");
}
iRetCode = 0 ;
MYEXCEPTIONFUNC_END("");
}
int NWClientConnect::BindToIOCP()
{
MYEXCEPTIONFUNC_START();
iRetCode = CIOCompletionPort::GetInstance()->BindDevice((HANDLE)m_Socket,(ULONG_PTR)this);
if (iRetCode != 0)
{
throw_NWException("BindDevice Error");
}
iRetCode = 0 ;
MYEXCEPTIONFUNC_END("NWClientConnect::BindToIOCP()");
}
void NWClientConnect::DoClientClose()
{
Shutdown( SD_RECEIVE );
}
void NWClientConnect::Shutdown( int how /* = SD_BOTH */ )
{
MYEXCEPTIONFUNC_START();
if ( IsValid() )
{
if ( 0 != ::shutdown( m_Socket, how ) )
{
throw_NWExceptionC("CSocketServer::Server::Shutdown() - ",::WSAGetLastError() ) ;
}
Trace("shutdown initiated");
}
MYEXCEPTIONFUNC_NOREV_END("NWClientConnect::Shutdown()");
}
bool NWClientConnect::IsValid()
{
return (INVALID_SOCKET != m_Socket);
}
void NWClientConnect::InternalClose()
{
if ( IsValid() )
{
if ( 0 != ::closesocket( m_Socket ) )
{
throw_NWExceptionC("CSocketServer::Socket::InternalClose() - closesocket - ", ::WSAGetLastError() );
}
m_Socket = INVALID_SOCKET;
}
}
void NWClientConnect::Close()
{
if ( IsValid() )
{
InternalClose();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -