📄 nwworkerthread.cpp
字号:
#include "StdAfx.h"
#include "NWWorkerThread.h"
#include "NWIOCompletionPort.h"
#include "SocketServer.h"
#include "IOBuffer.h"
#include "NWClientConnect.h"
NWWorkerThread::~NWWorkerThread(void)
{
}
int NWWorkerThread::Init()
{
MYEXCEPTIONFUNC_START();
iRetCode =0 ;
MYEXCEPTIONFUNC_END("NWWorkerThread::Init");
}
int NWWorkerThread::Run()
{
MYEXCEPTIONFUNC_START();
while (m_bContinue)
{
DWORD dwIoSize = 0;
NWClientConnect *pClientConnect = 0;
pCIOBuffer pIoBuffer = NULL ;
bool weClosedSocket = false;
OVERLAPPED * pOverLapped = NULL ;
DWORD dwResult = CIOCompletionPort::GetInstance()->GetStatus( ( PDWORD_PTR )&pClientConnect, &dwIoSize, ( OVERLAPPED ** )&(pOverLapped) );
if ( dwResult != 0 )
{
if (dwResult == ERROR_NETNAME_DELETED )
{
weClosedSocket = true;
}
else if ( WSA_OPERATION_ABORTED != dwResult )
{
throw_NWExceptionC( "CIOCompletionPort::GetStatus() - GetQueuedCompletionStatus", dwResult );
}
Trace("IOCP error - client connection dropped");
}
if ( !pClientConnect )//推出的时候
{
break;
}
if (weClosedSocket)
{
pClientConnect->DoClientClose();
iRetCode = m_pcSocketServer->m_pcClientManager->DeleteOneClient(pClientConnect->m_ulClientIndex);
if (iRetCode != 0)
{
Trace("DeleteOneClient Error");
continue ;
}
pClientConnect = NULL ;
}
else if (pClientConnect && pClientConnect->m_pcInBuffer && pClientConnect->m_pcInBuffer->m_bIsRecv)
{
MYEXCEPTIONFUNC_START();
pIoBuffer = pClientConnect->m_pcInBuffer ;
if (pIoBuffer->CurDataSetIsOver(dwIoSize))
{
pNWDataBuffer pUploadBuff = NULL ;
MYEXCEPTIONFUNC_START();
pUploadBuff = new NWDataBuffer;
iRetCode = pClientConnect->GetUploadStruct( pUploadBuff );
if (iRetCode !=0 )
{
throw_NWException("GetUploadStruct Error");
continue;
}
if ( !pUploadBuff)
{
throw_NWException("pUploadBuff == NULL"); ;
}
iRetCode = m_pcMessageProccess->OnMessage(pUploadBuff);
if (iRetCode != 0 )
{
throw_NWException("NWIOBufferManager::GetInstance()->AddBufferToList Error");
}
pIoBuffer->GotoHead();
MYEXCEPTIONFUNC_NOREV_END("NWWorkerThread::Run::Do Buffer Oper::upload Data");
if (pUploadBuff)
{
delete pUploadBuff ;
pUploadBuff = NULL ;
}
}
else
{
pIoBuffer->GotoNext(dwIoSize);
}
iRetCode = pClientConnect->StartRead();
if (iRetCode !=0)
{
throw_NWException(" pClientConnect->StartRead");
}
MYEXCEPTIONFUNC_NOREV_END("NWWorkerThread::Run::Do Buffer Oper");
}
/*
* Thread End Processing
*/
}
// m_pcIocp->GetStatus();
iRetCode = 0 ;
Trace("NWWorkerThread::Run End");
MYEXCEPTIONFUNC_END("NWWorkerThread::Run");
}
void NWWorkerThread::DoStopRun()
{
MYEXCEPTIONFUNC_START();
CIOCompletionPort::GetInstance()->PostStatus(0);
if (RunIsEnd())
{
Stop();
}
iRetCode = 0 ;
MYEXCEPTIONFUNC_NOREV_END("NWWorkerThread::DoStopRun()");
}
int NWWorkerThread::UnInit()
{
MYEXCEPTIONFUNC_START();
iRetCode = 0 ;
MYEXCEPTIONFUNC_END("NWWorkerThread::UnInit");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -