搜索
查看: 5062|回复: 1

调用miniblink做界面的aria2下载器( 已修正断线问题 )

  [复制链接]

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-12-15 06:42:12 | 显示全部楼层 |阅读模式
aria2是一个非常优秀的开源免费下载工具,aria2提供的调用接口类似 chrome,也是使用WebSocket + JSON-RPC 2.0协议,使用aardio标准库中的 web.socket.jsonClient 几句代码就可以直接调用了。我写几个简单的调用,更多的接口大家可以看看文档: https://aria2.github.io/manual/en/html/aria2c.html#rpc-interface

aria2运行时会显示控制台窗口,如果我们自己做个下载界面可能不想显示这个控制台窗口,使用 aardio中的process.popen启动aria2就可以隐藏控制台窗口了,但是这个会带来一个问题,就是下着下着突然就断线没反应了。之前已经注意到了这个问题,但没有时间仔细研究。今天有空,仔细的看了一下,发现如果不隐藏控制台就不会断线,猜测是进程管道写满了,然后写了个定时器,不断的把控制台的内容使用process.popen的peek()函数读出来,就正常了,解决问题的代码如下:
winform.addtimer(
    1000,function(){
        prcs.peek();
//prcs是process.popen对象
    }
)

于是我考虑稍微封装一下这个启动aria2的代码做一个扩展库,做扩展库的时候打开aria2的文档在看,看到有个--quiet的启动参数可以让aria2不写控制台,然后加了这个参数试了一下,发现不用调用prcs.peek() 了。

下面是最新的示例代码:
import win.ui;
/*DSG{{*/
var winform = win.form(text="调用aria2 JSON-RPC接口";right=770;bottom=467)
winform.add(
btnConnect={cls=
"button";text="连接到aria2";left=557;top=371;right=718;bottom=409;z=4};
btnSend={cls=
"button";text="调用aria2下载文件";left=597;top=413;right=739;bottom=458;db=1;dr=1;z=3};
txtData={cls=
"edit";text="http://download.aardio.com/aardio/aardio.7z";left=34;top=416;right=587;bottom=455;db=1;dl=1;dr=1;edge=1;multiline=1;z=2};
txtMessage={cls=
"edit";left=29;top=22;right=741;bottom=363;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;z=1}
)
/*}}*/

import process.aria2;
var aria2 = process.aria2();
var ws = aria2.startClient();

ws.on(
"open",function(){
    winform.txtMessage.print(
"已连接到aria2");         
})

//显示错误信息
ws.on("error",function(err){
    winform.txtMessage.print(
"出错了",err);
});  

//监听aria2事件
ws.on("aria2.onDownloadStart",function(param){
   
    winform.txtMessage.print(
"aria2.onDownloadStart,原因:"+web.json.stringify(param));
})

//调用aria2打开一个网页
winform.btnSend.oncommand = function(id,event){
   
    ws.aria2.addUri({winform.txtData.text}).end =
function(result,err){
        
if(err)
            winform.txtMessage.print(
"下载出错了",web.json.stringify(err))
        
else {
            winform.txtMessage.print(
"成功添加任务",web.json.stringify(result))
        }
        
    }
}

//连接aria2
winform.btnConnect.oncommand = function(id,event){
    ws.connect();
}  

winform.onClose =
function(hwnd,message,wParam,lParam){
    ws.aria2.shutdown();
}

winform.show();
win.loopMessage();

下面再附上一个调用Miniblink,AriaNg做界面的aria下载器源码:
完整源码下载: process.aria2.7z (743.24 KB, 下载次数: 53)
回复

使用道具 举报

0

主题

1

帖子

18

积分

新手入门

Rank: 1

积分
18
发表于 2017-12-15 13:36:39 | 显示全部楼层
aria2 是个好东西 一直在用 以前就写了个 批量下载小工具 用来下载资源 尤其对现今各大网盘的无脑限速 有特效
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-17 15:04 , Processed in 0.062500 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表