cocos2d. 3.17.2 c++如何实现下载断点续传zip压缩包带进度条
新建类CurlDown
#include “curl/curl.h”
#include
using namespace std;
USING_NS_CC;
/**
-
资源下载curl
*/
class CurlDown
{
public:
CurlDown();
~CurlDown();
void StartDownResZip(string downLoadUrl, int64_t totalSize);
//下载控制
void downloadControler();
//下载
bool download(long timeout);
// 获取远程下载文件的大小
long getDownloadFileLenth();
// 读取本地文件已下载大小
long getLocalFileLength();virtual void DownProgressCallBack(double percent, uint32_t totalSize, uint32_t downSize, string speed) {};
virtual void DownSuccessCallBack(bool isSuccess, string filefullPath);
virtual void DownFailCallBack();
public:
string mFilePath; // 本地存储地址
double mFileLenth; // 下载文件大小
string mDownloadUrl; // 下载URL
CURL *libcurl;
int64_t mTotalSize = 0;
private:
string mFileName; // 下载文件名称
bool isStop;
};
cpp文件
CurlDown::CurlDown()
{
mFileName = “downloaded.temp”;
mFilePath = FileUtils::getInstance()->getWritablePath().append(“downloaded.temp”);
mDownloadUrl = “”;
mFileLenth = 0;
}
ResCurlDown::~ResCurlDown()
{
}
void CurlDown::StartDownResZip(string downLoadUrl, int64_t totalSize)
{
mDownloadUrl = downLoadUrl;
mTotalSize = totalSize;
thread st_d(&CurlDown::downloadControler, this);//创建一个分支线程
st_d.detach();
}
static string getSize(double size)
{
string unit = “”;
char tsize[10] = “”;
if (size > 1024 * 1024 * 1024)
{
unit = “G”;
size /= 1024 * 1024 * 1024;
}
else if (size > 1024 * 1024)
{
unit = “M”;
size /= 1024 * 1024;
}
else if (size > 1024)
{
unit = “KB”;
size /= 1024;
}
spr