author: wolfenstein
BT的源代码是使用python写的,这是一种动态类型的语言,所有的对象不需要定义其类型,任何对象可以作为参数传入某个函数中,唯一的要求是当调用该对象的某个方法时,它必须存在。另外这种语言提供了大量的模块,这些模块中很多都能在不同的平台实现其功能,大大得方便了编写跨平台程序。
在BT的代码中,主要功能都有命令行模式和图形界面模式两种执行方式,但最后它们执行的核心功能的代码都是相同的,区别在于执行这些核心功能时,传递给它们的参数是从命令行和配置文件处获取还是从图形界面中获取。
在我开始学习时,看的是4.0.3版本的代码。主要有两个主要的执行模块btdownloadgui和btmaketorrentgui,前者是客户端,后者是制造种子文件的工具(从4.0.0版本开始,btmaketorrentgui代替了btcompletedir)。另外,还有个tracker模块也很重要。学习的时候如果喜欢直接切入正题,就可以不看和gui相关的部分,直接看实现核心功能的模块。
提一下图形界面,BT的图形界面模块用的是gtk,它的详细资料可以在这里找到:
[ http://www.pygtk.org/ ] http://www.pygtk.org/
使用gtk编写图形界面的好处是它的跨平台性很好,可以在不同的操作系统上生成风格相近的图形界面。另外在BT中貌似还用了另一个图形界面模块库(btdownloadcurses),我大概看了一下说明,好像这个curses只能用于某些平台,想了下我主要的学习目的是BT,于是在GUI方面就集中精力攻gtk了,这个curses库就没有去看它。
我学习BT的过程大概如下:
看python语言教程熟悉python语言。
试着看btdownloadgui,发现看着头很大,另外发现很多模块在python网站上的模块参考手册上没有。遂发现了gtk的网站,熟悉了一下使用gtk编写GUI程序的基本方法后,继续试图看btdownloadgui的图形部分,有些明白,但是还是感觉到有些吃力。
开始尝试转移一下目标,先看btmaketorrentgui,研究一下种子文件是怎么生成的,如果心里对种子文件的结构有了解再研究下载部分的代码应该能轻松些。这部分比较成功得完成了,学习到了BT的种子文件的结构,还对gtk的GUI程序编写也比较熟悉了。
接下来看的是tracker部分的代码,看的时候基本上都看完了,知道了一个tracker是如何得与客户端通信。但是对于一些具体的数据结构可能还会存在一些模糊的地方。
最后回过头来看btdownloadgui的代码,发现终于可以顺利得看下去了。然后将所有看到的结果总结起来,学习到了BT的通信协议。
今后的部分将把以上说的学习过程具体展开。