#include "Global.h" #include "NFMemPool.h" #include "NFPacketPool.h" #include namespace NaveServer { ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : »ý¼ºÀÚ // // [2]PARAMETER : // // [3]RETURN : // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// NFPacketPool::NFPacketPool() { m_hLogFile = NULL; // ÆÄÀÏ ÇÚµé ÃʱâÈ­ m_pAcptPool = NULL; m_pRecvPool = NULL; m_pProcPool = NULL; // º¯¼ö ÃʱâÈ­ m_nMaxPacketSize = 0; } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : ¼Ò¸êÀÚ - ¸Þ¸ð¸® ÇÒ´ç ÇØÁ¦ // // [2]PARAMETER : // // [3]RETURN : // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// NFPacketPool::~NFPacketPool() { Release(); } VOID NFPacketPool::Release() { LogClose(); // ·Î±× ÆÄÀÏ ÇÚµé ´Ý±â m_nMaxPacketSize = 0; if(m_pAcptPool) delete m_pAcptPool; if(m_pRecvPool) delete m_pRecvPool; if(m_pProcPool) delete m_pProcPool; m_pAcptPool = NULL; m_pRecvPool = NULL; m_pProcPool = NULL; // º¯¼ö ÃʱâÈ­ } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : ÃʱâÈ­ ÇÔ¼ö // // [2]PARAMETER : lpszFileName - ÆÄÀÏ À̸§, ¾øÀ¸¸é NULL // // [3]RETURN : TRUE - Á¤»óó¸® FALSE - ½ÇÆÐ // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::Create(INT nMaxUser,CHAR* lpszFileName,INT nMaxPacketSize,INT nAcptBuffCnt,INT nRecvBuffCnt,INT nSendBuffCnt) { // Æ÷ÀÎÅÍ(À̸§)°¡ Á¸Àç Çϸé.. if(lpszFileName) LogOpen( lpszFileName ); // ÆÄÀÏ ¿ÀÇ m_nMaxPacketSize = nMaxPacketSize; // °¢ ÆÐŶ¿­ ¸Þ¸ð¸® ÇÒ´ç // Winsock ÀÚü¿¡¼­ ¾²´Â ¸Þ¸ð¸® ¶«¿¡ 64¸¦ ´õÇÑ´Ù // winsock¿¡¼­ »ç¿ëÇÏ´Â OVERLAPPED ¶§¹®Àϼöµµ.. m_pAcptPool = new NFMemPool (nMaxUser*nAcptBuffCnt, m_nMaxPacketSize+64); m_pRecvPool = new NFMemPool (nMaxUser*nRecvBuffCnt, m_nMaxPacketSize+64); m_pProcPool = new NFMemPool (nMaxUser*nSendBuffCnt, m_nMaxPacketSize+64); // ÆÄÀÏ ¾²±â LogWrite("acpt=%08X, recv=%08X, proc=%08X", m_pAcptPool, m_pRecvPool, m_pProcPool); // Çϳª¶óµµ ¸Þ¸ð¸® ÇÒ´çÀÌ ¾ÈµÇ¾ú´Ù¸é if( !m_pAcptPool || !m_pRecvPool || !m_pProcPool) return FALSE; // FALSE m_pAcptPool->SetLogTitle(L"ACPT"); m_pRecvPool->SetLogTitle(L"RECV"); m_pProcPool->SetLogTitle(L"SEND"); return TRUE; // TRUE } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : ÆÄÀÏ ÇÚµé ¿­±â // // [2]PARAMETER : lpszFileName - ÆÄÀÏ À̸§ // // [3]RETURN : TRUE - Á¤»óó¸® FALSE - ½ÇÆÐ // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::LogOpen( CHAR *lpszFileName ) { // À̸§À» Á¤ÇÏÁö ¾Ê¾Ò´Ù¸é if( m_hLogFile || lpszFileName == NULL ) return FALSE; // FALSE ¸®ÅÏ m_hLogFile = fopen( lpszFileName, "ab" ); // ó¸® ÆÄÀÏ ¿ÀÇ // ¿¡·¯ °Ë»ç if( !m_hLogFile ) return FALSE; return TRUE; // TRUE ¸®ÅÏ - Á¤»ó ó¸® } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : ÆÄÀÏ¿¡ ¿¬°áÇÏ¿© ¾²±â // // [2]PARAMETER : lpszFileName - ÆÄÀÏ À̸§ Á¤Çϱâ // // [3]RETURN : TRUE - Á¤»óó¸® FALSE - ½ÇÆÐ // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL __cdecl NFPacketPool::LogWrite( CHAR *lpszFmt, ... ) { if(NULL == m_hLogFile) return FALSE; va_list argptr; CHAR szOutStr[1024]; va_start(argptr, lpszFmt); vsprintf(szOutStr, lpszFmt, argptr); va_end(argptr); INT nBytesWritten = fprintf( m_hLogFile, "%s\r\n", szOutStr );// LOG ³»¿ë fflush( m_hLogFile ); return TRUE; } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : ¿ÀÇÂµÈ ÆÄÀÏ ´Ý±â // // [2]PARAMETER : void // // [3]RETURN : void // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// void NFPacketPool::LogClose() { // ÆÄÀÏ ÇÚµéÀÌ Á¸Àç ÇÑ´Ù¸é, if(m_hLogFile) fclose( m_hLogFile ); // ÆÄÀÏ ÇÚµé ´Ý±â m_hLogFile = NULL; // ÆÄÀÏ ÇÚµé ÃʱâÈ­ } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : Accept Packet ÇÒ´ç // // [2]PARAMETER : newolp - ÂüÁ¶ º¯¼ö // // [3]RETURN : TRUE - Á¤»óó¸® // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::AllocAcptPacket( LPOVERLAPPEDPLUS &newolp ) { LPOVERLAPPEDPLUS olp = NULL; // ±¸Á¶Ã¼ °´Ã¼ »ý¼º BOOL bRet = FALSE; if(!m_pAcptPool) return bRet; // ¹Ýȯ olp = m_pAcptPool->Alloc(); // Accept Pool¿¡¼³ ÇÒ´ç ¹ÞÀ½ LogWrite( "AlocAcptPacket(%08X)", (DWORD)olp ); // logging // ÇÒ´çÀÌ Á¦´ë·Î µÇ¾ú´Ù¸é if(olp) { // ÇÒ´ç ¸Þ¸ð¸® Ã³¸® ºÎºÐ newolp = olp; // º¯¼ö ¼¼ÆÃ newolp->wbuf.buf = (CHAR*)(olp+1); // ¹öÆÛ ¼¼ÆÃ bRet = TRUE; // ¹Ýȯ°ª - TRUE·Î ¹Ù²Þ } return bRet; // ¹Ýȯ } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : Receive Packet ÇÒ´ç // // [2]PARAMETER : newolp - ÂüÁ¶ º¯¼ö // // [3]RETURN : TRUE - Á¤»óó¸® // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::AllocRecvPacket( LPOVERLAPPEDPLUS &newolp ) { LPOVERLAPPEDPLUS olp = NULL; // ±¸Á¶Ã¼ °´Ã¼ »ý¼º BOOL bRet = FALSE; if(!m_pRecvPool) return bRet; // ¹Ýȯ olp = m_pRecvPool->Alloc(); // Receive Pool¿¡¼³ ÇÒ´ç ¹ÞÀ½ LogWrite( "AlocRecvPacket(%08X)", (DWORD)olp ); // logging // ÇÒ´çÀÌ Á¦´ë·Î µÇ¾ú´Ù¸é if(olp) { // ÇÒ´ç ¸Þ¸ð¸® Ã³¸® ºÎºÐ newolp = olp; // º¯¼ö ¼¼ÆÃ newolp->wbuf.buf = (CHAR*)(olp+1); // ¹öÆÛ ¼¼ÆÃ bRet = TRUE; // ¹Ýȯ°ª - TRUE·Î ¹Ù²Þ } else LOG_ERROR((L"NFPacketPool::AllocRecvPacket Pool Alloc Faild..")); return bRet; // ¹Ýȯ } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : Process Packet ÇÒ´ç // // [2]PARAMETER : newolp - ÂüÁ¶ º¯¼ö // // [3]RETURN : TRUE - Á¤»óó¸® // // [4]DATE : 2000³â 10¿ù 7ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::AllocSendPacket(LPOVERLAPPEDPLUS &newolp) { LPOVERLAPPEDPLUS olp = NULL; // ±¸Á¶Ã¼ °´Ã¼ »ý¼º BOOL bRet = FALSE; if(!m_pProcPool) return bRet; // ¹Ýȯ olp = m_pProcPool->Alloc(); // Accept Pool¿¡¼³ ÇÒ´ç ¹ÞÀ½ LogWrite( "AlocAcptPacket(%08X)", (DWORD)olp ); // logging // ÇÒ´çÀÌ Á¦´ë·Î µÇ¾ú´Ù¸é if(olp) { // ÇÒ´ç ¸Þ¸ð¸® Ã³¸® ºÎºÐ newolp = olp; // º¯¼ö ¼¼ÆÃ newolp->wbuf.buf = (CHAR*)(olp+1); // ¹öÆÛ ¼¼ÆÃ bRet = TRUE; // ¹Ýȯ°ª - TRUE·Î ¹Ù²Þ } return bRet; // ¹Ýȯ } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : Process Buffer ÇÒ´ç // // [2]PARAMETER : newolp - ÂüÁ¶ º¯¼ö // // [3]RETURN : TRUE - Á¤»óó¸® // // [4]DATE : 2000³â 10¿ù 7ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::AllocProcBuffer(PCHAR &newbuf) { LPOVERLAPPEDPLUS olp = NULL; // ±¸Á¶Ã¼ °´Ã¼ »ý¼º BOOL bRet = FALSE; if(!m_pProcPool) return bRet; // ¹Ýȯ olp = m_pProcPool->Alloc(); // Accept Pool¿¡¼³ ÇÒ´ç ¹ÞÀ½ LogWrite( "AllocProcBuffer(%08X)", (DWORD)olp ); // logging // ÇÒ´çÀÌ Á¦´ë·Î µÇ¾ú´Ù¸é if(olp) { // ÇÒ´ç ¸Þ¸ð¸® Ã³¸® ºÎºÐ newbuf = (CHAR*)(olp+1); // ¹öÆÛ ¼¼ÆÃ bRet = TRUE; // ¹Ýȯ°ª - TRUE·Î ¹Ù²Þ } return bRet; } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : Accept ÇÒ´ç ÆÐŶ ÇØÁ¦ // // [2]PARAMETER : olp - ÇØÁ¦ÇÒ ÆÐŶ // // [3]RETURN : TRUE - Á¤»ó ó¸® // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::FreeAcptPacket( LPOVERLAPPEDPLUS olp ) { LogWrite( "FreeAcptPacket(%08X)", (DWORD)olp ); // Logging if(!m_pAcptPool) return FALSE; // ¹Ýȯ return(m_pAcptPool->Free(olp)); // ÆÐŶ ÇØÁ¦ ¹× °á°ú ¹Ýȯ } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : Receive ÇÒ´ç ÆÐŶ ÇØÁ¦ // // [2]PARAMETER : olp - ÇØÁ¦ÇÒ ÆÐŶ // // [3]RETURN : TRUE - Á¤»ó ó¸® // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::FreeRecvPacket( LPOVERLAPPEDPLUS olp ) { LogWrite( "FreeRecvPacket(%08X)", (DWORD)olp ); // Logging if(!m_pRecvPool) return FALSE; // ¹Ýȯ return( m_pRecvPool->Free(olp) ); // ÆÐŶ ÇØÁ¦ ¹× °á°ú ¹Ýȯ } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : Process ÇÒ´ç ÆÐŶ ÇØÁ¦ // // [2]PARAMETER : olp - ÇØÁ¦ÇÒ ÆÐŶ // // [3]RETURN : TRUE - Á¤»ó ó¸® // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::FreeSendPacket(LPOVERLAPPEDPLUS olp) { LogWrite( "FreeProcPacket(%08X)", (DWORD)olp ); // Logging if(!m_pProcPool) return FALSE; // ¹Ýȯ return(m_pProcPool->Free(olp)); // ÆÐŶ ÇØÁ¦ ¹× °á°ú ¹Ýȯ } ////////////////////////////////////////////////////////////////// // [1]DESCRIPTION : Process ÇÒ´ç ¹öÆÛ ÇØÁ¦ // // [2]PARAMETER : olp - ÇØÁ¦ÇÒ ÆÐŶ // // [3]RETURN : TRUE - Á¤»ó ó¸® // // [4]DATE : 2000³â 9¿ù 4ÀÏ // ////////////////////////////////////////////////////////////////// BOOL NFPacketPool::FreeProcBuffer(PCHAR buffer) { LPOVERLAPPEDPLUS olp; olp = ((LPOVERLAPPEDPLUS)buffer) - 1; LogWrite( "FreeProcBuffer(%08X)", (DWORD)olp ); // Logging if(!m_pProcPool) return FALSE; // ¹Ýȯ return(m_pProcPool->Free(olp)); // ÆÐŶ ÇØÁ¦ ¹× °á°ú ¹Ýȯ } }