torrent磁力种子搜索(BT磁力搜索引擎)

您所在的位置:网站首页 bt磁力下载在线 torrent磁力种子搜索(BT磁力搜索引擎)

torrent磁力种子搜索(BT磁力搜索引擎)

#torrent磁力种子搜索(BT磁力搜索引擎)| 来源: 网络整理| 查看: 265

ltsession(会话)是最核心的,种子只有加入进去方可下载上传等动作。

session_handle: 主要负责对session的操作。

torrent_handle: 主要负责对种子的操作以及状态查询。

session.pop_alerts(): 可以获取从上次调用以来的所有新警报的列表。每种特定类型的警报可能包括特定于消息类型的附加状态。所有警报都实现一个message()函数,该函数输出警报消息的相关信息。这可以方便地记录事件。

下面先针对各小功能进行代码实现,最好再整合一个完整的代码例子

1. 添加种子/磁力(并下载)lt::session ses; //定义session对象 lt::add_torrent_params p = lt::parse_magnet_uri("magnet:?xt=urn:btih:......"); // 解析磁力链接 p.save_path = "."; // 设置保存到当前目录 lt::torrent_handle h = ses.add_torrent(p); //添加到session,并获得其句柄(该句阻塞执行,有结果才返回)lt::session ses; //定义session对象 auto ti = std::make_shared(torrentFilePath); //通过种子文件 定义 torrent_info对象 lt::add_torrent_params p; p.ti = ti; //这儿很重要, 必须要中torrent_info对象传递进来 p.save_path = "."; p.userdata = static_cast(new std::string(torrentFilePath)); //这根据自己需要而定具体数据 ses.async_add_torrent(std::move(p)); //这儿是异步调用, 调完就离开,获取不到 session_handle

以上为 通过磁力链接 和 torrent 种子这两种方式添加到session的简单例子。torrent_info类又诸多构造函数,对象定义方法也因此非常多,根据需要选择合适的。

另外添加种子到session的方法有 同步调用(阻塞耗时)和异步调用(立即返回)两种,也根据需要选择。

2. 警报

直接上代码讲解

for (;;) { std::vector alerts; ses.pop_alerts(&alerts); //获取自上次调用以来的新警报列表 for (lt::alert const* a : alerts) { //遍历处理自己需要的警报。 std::cout message() params); // p->params为 add_torrent_params 类型 torrent_status st = h.status(torrent_handle::query_save_path); save_file(resume_file(st.info_hash), buf); //保存恢复数据到名为info_hash(长度40)的文件中 } else if (save_resume_data_failed_alert* p = alert_cast(a)) { // 如果不需要保存恢复数据,可以不打印错误信息 return p->error == lt::errors::resume_data_not_modified; }6. session对象的析构销毁

默认情况下会话析构函数会被阻塞。关闭时,需要联系追踪器以停止种子,其他未完成的操作需要取消。关闭有时可能需要几秒钟,主要是因为跟踪器没有响应(和超时)以及DNS服务器没有响应。DNS查找在失控时尤其难以中止。

为了能够异步地开始销毁等待,可以调用session::abort()。它返回一个session_proxy对象,它是一个句柄,用于在销毁会话状态时保持会话状态。它故意不提供任何会话操作,因为它正在关闭。

拥有session_proxy对象后,会话析构函数不会阻塞。但是session_proxy析构函数却将被阻塞。

这可用于并行关闭多个会话或应用程序的其他部分。

7. 完整实例#include #include #include #include #include #include #include #include #include #include #include #include #include #include using clk = std::chrono::steady_clock; // 返回 种子各种状态的名称 char const* state(lt::torrent_status::state_t s) { switch(s) { case lt::torrent_status::checking_files: return "checking"; case lt::torrent_status::downloading_metadata: return "dl metadata"; case lt::torrent_status::downloading: return "downloading"; case lt::torrent_status::finished: return "finished"; case lt::torrent_status::seeding: return "seeding"; case lt::torrent_status::allocating: return "allocating"; case lt::torrent_status::checking_resume_data: return "checking resume"; default: return ""; } } int main(int argc, char const* argv[]) try { if (argc != 2) { std::cerr status[0]; std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3