cocos2d-x使用curl获取文件大小
来源:互联网 发布:织梦dedecms建站教程 编辑:程序博客网 时间:2024/05/16 17:21
由于手游项目中部分游戏房间游戏资源是动态下载的,还有安卓APK包提示版本更新在线安装时也需要先获取到安装包大小,提示玩家本次更新所耗流量,故用curl写了个获取文件大小的功能,后面还会用curl实现热更新功能;
首先说下原理,由于http底层其实也是由socket实现的,默认端口通常是80端口,数据的传输则根据http相关协议进行编写传输,故自己用socket写一个http请求并做好相应数据解析也是可以实现的,但再造个轮子要考虑的比较多,不在此文讨论之列,且CURL是一个很成熟通用的库,所以此处使用curl来实现获取文件大小;
#include <curl/curl.h>#include <curl/easy.h>#include <thread>#define LOW_SPEED_LIMIT 1L#define LOW_SPEED_TIME5Lsize_t save_header(void *ptr, size_t size, size_t nmemb, void *data){ return (size_t)(size * nmemb);}void URLLoader::loadURLHead(const char* url){ auto curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST,"GET"); //使用CURLOPT_CUSTOMREQUEST// curl_easy_setopt(handle, CURLOPT_HEADER, 1); //部分服务器可能不支持Header响应 curl_easy_setopt(curl, CURLOPT_NOBODY, 1); //不需求body,只获取http头响应 curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, save_header); curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, LOW_SPEED_LIMIT); curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, LOW_SPEED_TIME); auto t = std::thread(&URLLoader::onURLThread, this,curl); t.detach();}void URLLoader::onURLThread(void* curl){// URLData* urlData = new URLData(-1,""); CURLcode res; do{ res = curl_easy_perform(curl); if (res != 0) { break; }else{ CURLcode return_code; long retcode = 0; //状态码 return_code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE , &retcode); CCLOG("return_code:%ld",retcode);// urlData->setStatusCode(retcode); if((CURLE_OK!=return_code) || !retcode) { break; } //响应内容长度 double downLength = 0; curl_easy_getinfo(curl,CURLINFO_CONTENT_LENGTH_DOWNLOAD,&downLength);// urlData->setContentLength((size_t)downLength); CCLOG("downLength:%f",downLength); } }while (0); curl_easy_cleanup(curl);//清理 //主线程响应 Director::getInstance()->getScheduler()->performFunctionInCocosThread([&, this,urlData]{ //数据处理... }); }
以上为相关核心代码,使用时配置好curl头文件搜索路径,如xcode下为:$(SRCROOT)/../../cocos2d-x/external/curl/include/ios
URLLoader是自己封装的一个导出给Lua使用的http类,URLData类是响应相关数据的封装,在此就不贴出代码了~
1 0
- cocos2d-x使用curl获取文件大小
- cocos2d-x 中的使用CURL
- cocos2d-x中的curl
- cocos2d-x 网络编程一(cURL初级使用)
- cocos2d-x 网络编程一(cURL初级使用)
- cocos2d-x系列笔记(8)---在cocos2d-x项目中使用curl与web服务器通信
- cocos2d-x 网络编程Curl
- cocos2d-x 网络编程Curl
- cocos2d-x使用OpenGL获取屏幕截图
- Cocos2d-x cURL简单示例demo
- cocos2d-X 节点(curl.h)API
- cocos2d-x 引擎: 通过curl操作cookie
- cocos2d-x 脚本动态更新,curl断点续传
- cocos2d-x 获取摄像头
- cocos2d-x 获取日期
- 使用curl获取数据
- COCOS2D-X之使用CURL下载图片的一个简单Demo
- cocos2d-x获取程序当前内存使用量 GetProcessMemoryInfo 函数
- 题目1168:字符串的查找删除
- Windows高级编程学习笔记(二)
- js实现京东商城导航
- [宏哥传]01,求职有感
- android源码分析系列(二):propertyAnimation和NineOldAndroids源码分析
- cocos2d-x使用curl获取文件大小
- js信息滚动marquee标签
- Matlab问答day10
- 今天诸事不宜
- android绘图处理系列(一):bitmapShader和Xfermode
- python opencv 使用摄像头捕获视频并显示
- python opencv 读取视频文件并显示
- 排序算法(一)模板类
- DBFS POJ1198 Solitaire