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;
}
声明:本文系互联网搜索而收集整理,不以盈利性为目的,文字、图文资料源于互联网且共享于互联网。
如有侵权,请联系 yao4fvip#qq.com (#改@) 删除。
如有侵权,请联系 yao4fvip#qq.com (#改@) 删除。