ipfs c++client

39 篇文章 2 订阅
8 篇文章 0 订阅

ipfs

星际文件系统,大家都知道
代码下载在这里

c++ ipfs client

这个客户端是根据一个开源的client修改的,实际上依然是根据libcurl的http协议来保持节点的互通,也就是外层协议封装的是http,restful方式,而内层核心依然是ipfs的文件系统方式。

例如节点就建立在本机,ipfs::client client(“localhost”,5001) 建立基础客户端,如下代码所示

int main(int, char**) {
	try {
		ipfs::Client client("localhost", 5001);

		/** [ipfs::Client::FilesGet] */
	
		std::stringstream contents;
		client.FilesGet(
			//"Qmd7tVnUvsGVUcn6Hnv4Td6bmSfKq17bsQgfsDRy5BBVoX",
			//"Qme4kQCUWinrYm29afMw1nodBNE3A3ykd85MuB9MJcDxcm",
			"QmRdPPAPup1PxUoWbNP48dHKhm6B3ZSzR2Pn1AGCkeeGSz",
			&contents, DownloadCallback,ProgressCallback);
		//std::cout << contents.str().length();
		//std::cout << "Retrieved contents: " << contents.str().length() <<std::endl; // contents.str().substr(0, 8) << "..."
		

	}
	catch (const std::exception& e) {
		std::cerr << e.what() << std::endl;
		return 1;
	}
	Sleep(INFINITY);
	return 0;
}

回调函数DownloadCallback,ProgressCallback 分别代表下载callback 和进度callback,如下所示

static size_t DownloadCallback(void* pBuffer, size_t nSize, size_t nMemByte, void* pParam)
{
	//把下载到的数据以追加的方式写入文件(一定要有a,否则前面写入的内容就会被覆盖了)  
	FILE* fp = NULL;
	fopen_s(&fp, "c:\\222.docx", "ab+");
	size_t nWrite = fwrite(pBuffer, nSize, nMemByte, fp);
	fclose(fp);
	return nWrite;
}

static int ProgressCallback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
	if (dltotal > -0.1 && dltotal < 0.1)
		return 0;
	int nPos = (int)((dlnow / dltotal) * 100);
	std::cout << "now the process is:" << nPos << std::
		endl;
	//通知进度条更新下载进度  
	//::PostMessage(g_hDlgWnd, WM_USER + 110, nPos, 0);
	//::Sleep(10);  
	return 0;
}

客户端冯转了文件增加和文件获取,如下所示

 void FilesGet(
      const std::string& path,
      std::iostream* response,
	  //下载回调
	  DlCallback dlcallback = NULL,
	  //进度回调
	  PrCallback prcallback = NULL
  );

  void FilesAdd(
      /** [in] List of files to add. */
      const std::vector<http::FileUpload>& files,
      /** [out] List of results, one per file. For example:
       * [{"path": "foo.txt", "hash": "Qm...", "size": 123}, {"path": ...}, ...]
       */
      Json* result);

封装的函数还是相当的可靠的,代码质量可以,json解析使用的是json.hpp。

代码下载在这里

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qianbo_insist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值