#ifndef _GAMA_SERVER_NETWORK_DISPATCH_H_ #define _GAMA_SERVER_NETWORK_DISPATCH_H_ // Àü¹æ ÂüÁ¶ class CSession; // Session¿¡¼­ »ç¿ëÇÏ´Â DispatchŬ·¡½º¸¦ À§ÇÑ ÀÎÅÍÆäÀ̽º. class CPacketDispatch { public: CPacketDispatch(CSession& Session) : m_Session(Session) { } virtual ~CPacketDispatch() { } // In : char* const lpStream_In ¹öÆÛ ½ºÆ®¸² // unsigned long* dwStreamSize_InOut ¹öÆÛ ½ºÆ®¸² ±æÀÌ // out : Return ÆÐŶ ÆÄ½Ì ¼º°ø / ½ÇÆÐ(½ÇÆÐ½Ã Á¢¼Ó ÇØÁ¦) // unsigned long* dwStreamSize_InOut ÆÄ½ÌÇÑ ±æÀÌ virtual bool ParsePacket(char* const lpStream_In, unsigned long* dwStreamSize_InOut) = 0; virtual bool Dispatch() = 0; virtual void Connected() { } virtual void Disconnected() { } CSession& GetSession() { return m_Session; } protected: CSession& m_Session; }; class CDispatchFactory { public: virtual ~CDispatchFactory() = 0; virtual CPacketDispatch* CreateDispatch(CSession& Session) = 0; virtual void DeleteDispatch(CPacketDispatch* lpDispatch) = 0; }; inline CDispatchFactory::~CDispatchFactory() { } template class CDefaultDispatchFactory : public CDispatchFactory { public: virtual ~CDefaultDispatchFactory() { } virtual CPacketDispatch* CreateDispatch(CSession& Session) { return new DispatchType(Session); } virtual void DeleteDispatch(CPacketDispatch* lpDispatch) { delete lpDispatch; } }; // ----------------------------------------------------------------------- // Å×½ºÆ®¿ë Sample Dispatchers.... // ¹ÞÀº ÆÐŶÀ» ÀüºÎ ¹ö¸°´Ù. 󸮵µ ÇÏÁö ¾Ê´Â´Ù. class CNullDispatch : public CPacketDispatch { public: CNullDispatch(CSession& Session) : CPacketDispatch(Session) { } virtual ~CNullDispatch() { } virtual bool ParsePacket (char* const lpStream_In, unsigned long* dwStreamSIze_InOut) { return true; } virtual bool Dispatch() { return true; } }; // ¹ÞÀº ÆÐŶÀ» ±×´ë·Î ´Ù½Ã µ¹·Á ÁØ´Ù. class CEchoDispatch : public CPacketDispatch { public: CEchoDispatch(CSession& Session) : CPacketDispatch(Session) { } virtual ~CEchoDispatch() { } virtual void Connected(); virtual void Disconnected(); virtual bool ParsePacket (char* const lpStream_In, unsigned long* dwStreamSIze_InOut); virtual bool Dispatch() { return true; } }; #endif