AD商业广告自由选择
AD商业广告自由选择

God引擎专区 客户端源码分析 res/config/accountpassword.xml读取代码分析

正文概述 开源人   2024-11-04 23:34:55  
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;
}
 


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