|
[传奇技术]God引擎专区 客户端源码分析 res/config/accountpassword.xml读取代码分析
God引擎专区 客户端源码分析 res/config/accountpassword.xml读取代码分析
- bool xmlManager::ReadEditionUrl(string filename)
- {
- // 从指定文件中获取 XML 内容到 xmlBuffer
- string xmlBuffer = FileUtils::getInstance()->getStringFromFile(filename);
-
- // 如果 xmlBuffer 为空,则记录错误日志并返回 false
- if (xmlBuffer.empty())
- {
- logAll("ReadEditionUrl: load xml failed [%s]", filename.c_str());
- return false;
- }
-
- {
- // 创建一个 XMLDocument 对象 kDoc
- tinyxml2::XMLDocument kDoc;
-
- // 使用 kDoc 解析 xmlBuffer,如果解析失败,则记录错误日志并返回 false
- if (kDoc.Parse(xmlBuffer.c_str()))
- {
- logAll("ReadEditionUrl: parse xml failed [%s]", filename.c_str());
- return false;
- }
-
- // 获取根节点
- tinyxml2::XMLElement* root = kDoc.RootElement();
-
- // 获取名为 "EDITION" 的子节点
- tinyxml2::XMLElement* svrNode = root->FirstChildElement("EDITION");
-
- // 如果 svrNode 存在,则获取其属性 "URL" 的值,并将其转换为 ASCII 编码保存到全局变量 g_sEditionUrl
- if (svrNode)
- {
- g_sEditionUrl = CharsetConvert::u2a(svrNode->Attribute("URL"));
- }
-
- // 继续获取名为 "Channel" 的子节点
- svrNode = root->FirstChildElement("Channel");
-
- // 如果 svrNode 存在,则获取其属性 "Name" 的值,并将其转换为整数保存到全局变量 g_channelId
- if (svrNode)
- {
- const char* attr = svrNode->Attribute("Name");
-
- // 如果 attr 存在,则将其转换为整数保存到 g_channelId
- if (attr)
- {
- g_channelId = atoi(attr);
- }
- }
- }
-
- // 创建一个 HttpRequestEx 对象 httpReq 和 HttpConfig 对象 httpConfig,并设置超时时间为 3 秒
- HttpRequestEx httpReq;
- HttpConfig httpConfig;
- httpConfig.sendTimeOut = 3;
- httpConfig.recvTimeOut = 3;
- httpConfig.dnsTimeOut = 3;
- httpConfig.connTimeOut = 3;
- httpReq.setConfig(httpConfig);
- // 创建一个字符串变量 kBufferRecv,用于接收 HTTP 请求的响应数据
- std::string kBufferRecv;
- httpReq.m_pBufferRecv = &kBufferRecv;
-
- int nTryCount = 1;
-
- // 最多进行三次重试
- while (nTryCount <= 3)
- {
- // 发送 HTTP GET 请求到 g_sEditionUrl 指定的地址,并将响应数据保存到 kBufferRecv
- int32_t err = httpReq.sendGetRequest(CharsetConvert::a2u(g_sEditionUrl));
-
- // 如果请求成功且接收到数据,则调用 ReadEditionServerListUrl 函数处理数据并返回结果
- if (!err && !kBufferRecv.empty())
- {
- return ReadEditionServerListUrl(kBufferRecv);
- }
- else
- {
- // 如果请求失败或者没有接收到数据,则记录错误日志,并进行下一次重试
- logAll("ReadEditionUrl: download EditionUrl failed [%d], TRY[%d], [%s]", err, nTryCount, g_sEditionUrl.c_str());
- }
-
- nTryCount++;
- }
-
- // 所有重试都失败,则返回 false
- return false;
- }
复制代码
|
|