/** * @file NFServerCtrl.h * @brief IOCP Base ÄÁÆ®·Ñ·¯ Ŭ·¡½º * @remarks * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-05-09 */ #pragma once #include "NFConnection.h" #include namespace NaveServer { // extern INT iMaxRecvPacket; typedef struct LISTENER { SOCKET s; // Listen Socket INT nPort; // Æ÷Æ® CHAR cBindQue; // ¹ÙÀεå Å¥ VOID Init() { s = INVALID_SOCKET; // Listen Socket nPort = 0; // Æ÷Æ® cBindQue = 0; } VOID Release() { // Ŭ·ÎÁî ¼ÒÄÏ Àü¿¡ Å¥µÈ µ¥ÀÌŸ¸¦ º¸³¾Áö ¸»Áö °áÁ¤ÇÏ´Â ¿É¼Ç struct linger li = {1, 0}; // Default: SO_DONTLINGER shutdown(s, SD_BOTH); setsockopt(s, SOL_SOCKET, SO_LINGER, (CHAR *)&li, sizeof(li)); closesocket(s ); Init(); } }*LPLISTENER; class NFServerCtrl { public: NFServerCtrl(); virtual ~NFServerCtrl(); public: SOCKET CreateListenSocket(INT nServerPort, CHAR cBindQue = 32); // Listen Socket »ý¼º HANDLE ConnectIOCPSocket(SOCKET sckListener); // Listen Socket À» iocp ¼ÒÄÏ¿¡ ¿¬°á inline HANDLE GetIOCP() { return m_hIOCP; }; inline BOOL IsRun() { return m_bServerRun; }; inline BOOL IsPause() { return m_bPause; }; static unsigned __stdcall WINAPI Thread_MainEx(LPVOID lpVoid); // IOCP ±¸µ¿ ¸ÞÀÎ Thread static unsigned __stdcall WINAPI Process_MainEx(LPVOID lpVoid); // Process ó¸® Thread static unsigned __stdcall WINAPI Packet_MainEx(LPVOID lpVoid); // Packet ó¸® Thread virtual VOID Update(); // Process ó¸® ÇÔ¼ö virtual VOID ShowServerInfo(); // ½ÃÀ۽à ȭ¸é¿¡ ¼­¹ö Á¤º¸ Ç¥½Ã virtual BOOL CreateSession(SOCKET sckListener) { return TRUE; } // Client Session À» »ý¼ºÇÑ´Ù. virtual BOOL ReleaseSession() { return TRUE; } // Client Session À» »èÁ¦ÇÑ´Ù. protected: HANDLE CreateIOCP(); // IOCP ÇÚµé »ý¼º BOOL InitSocket(); // ¼ÒÄÏ ¶óÀ̺귯¸® Ȱ¼º INT GetNumberOfProcess(); // CPU¼ö¸¦ ±¸ÇÑ´Ù => ½º·¹µå ±¸µ¿½Ã ÀÌ¿ë INT GetNumberOfThread() { return m_nMaxThreadNum; }; // »ý¼ºµÈ ½º·¹µåÀÇ °³¼ö¸¦ ±¸ÇÑ´Ù. BOOL Start(INT nPort, INT nMaxConn, INT nMaxThreadNum = 0); // ¼­¹ö ±¸µ¿ VOID Pause(BOOL bPause); BOOL Stop(); // ¼­¹ö Á¤Áö protected: INT m_nMaxThreadNum; // ÃÖ´ë ½º·¹µå ¼ö °áÁ¤ HANDLE* m_pWorkThread; // IOCP Work ½º·¹µå ÇÚµé HANDLE m_hIOCP; // IOCP ÇÚµé std::vector m_vecListener; // ¸®½º³Ê ¸®½ºÆ® ¿©·¯°³ÀÇ ¸®½º³Ê¸¦ »ý¼ºÇÒ ¼öµµ ÀÖ´Ù. HANDLE m_hProcThread; // ÇÁ·Î¼¼½ÌÀ» À§ÇÑ ½º·¹µå HANDLE m_hPacketThread; // PacketUpdateÀ» À§ÇÑ ½º·¹µå INT m_iPort; INT m_iMaxConn; BOOL m_bPause; BOOL m_bServerRun; // ¼­¹ö ½ÃÀÛ º¯¼ö ½ÇÇàµÇ¸é TRUEº¯°æ. NFUpdateManager* m_pUpdateManager; }; }