bool CFileOperate::_Load() { UPLOAD_LOG_TYPE upload_load_type = _GetUpLoadLogType(); if (upload_load_type == NAME_SERVER_LOG) { char szPath[255]; sprintf(szPath,"../share_config/share_log_config.xml"); CMarkupSTL oxml; if (!oxml.Load(szPath) ){ USER_LOG_ERROR("cannot load "<<szPath); assert(false); return false; } if (!oxml.FindElem("root") ){ USER_LOG_ERROR("can not find root node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into root node "<<szPath); assert(false); return false; } if (!oxml.FindElem("logtype") ){ USER_LOG_ERROR("can not find logtype node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into logtype node "<<szPath); assert(false); return false; } log_directory_map log_directory_map_tmp; while (oxml.FindElem("type")) { LogStruct log_struct_tmp; log_struct_tmp.folder_name = oxml.GetAttrib("name"); log_struct_tmp.log_file_head = oxml.GetAttrib("log_file_head"); log_struct_tmp.log_file_trail = oxml.GetAttrib("log_file_trail"); if (!log_struct_tmp.folder_name.empty()) { std::map<std::string,std::string> remote_local_directory; std::string remote_direcotry = "ftp://"; remote_direcotry += CCurlFtpMgr::Instance().GetFtpHost(); remote_direcotry += ":"; remote_direcotry += CCurlFtpMgr::Instance().GetFtpPort(); remote_direcotry += "/"; remote_direcotry += "name_server/"; remote_direcotry += log_struct_tmp.folder_name; remote_direcotry += "/"; std::string local_directory = "..\\"; local_directory += log_struct_tmp.folder_name; local_directory += "\\"; remote_local_directory.insert(std::pair<std::string,std::string>(remote_direcotry,local_directory)); log_directory_map_tmp.insert(std::pair<LogStruct,std::map<std::string,std::string>>(log_struct_tmp,remote_local_directory)); } } m_log_directory.insert(std::pair<UPLOAD_LOG_TYPE,log_directory_map>(upload_load_type,log_directory_map_tmp)); oxml.OutOfElem(); oxml.OutOfElem(); } else if (upload_load_type == LG_SERVER_LOG) { std::string lg_id = ""; { char szPath[255]; sprintf(szPath,"../config/lg_config.xml"); CMarkupSTL oxml; if (!oxml.Load(szPath) ){ USER_LOG_ERROR("cannot load "<<szPath); assert(false); return false; } if (!oxml.FindElem("root") ){ USER_LOG_ERROR("can not find root node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into root node "<<szPath); assert(false); return false; } if (!oxml.FindElem("loginserver") ){ USER_LOG_ERROR("can not find loginserver node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into loginserver node "<<szPath); assert(false); return false; } if (!oxml.FindElem("id") ){ USER_LOG_ERROR("can not find id node "<<szPath); assert(false); return false; } lg_id = oxml.GetAttrib("value"); } { char szPath[255]; sprintf(szPath,"../share_config/share_log_config.xml"); CMarkupSTL oxml; if (!oxml.Load(szPath) ){ USER_LOG_ERROR("cannot load "<<szPath); assert(false); return false; } if (!oxml.FindElem("root") ){ USER_LOG_ERROR("can not find root node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into root node "<<szPath); assert(false); return false; } if (!oxml.FindElem("logtype") ){ USER_LOG_ERROR("can not find logtype node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into logtype node "<<szPath); assert(false); return false; } log_directory_map log_directory_map_tmp; while (oxml.FindElem("type")) { LogStruct log_struct_tmp; log_struct_tmp.folder_name = oxml.GetAttrib("name"); log_struct_tmp.log_file_head = oxml.GetAttrib("log_file_head"); log_struct_tmp.log_file_trail = oxml.GetAttrib("log_file_trail"); if (!log_struct_tmp.folder_name.empty()) { std::map<std::string,std::string> remote_local_directory; std::string remote_direcotry = "ftp://"; remote_direcotry += CCurlFtpMgr::Instance().GetFtpHost(); remote_direcotry += ":"; remote_direcotry += CCurlFtpMgr::Instance().GetFtpPort(); remote_direcotry += "/"; remote_direcotry += "area_"; remote_direcotry += lg_id.substr(0,1); remote_direcotry += "/"; remote_direcotry += "lg_"; remote_direcotry += lg_id; remote_direcotry += "/"; remote_direcotry += log_struct_tmp.folder_name; remote_direcotry += "/"; std::string local_directory = "..\\"; local_directory += log_struct_tmp.folder_name; local_directory += "\\"; remote_local_directory.insert(std::pair<std::string,std::string>(remote_direcotry,local_directory)); log_directory_map_tmp.insert(std::pair<LogStruct,std::map<std::string,std::string>>(log_struct_tmp,remote_local_directory)); } } m_log_directory.insert(std::pair<UPLOAD_LOG_TYPE,log_directory_map>(upload_load_type,log_directory_map_tmp)); oxml.OutOfElem(); oxml.OutOfElem(); } } else if (upload_load_type == GS_SERVER_LOG) { std::string gs_id = ""; { char szPath[255]; sprintf(szPath,"../config/gs_config.xml"); CMarkupSTL oxml; if (!oxml.Load(szPath) ){ USER_LOG_ERROR("cannot load "<<szPath); assert(false); return false; } if (!oxml.FindElem("root") ){ USER_LOG_ERROR("can not find root node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into root node "<<szPath); assert(false); return false; } if (!oxml.FindElem("gameserver") ){ USER_LOG_ERROR("can not find gameserver node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into gameserver node "<<szPath); assert(false); return false; } if (!oxml.FindElem("id") ){ USER_LOG_ERROR("can not find id node "<<szPath); assert(false); return false; } gs_id = oxml.GetAttrib("value"); } { char szPath[255]; sprintf(szPath,"../share_config/share_log_config.xml"); CMarkupSTL oxml; if (!oxml.Load(szPath) ){ USER_LOG_ERROR("cannot load "<<szPath); assert(false); return false; } if (!oxml.FindElem("root") ){ USER_LOG_ERROR("can not find root node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into root node "<<szPath); assert(false); return false; } if (!oxml.FindElem("logtype") ){ USER_LOG_ERROR("can not find logtype node "<<szPath); assert(false); return false; } if (!oxml.IntoElem()){ USER_LOG_ERROR("can not into logtype node "<<szPath); assert(false); return false; } log_directory_map log_directory_map_tmp; while (oxml.FindElem("type")) { LogStruct log_struct_tmp; log_struct_tmp.folder_name = oxml.GetAttrib("name"); log_struct_tmp.log_file_head = oxml.GetAttrib("log_file_head"); log_struct_tmp.log_file_trail = oxml.GetAttrib("log_file_trail"); if (!log_struct_tmp.folder_name.empty()) { std::map<std::string,std::string> remote_local_directory; std::string remote_direcotry = "ftp://"; remote_direcotry += CCurlFtpMgr::Instance().GetFtpHost(); remote_direcotry += ":"; remote_direcotry += CCurlFtpMgr::Instance().GetFtpPort(); remote_direcotry += "/"; remote_direcotry += "area_"; remote_direcotry += gs_id.substr(0,1); remote_direcotry += "/"; remote_direcotry += "gs_"; remote_direcotry += gs_id; remote_direcotry += "/"; remote_direcotry += log_struct_tmp.folder_name; remote_direcotry += "/"; std::string local_directory = "..\\"; local_directory += log_struct_tmp.folder_name; local_directory += "\\"; remote_local_directory.insert(std::pair<std::string,std::string>(remote_direcotry,local_directory)); log_directory_map_tmp.insert(std::pair<LogStruct,std::map<std::string,std::string>>(log_struct_tmp,remote_local_directory)); } } m_log_directory.insert(std::pair<UPLOAD_LOG_TYPE,log_directory_map>(upload_load_type,log_directory_map_tmp)); oxml.OutOfElem(); oxml.OutOfElem(); } } return true; }
int CDefaultCtrl::InitProcMon(CMarkupSTL & conf, bool reload /*= false*/) { #ifdef OPEN_PRINT printf("set common config file,path_name=%s\n",ix_->argv_[1]); #endif monsrv_.SetCommFilePath(ix_->argv_[1]);//设置公共配置文件路径 std::vector<TGroupInfo> GroupInfoList; int group_num = atoi( conf.GetAttrib("groupnum").c_str() ); //spp_ctrl.xml int check_group_interval = atoi(conf.GetAttrib("check_group_interval").c_str() ); if(check_group_interval != 0 ) monsrv_.SetCheckGroupInterval(check_group_interval); assert(group_num > 0 && group_num < MAX_PROC_GROUP_NUM ); ix_->group_num_ = group_num; ix_->cur_group_id_ = group_num; TGroupInfo groupinfo; int start_grp = 0,end_grp = 0,cur_grp = 0; while(conf.FindChildElem("group")) // 加载进程组信息 { memset(&groupinfo, 0x0, sizeof(TGroupInfo)); start_grp = atoi(conf.GetChildAttrib("start_group").c_str()); end_grp = atoi(conf.GetChildAttrib("end_group").c_str()); groupinfo.adjust_proc_time= 0; strncpy(groupinfo.basepath_, conf.GetChildAttrib("basepath").c_str(), MAX_FILEPATH_LEN); strncpy(groupinfo.exefile_, conf.GetChildAttrib("exe").c_str(), MAX_FILEPATH_LEN); strncpy(groupinfo.etcfile_, conf.GetChildAttrib("etc").c_str(), MAX_FILEPATH_LEN); strncpy(groupinfo.server_flag_,conf.GetChildAttrib("flag").c_str(),MAX_SERVER_FLAG_LEN); groupinfo.exitsignal_ = atoi(conf.GetChildAttrib("exitsignal").c_str()); if(*conf.GetChildAttrib("maxprocnum").c_str()) { groupinfo.maxprocnum_ = atoi(conf.GetChildAttrib("maxprocnum").c_str()); } else { groupinfo.maxprocnum_ = 100; } if(*conf.GetChildAttrib("minprocnum").c_str()) { groupinfo.minprocnum_ = atoi(conf.GetChildAttrib("minprocnum").c_str()); } else { groupinfo.minprocnum_ = 1; } if(*conf.GetChildAttrib("heartbeat").c_str()) { groupinfo.heartbeat_ = atoi(conf.GetChildAttrib("heartbeat").c_str()); } else { groupinfo.heartbeat_ = 60; } groupinfo.maxwatermark_ = atoi(conf.GetChildAttrib("watermark").c_str()); groupinfo.minsrate_ = atoi(conf.GetChildAttrib("minsrate").c_str()); groupinfo.maxdelay_ = atoi(conf.GetChildAttrib("maxdelay").c_str()); groupinfo.maxmemused_ = atoi(conf.GetChildAttrib("maxmemused").c_str()); assert(groupinfo.minprocnum_ >= 0 && groupinfo.minprocnum_ <= groupinfo.maxprocnum_ && groupinfo.exitsignal_ > 0 && groupinfo.groupid_ >= 0); assert(start_grp == cur_grp); if(end_grp < start_grp ) end_grp = start_grp; if(end_grp >= group_num ) end_grp = group_num -1; assert(start_grp <= end_grp ); for(int idx = start_grp; idx <= end_grp;++idx) { groupinfo.groupid_ = idx; GroupInfoList.push_back(groupinfo); } cur_grp = end_grp + 1; if(cur_grp == group_num ) break; } monsrv_.SetGroupNum(group_num); for(int idx = 0;idx < group_num;++idx ) //添加进程组的信息到procmon { memset(&groupinfo, 0x0, sizeof(TGroupInfo)); groupinfo = GroupInfoList[idx]; if(!reload) { monsrv_.add_group(&groupinfo); } else { monsrv_.mod_group(groupinfo.groupid_, &groupinfo); } } monsrv_.set_notify(notify, this); return 0; }