/** * @file NFNetClientS.h * @brief Network Client ½Ì±Û½º·¹µå Ŭ·¡½º * @remarks * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-04-02 */ #pragma once #include "NFSync.h" #include "NFIOBuffer.h" namespace NaveNet { /** * @class NFNetClientS * @brief Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ¼­¹ö·Î Á¢¼ÓÇϱâ À§ÇÑ Network°´Ã¼ \r\n * ½Ì±Û ½º·¹µå¿ëÀ¸·Î Á¦ÀÛµÈ Å¬·¡½º·Î Update¿¡¼­ ÆÐŶRecv,Sendó¸®\r\n * MainLoop¿¡¼­ UpdateÇÔ¼ö È£Ãâ½Ã ÆÐŶť°¡ °»½ÅµÊ \r\n * @remarks * * @par * @author Edith * @date 2009-04-05 */ class NFNetClientS { public: /// NFNetClient »ý¼ºÀÚ NFNetClientS(); /// NFNetClient ¼Ò¸êÀÚ virtual ~NFNetClientS(); public: /// ·ÎÄà IP¸¦ ¾ò¾î¿É´Ï´Ù. void GetLocalIP(CHAR* LocalIP); /// Connect»óŸ¦ ¾ò¾î¿É´Ï´Ù. BOOL IsConnect() { return m_bConnect; } /// ÆÐŶÀ» Send ÇÕ´Ï´Ù. BOOL SendPost(NFPacket& Packet); /** * @brief Ŭ·¡½º ÃʱâÈ­. * @param szIP Á¢¼ÓÇÒ ¾ÆÀÌÇÇ * @param nPort Á¢¼ÓÇÒ Æ÷Æ® * @return ¼º°ø¿©ºÎ */ BOOL Init(LPCSTR szIP, int nPort); /// Disconnect ½Ãŵ´Ï´Ù. virtual void Disconnect(); /// Network¸¦ ¾÷µ¥ÀÌÆ® ÇÕ´Ï´Ù. virtual void Update(); /// Ŭ¶óÀÌ¾ðÆ® Á¤Áö void Stop(); /// ¸ðµç °´Ã¼¸¦ Close ÇÕ´Ï´Ù. void CloseAll(); private: /// ¼ÒÄÏ À̺¥Æ® virtual void OnSocketEvent(DWORD dID, DWORD dEvent) {}; /// ÆÐŶ ÇÁ·Î¼¼½Ì virtual void ProcessPacket(NFPacket* Packet, int PacketLen) { }; /// ¼ÒÄÏ À̺¥Æ® Çڵ鷯 BOOL NetworkEventHanlder(LONG lEvent); private: /// Event Thread static DWORD WINAPI EventThreadProc(LPVOID lParam); /// Send À̺¥Æ® ó¸® VOID OnSendPacketData(); /// Recv À̺¥Æ® ó¸® VOID OnReadPacketData(); /// RecvQueÀÇ °³¼ö int GetQueCnt(); /// ù ÆÐŶ ¾ò¾î¿À±â int GetPacket(NFPacket** Packet); /// Å¥¿¡¼­ ÆÐŶÀ» ²¨³½´Ù. void PopPacket(); /// Å¥¸¦ ¾÷µ¥ÀÌÆ® ÇÑ´Ù. void UpdateQue(); /// Connect ¼ÒÄÏÀ̺¥Æ® BOOL OnConnect(); /// Close ¼ÒÄÏÀ̺¥Æ® BOOL OnClose(); /// ¼­¹ö¿Í Connect¸¦ ÇÕ´Ï´Ù. BOOL Connect(); /// À©¼Ó ÃʱâÈ­ BOOL WinSockInit(); private: /// Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏ SOCKET m_hSocket; /// Æ÷Æ® UINT m_nPort; /// Server IPÀúÀå CHAR m_strIPAddr[32]; /// Recv Queue NFPacketQueue m_RecvQueue; /// Send Queue NFPacketQueue m_SendQueue; /// ³×Æ®¿öÅ© À̺¥Æ® Çڵ鷯 WSAEVENT m_hEvent; /// Close µÈ»óÅÂÀÎÁö BOOL m_bClose; /// Á¢¼Ó »óÅ Ç÷¡±× BOOL m_bConnect; /// RecvIO Buffer (¿Ï¼ºµÈ ÆÐŶÀÌ ÀúÀåµÊ) NFPacketIOBuffer m_RecvIO; /// RecvPacket º¯¼ö (¿Ï¼ºµÈ ÇѰ³ÀÇ ÆÐŶ) NFPacket m_RecvPacket; /// Recv Buffer (½º·¹µå¿¡¼­ ÆÐŶÀ» ¹ÞÀ»¶§ »ç¿ë) CHAR m_RecvBuffer[DEF_MAXPACKETSIZE]; /// Recv ½º·¹µå ÇÚµé HANDLE m_hEventThread; }; }