一、整体结构 网络模块(负责收发数据、流量控制)(多个线程处理,每个线程处理一定数目的用户,一个用户的所有处理都在同一个线程内实现) 业务处理模块(处理客户端的请求、以及发送数据给客户端)、有两个线程,一个负责控制,另外一个负责发送数据给客户端 在请求种子时,只有是客户端有这个文件,就都是这个文件的种子 二、下载 CPatchFile 文件hash、hashset、种子信息、块数、块列表、每部分频度 CPatchFileMng 创建CPatchFile、查找patch信息, CDownloadFile 处理下载信息,下载过程 对于未下载完的文件,需要从硬盘读取,继续下载,对于未下载完就退出的程序,需要把下载信息保存在硬盘上 对于新的下载,需要创建两个文件,一个是要下载的文件的名字,是稀疏文件,另外一个是down文件,保存要下载文件的信息 稀疏文件对于fat32系统似乎不支持,因为还是创建一个0字节的文件吧 需要保存的信息:文件名、文件大小、已经下载的块、文件hash、每个部分hash、已经下载的字节数、坏块数 下载时,分为以下几个过程 先获取要下载文件的hashset CPatchFileKeys 处理hash、分块信息 CFileSource 拥有的PatchFile各部分的活跃度 三、Patch生成