#ifndef _GAMA_CLIENT_EVENT_HANDLER_H_ #define _GAMA_CLIENT_EVENT_HANDLER_H_ namespace ClientNet { // forward decl. class CSession; class CNetworkMsgBlock; class CEventHandler { public: CEventHandler(DWORD dwTimeoutSec = 1) : m_dwTimeoutSec(dwTimeoutSec), m_dwLastCalled(0) { } virtual ~CEventHandler() { } virtual int OnReceived(CNetworkMsgBlock& msg_block) = 0; // ÆÐŶÀ» ¹Þ¾ÒÀ» ¶§ ºÒ¸°´Ù. virtual int OnOpen(CSession& ConnSession, int iErrorCode) = 0; // ¿¬°áÀÌ ¿Ï·áµÇ¾úÀ» ¶§ ºÒ¸°´Ù. (¼º°ø/½ÇÆÐ. UDP´Â ÇØ´ç ¾øÀ½) virtual int OnClose(CSession& CloseSession) = 0; // ¿¬°áÀÌ ³¡³µÀ» ¶§ ºÒ¸°´Ù. (UDP´Â ÇØ´ç ¾øÀ½) virtual int OnDispatch(CSession& ReceivedSession) = 0; // ¸Þ½ÃÁö¸¦ ó¸®ÇÒ ¶§ ºÒ¸°´Ù. virtual int OnTimeout(CSession& Session) = 0; // ÁöÁ¤ ½Ã°£ÀÌ Áö³ª¸é È£ÃâµÈ´Ù. ±âº»Àº ¸ÅÃʸ¶´Ù ºÒ¸°´Ù. bool IsTimeout(DWORD dwCurrentTime) const { return (0 == m_dwLastCalled) || (m_dwLastCalled + (m_dwTimeoutSec * 1000) < dwCurrentTime); } void UpdateTimeoutCalled(DWORD dwCurrentTime) { m_dwLastCalled = dwCurrentTime; if (0 == m_dwLastCalled) { ++m_dwLastCalled; } } protected: DWORD m_dwTimeoutSec; DWORD m_dwLastCalled; }; }; #endif