ipfs c++client

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ipfs c++client相关的知识,希望对你有一定的参考价值。

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。

代码下载在这里

以上是关于ipfs c++client的主要内容,如果未能解决你的问题,请参考以下文章

如何在node中运行下面的IPFS示例?

Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)(代码片段

IPFS未来发展前景:FIL打造共识共赢共享的全球生态圈!你参与了吗?

全球著名N.F.T拍卖行苏富比采用IPFS进行安全存储

ipfs camp course c demo exercise 1

区块链新趋势,IPFS风口来袭,Filecoin价值千万