#ifndef _CONSOLE_COMMAND_FACTORY_H_ #define _CONSOLE_COMMAND_FACTORY_H_ #pragma once #include #include #include #include class CConsoleCommand : public CCommand { protected: virtual CConsoleCommand* Clone(const TCHAR* szCommand, size_t nCommandLength) = 0; friend class CConsoleCMDFactory; }; // Singleton Ä¿¸Çµå ÀνºÅϽº. ( ºÎ°¡ Ä¿¸Çµå°¡ ¾ø´Â °æ¿ì¿¡ »ç¿ë. ) template class CConsoleCMDSingleton : public CConsoleCommand { public: inline virtual CConsoleCommand* Clone(const TCHAR* szCommand, size_t nCommandLength); virtual bool Destroy() { return true; } }; template inline CConsoleCommand* CConsoleCMDSingleton::Clone(const TCHAR* szCommand, size_t nCommandLength) { static Derived Instance; return &Instance; } // ÄÜ¼Ö Ä¿¸Çµå ÆÑÅ丮. class CConsoleCMDFactory { public: enum { MAX_CMD_BUFFER = 512 // ÃÖ´ë Ä¿¸Çµå ¹öÆÛ Å©±â. }; CConsoleCMDFactory(); virtual ~CConsoleCMDFactory(); // Desc : Ä¿¸Çµå¸¦ Ãß°¡ÇÑ´Ù. szCommand´Â ¹Ýµå½Ã ¹®ÀÚ¿­ ¸®ÅÍ·² »ó¼öÀÌ¿©¾ß¸¸ ÇÑ´Ù. bool AddCommand(const TCHAR* szCommand, CConsoleCommand* lpConsoleCommand); // Desc : Ä¿¸Çµå°¡ Â÷ÈÄ¿¡µµ ÇÊ¿äÇϸé, º°µµ·Î ÀúÀåÇØ ³õÀ» °Í. CConsoleCommand* Create(const TCHAR* szCommand, size_t nCommandLength); protected: struct StringCMD { unsigned long m_dwHashValue; const TCHAR* m_szCommand; CConsoleCommand* m_lpCMD; StringCMD(const TCHAR* szCommand, CConsoleCommand* lpCMD); }; typedef std::vector CMDVector; CMDVector m_CMDVector; }; #endif