73 lines
1.4 KiB
C++
73 lines
1.4 KiB
C++
|
|
#include "StdAfx.h"
|
|
#include "NetworkManager.h"
|
|
|
|
CNetworkManager::CNetworkManager(void)
|
|
: m_hTerminateThread(INVALID_HANDLE_VALUE),
|
|
m_bIsInit(false)
|
|
{
|
|
}
|
|
|
|
CNetworkManager::~CNetworkManager(void)
|
|
{
|
|
m_Network.Destroy();
|
|
terminate();
|
|
}
|
|
|
|
|
|
bool CNetworkManager::Initialize(WBANetwork::LPFN_ErrorHandler errhandler, WBANetwork::ServerSession* ClinetSession)
|
|
{
|
|
if(m_bIsInit) return false; // 초기화가 되어있다면 ....
|
|
|
|
if(!WBANetwork::Initialize(0, errhandler)) // 네트웍 초기화 , errhandler: 에러전달 함수 포인터
|
|
{
|
|
return false;
|
|
}
|
|
|
|
m_SessionMgr.BindClient(ClinetSession); //클라이언트 세션 정보를 전달한다.
|
|
|
|
// 중요!!! - 스레드 수 2 개 고정 변경시 R2 서버팀에 알려줘야한다!!!
|
|
if(!m_Network.Create(1, &m_SessionMgr, 2, 1)) // 세션 1, 세션메니저 객체 , IOCP 스레드 수, Connect 스레드 수
|
|
{
|
|
return false;
|
|
}
|
|
|
|
m_hTerminateThread = ::CreateEvent( 0, 0, 0, 0 );// 이벤트 생성
|
|
Start(); // 스레드 시작
|
|
|
|
|
|
m_bIsInit = true;
|
|
return true;
|
|
}
|
|
|
|
void CNetworkManager::Run()
|
|
{
|
|
while( true )
|
|
{
|
|
if( ::WaitForSingleObject( m_hTerminateThread, 1 ) == WAIT_OBJECT_0 )
|
|
{
|
|
break;
|
|
}
|
|
m_Network.Update();
|
|
}
|
|
}
|
|
|
|
void CNetworkManager::terminate()
|
|
{
|
|
if(m_bIsInit)
|
|
{
|
|
// Run thread를 종료시킨다.
|
|
m_bIsInit = false;
|
|
|
|
::SetEvent( m_hTerminateThread );
|
|
if( WaitForTerminate( 100 ) == false )
|
|
{
|
|
Terminate( 0 );
|
|
}
|
|
|
|
::CloseHandle( m_hTerminateThread );
|
|
m_hTerminateThread = INVALID_HANDLE_VALUE;
|
|
|
|
m_Network.Destroy();
|
|
}
|
|
} |