+BOOL CListenerList::ReadProperty(LPCTSTR fileName){
+ BOOL rslt = FALSE;
+ CAtlFile userSettingFile;
+ ULONGLONG userSettingFileSize;
+
+
+ if(SUCCEEDED(userSettingFile.Create(fileName,GENERIC_READ,FILE_SHARE_READ,OPEN_ALWAYS)) == FALSE || SUCCEEDED(userSettingFile.GetSize(userSettingFileSize)) == FALSE){
+
+ throw Exception(TEXT("\83\8a\83X\83i\81[\90Ý\92è\83t\83@\83C\83\8b\82ª\8aJ\82¯\82Ü\82¹\82ñ\82Å\82µ\82½\81B\82±\82Ì\83G\83\89\81[\82ª\91±\82\82æ\82¤\82Å\82 \82ê\82Î\81A\88ê\93x\90Ý\92è\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ä\8dÄ\93x\8e\8e\82µ\82Ä\82Ý\82Ä\82\82¾\82³\82¢"),__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
+ }
+ std::vector<char> userSettingBuf(static_cast<UINT_PTR>(userSettingFileSize / sizeof(char) + (1 * sizeof(char))));
+ userSettingFile.Read(&userSettingBuf[0],userSettingBuf.size());
+ LPSTR userSettingStart = strstr(&userSettingBuf[0],"<");
+ if(userSettingStart != NULL){
+ ReadUserSettingXML rusx(nlite::listenerList);
+ rusx.Parse(userSettingStart);
+ }
+
+
+ return rslt;
+}
+
+
+ReadUserSettingXML::ReadUserSettingXML(CListenerList &in_listenerList):m_listenerList(in_listenerList),userNodeFlag(FALSE){}
+
+#define NLITE_READ_USER_STRING(at,l,t) if(_tcscmp(at[0],TEXT(#t)) == 0)l.t = at[1]
+#define NLITE_READ_USER_INT(at,l,t) if(_tcscmp(at[0],TEXT(#t))==0)l.t = _tcstol((const wchar_t*)at[1],NULL,10)
+
+ void ReadUserSettingXML::OnStartElement (const XML_Char *pszName, const XML_Char **papszAttrs){
+
+ if(_tcscmp(pszName,TEXT("user")) == 0){
+
+ this->userNodeFlag = TRUE;
+
+
+ for(;papszAttrs[0] != NULL;papszAttrs += 2){
+
+ NLITE_READ_USER_STRING(papszAttrs,listenerBuff,name);
+ NLITE_READ_USER_STRING(papszAttrs,listenerBuff,community);
+ NLITE_READ_USER_INT(papszAttrs,listenerBuff,bgcolor);
+ NLITE_READ_USER_INT(papszAttrs,listenerBuff,time);
+
+ }
+
+ }
+
+ return;
+ }
+
+ void ReadUserSettingXML::OnEndElement (const XML_Char *pszName){
+
+ if(_tcscmp(pszName,TEXT("user")) == 0){
+
+ listenerList.Register(listenerBuff,TRUE);
+ this->userNodeFlag = FALSE;
+ this->listenerBuff.~ListenerData();
+ new(&listenerBuff) ListenerData();
+
+ }
+
+ return;
+ }
+
+ void ReadUserSettingXML::OnCharacterData (const XML_Char *pszData, int nLength){
+
+ if(this->userNodeFlag == TRUE){
+
+
+ listenerBuff.user_id.Append(pszData,nLength);
+
+
+
+
+ }
+
+
+
+ return;
+ }