cocos获取网络时间和系统时间(完美)

本文介绍了在cocos2d-x中如何获取网络时间以及系统时间。通过CCHttpClient异步请求百度的时间API,利用rapidjson解析JSON数据,若解析失败则采用正则表达式提取时间。当网络请求失败或解析失败时,会尝试获取本地系统时间。同时,文章强调了在CCHttpClient异步请求中正确处理回调的方法,确保在数据准备好后再进行使用。

访问百度的时间api获取到网页,使用CCHttpClient进行网络时间的数据请求和使用rapidjson解析Http请求得到的json数据 
如果使用rapidjson解析失败则对网络数据的字符串使用正则进行截取,获取时间字符串的10个字符,atoi得到时间值;
如果使用rapidjson解析失败则对网络数据的字符串使用正则(c++11 <regex>)进行截取,获取时间字符串的10个字符,
atoi得到时间值;如果网络访问失败或者获取解析网络数据失败,则根据不同平台去获取本地时间

新建一个c++类MyTime,继承自CCNode并重写init()方法。然后引入CCHttpClientrapidjson需要的头文件

#ifndef __MYTIME_H__
#define __MYTIME_H__

#include "cocos2d.h"
#include "cocos-ext.h"
#include "json\rapidjson.h"
#include "network\HttpClient.h"

using namespace std;
using namespace cocos2d;
using namespace extension;
using namespace rapidjson;
using namespace network;

//class MyTime;
//typedef void (Object::*SEL_MyTime)(MyTime* pSender);
//#define myTime_selector(_SELECTOR)(SEL_MyTime)(&_SELCTOR);

class MyTime : public Node
{
	public :

	CREATE_FUNC(MyTime);

	CC_SYNTHESIZE(int, m_Year, Year);
	CC_SYNTHESIZE(int, m_Month, Month);
	CC_SYNTHESIZE(int, m_Day, Day);
	CC_SYNTHESIZE(int, m_Hour, Hour);
	CC_SYNTHESIZE(int, m_Minute, Minute);
	CC_SYNTHESIZE(int, m_Second, Second);
	
	
	void requestNetTime();
	void requestNetTime(/*CCObject* pTarget, */const function<void()>& pSelector);
	//void displayTime();

private:
	virtual bool init();

	function<void()> m_pSelector;
	//SEL_MyTime m_pSelector;

	void onHttpComplete(HttpClient* sender, HttpResponse* response);

	//解析json文件,获取时间值
	bool readJson(string jsonStr);

	//从doucment对象获取key值失败,进行的截取字符串操作,获取时间值
	bool splitString(const string content,string pattern);

	//网络获取时间值失败,进行本地获取时间值,
	void getLocalTime();

	//设置时间对象
	void setTime(time_t tm);
};

#endif</span></span>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值