CSCommon: MLanguageConf.h 소스 파일

MAIET

MLanguageConf.h

00001 #ifndef _MLANGUAGECONF_H
00002 #define _MLANGUAGECONF_H
00003 
00004 //#pragma once
00005 
00006 #include <map>
00007 #include <string>
00008 
00009 using std::map;
00010 using std::string;
00011 using std::pair;
00012 
00013 typedef map< string, string >   MsgGroupMap;
00014 typedef MsgGroupMap::iterator   MsgGroupIter;
00015 typedef pair< string, string >  MsgGroupPair;
00016 
00017 const char CSC_ERR_MESSAGE_TYPE[]       = "cserror";
00018 const char CSC_ERR_MESSAGE_FILE_NAME[] = "cserror.xml";
00019 
00020 class MLanguageConf;
00021 class MMessenger;
00022 class MZFileSystem;
00023 
00024 /*
00025  * 언어 타입을 string이나 int형으로 관리해 주는 클래스.
00026  */
00027 class MLanguageCode
00028 {
00029 public :
00030     enum LANGUAGE_CODE
00031     {
00032         KOR = 1,
00033         ENG,
00034     };
00035 
00036     MLanguageCode();
00037     ~MLanguageCode();
00038 
00039     string  ConvCodeToStrLangType( const int nLangCode );
00040     int     ConvStrLangTypeToCode( const char* pszLangType );
00041 
00042     inline int GetLangCode() { return m_nLangCode; }
00043 
00044     inline void SetLangCode( const int nLangCode )      
00045     { 
00046         m_nLangCode = nLangCode; 
00047         m_isCreated = true;
00048     }
00049 
00050     inline void SetLangCode( const char* pszLangType )  
00051     { 
00052         m_nLangCode = ConvStrLangTypeToCode( pszLangType ); 
00053         m_isCreated = true;
00054     }
00055 
00056     inline bool IsCreated() { return m_isCreated; }
00057 
00058 private :
00059     int     m_nLangCode;
00060     bool    m_isCreated;
00061 };
00062 
00063 /*
00064  * MLanguageConf클래스에 의해 설정된 언어에따라 등록할 메시지 파일의 정보를 저장함.
00065  * MMessengerManager를 설정할때 기본 데이터로 사용됨.
00066  */
00067 class MMessageNameGroup
00068 {
00069 public :
00070     friend MLanguageConf;
00071     
00072     MMessageNameGroup();
00073     virtual ~MMessageNameGroup();
00074 
00075     string GetErrMessageDir();
00076 
00077     inline MsgGroupMap& GetGroup() { return m_mMsgGroup; }
00078 
00079 public :
00080     virtual void Release() { m_mMsgGroup.clear(); }
00081 
00082 protected :
00083     MsgGroupMap m_mMsgGroup;
00084 };
00085 
00086 /*
00087  * 언어 타입에대한 환경 설정( 언어 타입, 언어 파일들이 있는 폴더 등 ).
00088  */
00089 class MLanguageConf
00090 {
00091 public :
00092     MLanguageConf();
00093     virtual ~MLanguageConf();
00094 
00095     inline const string& GetRootDir() const     { return m_strRootDir; }
00096     inline const string& GetLangtype() const    { return m_strLangType; }
00097     inline const string& GetLangDir() const     { return m_strLangDir; }
00098 
00099     bool Init( MZFileSystem* pfs, MMessageNameGroup* pMsgNameGroup, const char* pszRootDir = "" );
00100 
00101     inline bool IsHaveLangType() { return m_LangCode.IsCreated(); }
00102 
00103     inline MMessageNameGroup* GetMessageNameGroup() { return m_pMsgNameGroup; }
00104 
00105     inline int      GetCurLangCode() { return m_LangCode.GetLangCode(); }
00106     inline string   GetCurLangType() { return m_strLangType; }
00107 
00108     // 상위 인터페이스.
00109     bool CheckFile( MZFileSystem* pfs, MMessageNameGroup* pMsgNameGroup );
00110 
00111     // 언어 타입 저장.
00112     bool SetLangTypeByStr( const char* pszLangType );
00113 
00114     virtual void Release();
00115 
00116 private :
00117     // 각 상속받은 클래스에 맞는 폴더의 완전한 상대경로를 만들기 위해서 제정의 해야하는 함수.
00118     virtual void MakeCompleteDir() = 0; 
00119     // 추가적인 메시지 파일을 등록 시키려면 이 함수를 제정의 하여 등록시키면 됨.
00120     virtual bool CheckSubTaskFile( MZFileSystem* pfs, MMessageNameGroup* pMsgNameGroup ) = 0;
00121 
00122 protected :
00123     string          m_strRootDir;
00124     string          m_strLangType;
00125     string          m_strLangDir;
00126     MLanguageCode   m_LangCode;
00127 
00128     MMessageNameGroup* m_pMsgNameGroup;
00129 };
00130 
00131 /*
00132  * 메신저를 관리함. 
00133  * MMessageNameGroup과 MLanguageConf의 데이터를 바탕으로 등록할 메신저가 결정됨.
00134  */
00135 class MMessengerManager
00136 {
00137 public :
00138     MMessengerManager();
00139     virtual ~MMessengerManager();
00140 
00141     bool Init( MMessageNameGroup* pMMsgNameGroup, MZFileSystem* pfs );
00142 
00143     inline MMessenger* GetErrMessage() { return m_pErrMessenger; }
00144 
00145     void Release();
00146 
00147 private :
00148     // 상위 인터페이스.
00149     bool Allocate( const string& strKey, const string& strFile, MZFileSystem* pfs );
00150 
00151 private :
00152     virtual bool LoadFile( MMessageNameGroup* pMMsgNameGroup, MZFileSystem* pfs );
00153 
00154     // 상속된 클래스에서 추가로 등록된 메신저를 등록( 할당 )하려면 이 함수를 제정의 해야함.
00155     virtual bool AllocateSubTask( const string& strKey, const string& strFile, MZFileSystem* pfs ) = 0;
00156     // 상속된 클래스에서 등록시킨 객체를 제거하기 위해서는 이 함수를 제정의 해야함.
00157     virtual void ReleaseSubTask() = 0;
00158 
00159 protected :
00160     // 서버와 클라이언트가 공용으로 사용되는 부분은 여기에 등록함.
00161 
00162     MMessenger* m_pErrMessenger;
00163 };
00164 
00165 #endif


MAIET entertainment