#ifndef _ADMIN_TOOL_DISPATCH_H_ #define _ADMIN_TOOL_DISPATCH_H_ struct PktBase; class CSingleSession; class CWnd; class CPacketToolDispatch { public: // Desc: ¼¼¼Ç¿¡¼­ ¹ÞÀº µ¥ÀÌÅÍ·Î ÆÐŶÀ» »ý¼ºÇÑ´Ù. // Input: const char* lpStream_In : ¼¼¼Ç¿¡¼­ ¹ÞÀº µ¥ÀÌÅÍ. // size_t* nStreamSize_InOut : ¹ÞÀº µ¥ÀÌÅÍÀÇ Å©±â. // Output: size_t* nStreamSize_InOut : ó¸®µÈ µ¥ÀÌÅÍÀÇ Å©±â. // ¸®Åϰª : false ¸®ÅÏ ½Ã Á¢¼ÓÀ» ÇØÁ¦ÇÑ´Ù. (À߸øµÈ ÆÐŶ Á¸Àç °¡´É¼º ÀÖÀ½) virtual bool ParsePacket(char* const lpStream_In, unsigned long* dwStreamSize_InOut) = 0; // Desc: »ý¼ºÇÑ ÆÐŶÀ» ´ÜÀÏ ½º·¹µå¿¡¼­ ó¸®ÇÑ´Ù. // (CSession::Process ¿¡¼­ ¸Å ÆÞ½º¸¶´Ù È£ÃâÇÑ´Ù.) virtual bool SingleThreadDispatch(unsigned long dwCurrentTime) = 0; // Desc: ÀÚ±â ÀÚ½ÅÀ» »ý¼ºÇÑ´Ù. // Output: ¸®Åϰª : »ý¼º ½ÇÆÐ½Ã NULL ¸®ÅÏ virtual CPacketToolDispatch* Clone() = 0; // Desc: ÀÚ±â ÀÚ½ÅÀ» ¼Ò¸ê½ÃŲ´Ù. virtual void Destroy() = 0; // Desc: ¿¬°á Á¾·á½Ã ó¸®ÇÒ ³»¿ëÀ» ³Ö´Â´Ù. virtual void Disconnected() = 0; // Desc: ¼¼¼Ç°úÀÇ »óÈ£ÂüÁ¶¸¦ À§ÇÑ ÇÔ¼öµé. inline void SetSession(CSingleSession* lpSession) { m_lpSession = lpSession; } inline CSingleSession* GetSession() { return m_lpSession; } virtual ~CPacketToolDispatch() { } protected: // DispatcherÀÇ »ý¼ºÀÚ´Â Ç×»ó ProtectedÀ̾î¾ß ÇÑ´Ù. CPacketToolDispatch() : m_lpSession(0) { } CSingleSession* m_lpSession; }; class CClientMultiThreadDispatch : public CPacketToolDispatch { public: CClientMultiThreadDispatch( ) { m_pDispatchWindow = NULL; } virtual bool ParsePacket(char* const lpStream_In, unsigned long* dwStreamSize_InOut); virtual bool SingleThreadDispatch(unsigned long dwCurrentTime) { return true; } protected: virtual bool DispatchPacket(PktBase* lpPktBase) = 0; virtual ~CClientMultiThreadDispatch() { } CWnd* m_pDispatchWindow; }; #endif