#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(); } }