Frostwire代码分析
Frostwire是一个基于其他许多优秀开源项目开发的一款文件分享软件。它的前身是LimeWire Gnutella客户端;但是已经有了很大的变动。
现在FrostWire已经不再支持Gnutella协议;变成一个BT客户端;并且还内置了播放器能够在线播放音乐和p2p网络中的电影资源。
此项目的主要依赖库如下:
(1)BitTorrent 功能实现主要由frostwire-jlibtorrent实现(包括底层bt协议实现,与服务器 的交互通信等bt客户端的基本功能);
(2)媒体播放器主要源自开源项目MPlayer ;
(3)http协议交互来自于Apache Commons项目;
(4)搜索功能使用了H2 database和Lucene indexes这两个库;
(5)JSON解析使用了google-gson库;
建立此工程项目所需要的依赖:
(1)JDK1.7以上版本
(2)Apache Ant
(3)Gradle
Frostwire-desktop项目代码结构:
代码位置 |
包内容 |
Src/com/forstwire |
Frostwire核心功能包,包括搜索、mp3文件获取,JSON引擎,Mplayer播放内核 实际上这个工程只是实现了界面,并调用底层的功能实现。
|
src/com/limegroup/gnutella/gui/ |
GUI设计,采用Mediator中介者模式;主要有GUIMediator.java(控制主界面)DownloadMediator(控制下载界面)MPlayerMediator(播放) |
resources/ |
存放资源,各种图标 |
lib/jars |
依赖的jar包 |
lib/jars-src |
依赖jar包的源码,供后期代码调试使用 |
lib/messagebundles |
存方多国语言的翻译包 |
|
|
Frostwire-jlibtorrent 项目代码结构:
代码位置 |
包内容 |
Src/frostwire/jlibtorrent |
客户端的核心功能都在这个包中实现,download,session管理,DHT网络连接,peer连接,调用底层库jlibtorrent.dll并把接口提供给上层等等。 |
Src/frostwire/jlibtorrent/alert |
Libtorrent运用alert机制通知某一事件的触发这个包包含所有的alert,并提供给接口给外部,当完成某一事件后,比如添加种子会触发ADD_TORRENT这个alert下的事件,程序便会执行此事件触发的操作。 |
Src/frostwire/jlibtorrent/demo |
一些简单的BT下载的demo |
Src/frostwire/jlibtorrent/swig |
通过swig将libtorrent编译成供java调用的接口,这个给出了连接底层库的所有接口。 |
Frostwire-core项目代码结构
代码位置 |
包内容 |
Core/frostwire/bittorent |
客户端BT下载的核心引擎,UI层就是通过这个包里的下载引擎完成下载的控制,如多线程下载,下载的控制(暂停,删除....) |
其他 |
整个项目依赖的一些库的源码 |
项目运行截图:
BT客户端主要有以下功能
1、解析.torrent文件,获取要下载文件的详细信息
2、与tracker服务器建立连接,并交互信息
3、根据从tracker获取的信息,与其他peer建立连接,并下载所需的文件片段
4、监听某端口,等待其他peer连接