易语言BT下载模块源码

.版本 2
.支持库 downlib

.程序集 程序集_BT下载
.程序集变量 程序集_下载参数, 任务参数
.程序集变量 程序集_下载任务, 下载对象
.程序集变量 程序集_下载信息, 字节集
.程序集变量 程序集_窗口句柄, 整数型

.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码

网络通讯设置 (204000, 0, 0)
_临时子程序 ()  ‘ 在初始化代码执行完毕后调用测试代码
返回 (0)  ‘ 可以根据您的需要返回任意数值

.子程序 _临时子程序

‘ 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
.子程序 BT_开始下载, , 公开
.参数 窗口句柄, 整数型
.参数 网址文件地址, 文本型, , 要下载的网络文件名;
.参数 本地文件地址, 文本型, , 要保存在本地址全路径名;
.参数 限制速度, 整数型, 可空, 留空为不限制;
.参数 下载线程数, 整数型, 可空, 下载时启用多少线程,默认为1个线程;

程序集_窗口句柄 = 窗口句柄
时钟_创建 (程序集_窗口句柄, “监控”, 1000, &监控)
程序集_下载参数.类型 = #传送常量.下载
程序集_下载参数.文件地址 = 网址文件地址
程序集_下载参数.本地文件路径 = 本地文件地址
.如果 (是否为空 (限制速度))
程序集_下载参数.下载速度 = 0
.否则
程序集_下载参数.下载速度 = 限制速度
.如果结束
.如果 (是否为空 (下载线程数))
程序集_下载参数.默认线程数 = 1
.否则
程序集_下载参数.默认线程数 = 下载线程数
.如果结束
程序集_下载参数.线程等待超时 = 1000
程序集_下载参数.连接超时 = 5000
程序集_下载参数.发送超时 = 5001
程序集_下载参数.接收超时 = 10000
程序集_下载参数.接收大小 = 20480
程序集_下载参数.交互回调函数 = &交互回调函数
程序集_下载参数.日志回调函数 = &日志回调函数
程序集_下载任务.增加新任务 (程序集_下载参数)

.子程序 BT_暂停下载, 整数型, 公开, 成功暂停返回已下载数据大小,暂停失败返回-1;
.局部变量 已下载长度, 整数型

.如果真 (程序集_下载任务.停止指定任务 (程序集_下载信息, 到数值 (2)) = 假)
返回 (-1)
.如果真结束
已下载长度 = 程序集_下载任务.取任务数据项 (程序集_下载信息, 2, 0)
返回 (已下载长度)

.子程序 BT_继续下载, , 公开

时钟_创建 (程序集_窗口句柄, “监控”, 1000, &监控)
BT_下载状态 = 3
程序集_下载任务.继续下载任务 (程序集_下载参数, 程序集_下载信息)

.子程序 BT_改进度条颜色, , 公开
.参数 参数_进度条句柄, 整数型
.参数 参数_要改成的颜色, 整数型

_发送消息 (参数_进度条句柄, 1033, 真, 参数_要改成的颜色)

.子程序 日志回调函数
.参数 线程信息, 整数型
.参数 时间, 文本型
.参数 内容, 文本型
.参数 消息类型, 整数型
.参数 对象信息, 整数型
.局部变量 日志内容, 文本型

‘ 日志内容 = 到文本 (消息类型) + “线程ID:” + 到文本 (线程信息) + “ ” + 时间 + “:” + 内容 + #换行符
‘ 注册一个回调函数,系统产生日志时会调用此函数通知用户,如果为0则不能接收日志。默认为0回调函数需要有5个参数,第一个参数(整数型),线程信息,可以通过”取线程信息“获得每个上传或下载对象的线程信息,与本参数比较从而确定发送本消息的对象。第二个参数(文本型),消息产生的时间。第三个参数(文本型),消息的正文。第四个参数(整数型),消息类型,参见”传送常量“第五个参数(整数型),对象信息,可以通过“取对象信息”获得下载或上传对象的信息与本参数比较,从而确定本消息属于哪个对象。
‘ BT_日志 = 日志内容
.判断开始断 (取文本左边 (内容, 3) = 到文本 (125))
‘ 日志内容 = 到文本 (消息类型) + “线程ID:” + 到文本 (线程信息) + “ ” + 时间 + “:开始下载” + #换行符
‘ BT_日志 = 日志内容
.默认

.判断结束
.子程序 交互回调函数, 整数型
.参数 消息类型, 整数型
.参数 线程信息, 整数型
.参数 参数3, 整数型
.参数 参数4, 整数型
.参数 对象信息, 整数型
.局部变量 获得对象标记, 整数型
.局部变量 内容, 文本型
.局部变量 新文件名, 文本型
.局部变量 线程组, 整数型, , “0”

‘ BT_回调消息 = “对象信息: 第” + 到文本 (程序集_下载任务.取对象信息 ()) + “ 个下载对象”
‘ BT_回调消息 = “线程信息: 第” + 到文本 (程序集_下载任务.取线程信息 (线程组)) + “ 个下载线程”
.判断开始 (消息类型 = #传送常量.下载上传开始)
‘ BT_回调消息 = “收到下载开始消息消息”
BT_下载状态 = 4
内容 = “收到下载上传开始消息,等下载文件大小=” + 到文本 (参数3) + #换行符
‘ BT_回调消息 = 内容
BT_文件总大小 = 参数3
.判断 (消息类型 = #传送常量.下载上传结束)
‘ BT_回调消息 = “收到下载或上传结束消息消息”
内容 = “收到下载上传结束消息,下载文件总长度=” + 到文本 (参数3) + #换行符
‘ BT_回调消息 = 内容
处理事件 ()
延时 (1000)
时钟_销毁 (程序集_窗口句柄, “监控”)
.如果 (程序集_下载任务.取已下载长 () ≠ BT_文件总大小)
BT_下载状态 = 2
.否则
BT_下载状态 = 1
.如果结束

.判断 (消息类型 = #传送常量.新下载线程启动)
‘ BT_回调消息 = “收到新线程启动消息”
内容 = “收到新线程启动消息,开始下载位置=” + 到文本 (参数3) + “结束下载位置=” + 到文本 (参数4) + #换行符
‘ BT_回调消息 = 内容
日志回调函数 (线程信息, 到文本 (取现行时间 ()), “下载线程启动”, 0, 对象信息)
.判断 (消息类型 = #传送常量.下载线程继续下载)
‘ BT_回调消息 = “线程正常结束”
内容 = “收到线程正常结束消息,结束下载位置=” + 到文本 (参数3) + #换行符
‘ BT_回调消息 = 内容
日志回调函数 (线程信息, 到文本 (取现行时间 ()), “线程正常结束在:” + 到文本 (参数3), 0, 对象信息)
.判断 (消息类型 = #传送常量.线程正常结束)
‘ BT_回调消息 = “线程正常异常结束”
内容 = “收到线程正常结束消息,结束下载位置=” + 到文本 (参数3) + #换行符
‘ BT_回调消息 = 内容
日志回调函数 (线程信息, 到文本 (取现行时间 ()), “线程异常结束在:” + 到文本 (参数3), 0, 对象信息)
.判断 (消息类型 = #传送常量.线程异常结束)
‘ BT_回调消息 = “收到收到收到数据”
内容 = “收到收到数据消息 数据大小=” + 到文本 (参数3) + #换行符
‘ BT_回调消息 = 内容
.判断 (消息类型 = #传送常量.存在同名文件)
.’ 如果 (输入框 (“请输入新文件名,如果取消或为空则有系统自动处理”, “发现同名文件:”, 程序集_下载任务.取本地文件路径 (), 新文件名, #输入文本) = 真)
‘ 程序集_下载任务.设新文件名 (新文件名)
‘ 返回 (#传送常量.接收日志)
.否则
返回 (#传送常量.系统日志)
.如果结束

.判断 (消息类型 = #传送常量.收到数据)
‘ BT_下载速度 = 取总下载速度 () ÷ 1000
‘ BT_已下载 = 程序集_下载任务.取已下载长 ()
.判断 (消息类型 = #传送常量.下载数据范围)

.默认

.判断结束
返回 (0)

.子程序 监控

BT_下载速度 = 取总下载速度 ()
BT_已下载 = 程序集_下载任务.取已下载长 ()
BT_剩余时间 = 取整 ((BT_文件总大小 - BT_已下载) ÷ BT_下载速度)
BT_下载进度 = 取整 (BT_已下载 ÷ BT_文件总大小 × 100)

.子程序 时钟_创建, 逻辑型, , 创建一个时钟;成功返回真,失败返回假; [精易]
.参数 窗口句柄, 整数型, , 直接用“取窗口句柄()”命令取出本窗口句柄即可
.参数 时钟标识文本, 文本型, , 随便输入一些文本,销毁时用来辩认的;
.参数 时钟周期, 整数型, , 时钟周期
.参数 时钟_周期事件, 子程序指针, , 时钟_周期事件

返回 (_时钟创建 (窗口句柄, 时钟标识文本, 时钟周期, 时钟_周期事件))

.子程序 时钟_销毁, 逻辑型, , 销毁一个时钟;成功返回真,失败返回假; [精易]
.参数 窗口句柄, 整数型, , 直接用“取窗口句柄()”命令取出本窗口句柄即可
.参数 时钟标识文本, 文本型, , 创建时用的标识文本

返回 (_时钟销毁 (窗口句柄, 时钟标识文本))

BT下载易语言源码

Leave a Comment

 
Copyright © 2008-2021 lanxinbase.com Rights Reserved. | 粤ICP备14086738号-3 |