Cocos2.2.3在线下载——断点续传

前端之家收集整理的这篇文章主要介绍了Cocos2.2.3在线下载——断点续传前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码实现了Cocos的在线下载中的断点续传,可跨平台使用

#include <fstream>
#include <iostream>
#include <curl/curl.h>

long DLManager::downloadResume()
{
	//判断该要下载的文件是否存在
	//http://blog.csdn.net/roger_77/article/details/1538447/
	fstream _file;
	_file.open(getTargetPath().c_str(),ios::in);
	if(_file)
	{
		CCLog("%s is Exist",getTargetPath().c_str());
	}
	else
	{		
		CCLog("%s is not Exist",getTargetPath().c_str());
		return -1;
	}
	_file.close();

	//获取已下载文件的大小
	long fileSize = 0;
	FILE * fp = fopen(getTargetPath().c_str(),"rb");
	if (!fp)
	{
		return -1;
	}
	fseek(fp,SEEK_END); // 移到文件末尾
	fileSize = ftell(fp);
	CCLog("getTargetPath().c_str() : size = %d\n",fileSize);
	fclose(fp);

	return fileSize;
}

bool DLManager::download()
{
	//断点续传获取续传文件的大小
	_curPackageSize = downloadResume();
	
	//打开文件,将文件指针移到末尾
	FILE *fp = fopen(getTargetPath().c_str(),"a+b");		
	if (! fp)
	{		
		CCLog("can not create file %s",getTargetPath().c_str());
		return false;
	}
	fseek(fp,SEEK_END);
	
	//下载文件
	CURL *_curl;
	_curl = curl_easy_init();
	if (! _curl)
	{
		CCLog("can not init curl");
		return false;
	}		
	
	// Download pacakge
	CURLcode res;	
	curl_easy_setopt(_curl,CURLOPT_URL,_packageUrl.c_str());
	curl_easy_setopt(_curl,CURLOPT_WRITEFUNCTION,downLoadPackage);
	curl_easy_setopt(_curl,CURLOPT_WRITEDATA,fp);
	curl_easy_setopt(_curl,CURLOPT_NOPROGRESS,false);
	curl_easy_setopt(_curl,CURLOPT_PROGRESSFUNCTION,DLManagerProgressFunc);
	curl_easy_setopt(_curl,CURLOPT_PROGRESSDATA,this);
	
	if(_curPackageSize != -1)
	{//若存在断点续传的文件,则设置下的起始位置,即已下载的包的大小
		curl_easy_setopt(_curl,CURLOPT_RESUME_FROM,_curPackageSize);
	}
	
	res = curl_easy_perform(_curl);
	curl_easy_cleanup(_curl);
	if (res != 0)
	{		
		CCLog("error when download package");
		fclose(fp);
		return false;
	}
	
	CCLog("succeed downloading package %s",_packageUrl.c_str());
	fclose(fp);
}
原文链接:https://www.f2er.com/cocos2dx/340144.html

猜你在找的Cocos2d-x相关文章