cocos2dx中Http鏈接以及使用JsonCPP解析的簡單函數

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
//     CCDirector::sharedDirector()->end();
// 
// #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
//     exit(0);
// #endif
	extension::CCHttpRequest* req = new extension::CCHttpRequest();
	req->setUrl("http://127.0.0.1/xm/xm.plist");
	req->setRequestType(extension::CCHttpRequest::kHttpPost);
	std::vector<std::string> headers;
	headers.push_back("Content-Type: application/json; charset=utf-8");
	req->setHeaders(headers);
	const char* postData = "catalog=2&pageIndex=1&pageSize=5";
	req->setRequestData(postData,strlen(postData));
	req->setResponseCallback(this,callfuncND_selector(HelloWorld::onHttpRequestCompleted));
	req->setTag("Post_my_data");
	extension::CCHttpClient::getInstance()->send(req);
	req->release();
}

void HelloWorld::onHttpRequestCompleted( cocos2d::CCNode *sender ,void *data )
{
	CCLOG("0---------------onHttpRequestCompleted");
	AllocConsole();
	freopen("CONIN$", "r", stdin);
	freopen("CONOUT$", "w", stdout);
	freopen("CONOUT$", "w", stderr);
	extension::CCHttpResponse* rsp = (extension::CCHttpResponse*)data;
	if (!rsp)
	{
		return;
	}
	if (0 != strlen(rsp->getHttpRequest()->getTag()))
	{
		CCLog("%s completed", rsp->getHttpRequest()->getTag());
	}

	int statusCode = rsp->getResponseCode();
	char statusString[64] = {};
	sprintf(statusString ,"Http status code:%d ,tag = %s" ,statusCode ,rsp->getHttpRequest()->getTag());
	CCLog("response code:%d" ,statusCode);
	if (!rsp->isSucceed())
	{
		//this->praseJsonFromString();m_jsonrpc.bnmjsonfile.jf
		this->praseJsonFromFile("m_jsonrpc.bn");
		CCLog("response failed");
		CCLog("error buffer:%s" ,rsp->getErrorBuffer());
	}
	std::vector<char> *buffer = rsp->getResponseData();
	std::string result = "";
	for (unsigned int i = 0; i < buffer->size(); i ++)
	{
		printf("%c" ,(*buffer)[i]);
	}

}

int HelloWorld::praseJsonFromString()
{
	const char* str = "{\"uploadid\": \"UP000000\",\"code\": 100,\"msg\": \"\",\"files\": \"\"}";
	Json::Reader j_reader;
	Json::Value j_value;
	if (j_reader.parse(str,j_value))
	{
		std::string upload_id = j_value["uploadid"].asString();
		CCLog("uploadid=%s",upload_id.c_str());
		int code = j_value["code"].asInt();
	}
	
	return 0;
}

int HelloWorld::praseJsonFromFile( const char* fileName )
{
	Json::Reader j_reader;
	Json::Value j_value;
	std::ifstream d_to_m;
	d_to_m.open(fileName,std::ios::binary);
	if (j_reader.parse(d_to_m,j_value))
	{
		// 得到"files"的數組個數  
// 		int file_size = j_value["files"].size();
// 		// 遍歷數組  
// 		for(int i = 0; i < file_size; ++i)  
// 		{  
// 			Json::Value val_image = j_value["files"][i]["images"];  
// 			CCLOG("i=%d",i);
// 			CCLOG("file_size=%d",file_size);
// 			int image_size = val_image.size();  
// 			for(int j = 0; j < image_size; ++j)  
// 			{  
// 				std::string type = val_image[j]["type"].asString();  
// 				std::string url = val_image[j]["url"].asString();  
// 				//CCLOG("type=%s,url=%s",type.c_str(),url.c_str());
// 			}  
// 		}  
		CCLOG("%s",j_value.toStyledString().c_str());
		CCLOG("j_value[result][ssid]=%s",j_value["result"]["ssid"].asString().c_str());
	}
	
	d_to_m.close();
	return 0;
}

發佈了60 篇原創文章 · 獲贊 21 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章