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