cocos2d-x AssetsManager libcurl使用心得
libcurl使用心得
最新正在写cocosclient更新的逻辑。研究了一下cocos2d-x自带的Libcurl,下面是自己在使用过程中的心得和遇到的未解问题。希望大家一起讨论一下,欢迎大家指导。
首先,科普一下。Libcurl为一个免费开源的,clienturl传输库,支持FTP。FTPS。TFTP,HTTP。HTTPS,GOPHER,TELNET,DICT。FILE和LDAP,跨平台。支持Windows,Unix,Linux等,线程安全,支持Ipv6。而且易于使用。
以下是本人重写的简单的下载包的过程:
bool AssetsManagerEx::downLoad()
{
m_iUpdateState = kUpdateStateDownloading;
// Create a file to save package.
//下载文件的存放位置
string outFileName = _storagePath + TEMP_PACKAGE_FILE_NAME;
//新建并打来一个文件 以便下载后写入
FILE *fp = fopen(outFileName.c_str(), "wb");
if (! fp)
{
CCLOG("can not create file %s", outFileName.c_str());
m_iUpdateState = kUpdateStateDownloadError;
return false;
}
fseek(fp,0, SEEK_END);
s_InitSize = ftell(fp);
// Download pacakge
CURLcode res;
//设定curl的链接
curl_easy_setopt(_curl, CURLOPT_URL, _packageUrl.c_str());
curl_easy_setopt(_curl, CURLOPT_WRITEFUNCTION, downLoadPackage);
//设置将data写入到文件流fp中
curl_easy_setopt(_curl, CURLOPT_WRITEDATA, fp);
//设为false 以下才干设置进度响应函数
curl_easy_setopt(_curl, CURLOPT_NOPROGRESS, false);
//进度响应函数,progressFunc显示下载进入或者上传进度
curl_easy_setopt(_curl, CURLOPT_PROGRESSFUNCTION, progressFunc);
//传输数据的对象
curl_easy_setopt(_curl, CURLOPT_RESUME_FROM, s_InitSize);
res = curl_easy_perform(_curl);
curl_easy_cleanup(_curl);
if (res != 0 && res != CURLE_RANGE_ERROR)
{
CCLOG("error when download package");
fclose(fp);
m_iUpdateState = kUpdateStateDownloadError;
return false;
}
CCLOG("succeed downloading package %s", _packageUrl.c_str());
fclose(fp);
m_iUpdateState = kUpdateStateDownloadSuccess;
return true;
}
cocos2d-x AssetsManager libcurl使用心得的更多相关文章
- libcurl使用心得-包括下载文件不存在处理相关(转)
libcurl使用心得 Libcurl为一个免费开源的,客户端url传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持 ...
- cocos2d-x 2.2 资源更新AssetsManager例子代码
转自:http://www.58player.com/blog-2327-601.html // // UpgradeLayer.h // AmazeDemo // // Created by lsw ...
- 最全的libcurl库资源整理
C++ 用libcurl库进行http 网络通讯编程 百度登陆协议分析!!!用libcurl来模拟百度登陆 C++使用libcurl做HttpClient 使用libcurl库进行HTTP的下载 li ...
- linux下c/c++方式访问curl的帮助手册
自:http://blog.chinaunix.net/u1/47395/showart_1768832.html 有个业务需求需要通过curl 代理的方式来访问外网 百度了一把,测试可以正常使用.记 ...
- [Cocos2d-x]Lua 资源热更新
什么是热更新 所谓的热更新,指的是客户端的更新. 大致的流程是,客户端在启动后访问更新的URL接口,根据更新接口的反馈,下载更新资源,然后使用新的资源启动客户端,或者直接使用新资源不重启客户端. 热更 ...
- 项目在cocos 2.23移植到cocos 3.1.0所出现的bug
在建项目时一定要注意选择源代码!而不是预编译库 "extensions/ExtensionMacros.h”: No such file 项目右键-属性-配置属性-c/c++ - 常规-附加 ...
- [转]linux 下 使用 c / c++ 调用curl库 做通信开发
example: 1. http://curl.haxx.se/libcurl/c/example.html 2. http://www.libcurl.org/book: 1. http:/ ...
- 关于cocos2d安装时编译不成功(个人心得)
在解压cocos2d执行vs2010.sln时错误发生不能成功生成.遇到这样的错误: 1>c:\program files\microsoft sdks\windows\v7.0a\includ ...
- cocos2d心得关于精灵帧缓存
在cocos2d中,精灵帧缓存CCSpriteFrameCache是用来存储精灵帧的.它没有特别的属性,只存储了一些用来管理CCSpriteFrame的方法. 以一个例子来说明,一般在又纹理图集的程序 ...
随机推荐
- Sql Server 2005 mdf、ldf文件无法复制问题
[问题原因]Sql Server服务只要启动就一直占用,故无法进行编辑操作. [解决办法 - 1]: 1)在开始-运行对话框中输入"services.msc”,显示如下界面: 2)关闭如上选 ...
- error C2275 将此类型用作表达式非法
http://blog.csdn.net/lqk1985/article/details/7389159 C2275: “size_t”: 将此类型用作表达式非法,同时还导致一堆变量未定义的bug. ...
- FactoryMethod
工厂方法模式 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类 工厂方法的简单实现 (1)创建简单的产品接口 /** * 创建产品接口 * @autho ...
- 聊聊、Zookeeper Windows启动
Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly rel ...
- Windows脚本\批处理命令学习笔记
1.为新建变量赋值: set 变量=值 2.输出变量的值 echo %变量% 3.关闭批处理中命令行的显示(默认是显示命令行的) 在文件開始处增加:echo off 若需又一次显示:echo on 若 ...
- Qt编程简介与基本知识
1. 什么是Qt? Qt是一个基于C++的跨平台应用程序和UI开发框架.它包含一个类库,和用于跨平台开发及国际化的工具. 由挪威Trolltech公司开发,后被Nokia收购,目前被Digia公司收购 ...
- 【重点突破】——Canvas技术绘制音乐播放器界面
一.引言 在用Canvas练习制作了验证码之后,还有一个用Canvas技术很综合的练习——制作音乐播放器.在做这个练习的过程中,还有一个重要的观察点,那就是理解Canvas的一大问题. 二.要求 点 ...
- android ANR产生原因和解决的方法
ANR (Application Not Responding) ANR定义:在Android上,假设你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框.这个对话框称作应用程序无响应(AN ...
- JAVA Eclipse创建Android程序如何实现MainActivity和Fragment相互传递数据
最简单的方法是直接强制生成一个MainActivity的实例,然后可以执行其中的方法,当然也是可以传递参数的 更加复杂的用法可以参考: http://blog.csdn.net/huangyabin0 ...
- Win7如何解决精简版的迅雷7无法运行
网上下载msvcp71.dll和msvcr71.dll把文件放到System32目录下即可 http://www.baidu.com/s?wd=msvcp71.dll&ie=utf-8&a ...