eMule电骡嘚吧嘚

发现大家老问我一些只要你认真看就能看到的问题

另外,我建议大家不要对电驴代码的具体实现太执着了,吸取他里面你需要的就行了,否着你就直接把他的界面部分改成一个服务,你直接调用就得了,在短时间内想写的比他好那不现实,尽管他实现的也不是很完美

eMule有很多的变种,官方原版的那个是所有MOD的亲生父母,但下载下来以后还需要自己补上
几个eMule用到的第三方库,veryCD版的eMule我是不推荐的,emuleXtreme这个MOD下载速度各方面
表现不错。不过我用的是eMulevMorphXTv,这个是和官方原版同步更新比较即时的一个MOD.
闲话少说,我今天来为大家点出eMule最核心的一个源码文件

class CPartFile
这个类的作用在eMule里是抗霸子一类的。
首先来看他的头文件
enum EPartFileStatus{
 PS_READY   = 0,
 PS_EMPTY   = 1,
 PS_WAITINGFORHASH = 2,
 PS_HASHING   = 3,
 PS_ERROR   = 4,
 PS_INSUFFICIENT  = 5,
 PS_UNKNOWN   = 6,
 PS_PAUSED   = 7,
 PS_COMPLETING  = 8,
 PS_COMPLETE   = 9
};
这是文件状态准备等待被HASH HASH过程中

#define BUFFER_TIME_LIMIT 60000   // Max milliseconds before forcing a flush
这是他回写硬盘的最大时间间隔
struct Requested_Block_Struct
{
 uint64 StartOffset;
 uint64 EndOffset;
 uchar FileID[16];
 uint64  transferred; // Barry - This counts bytes completed
};
这个很重要,是他的请求块结构
struct Gap_Struct
{
 uint64 start;
 uint64 end;
};
这是他的坑结构
struct PartFileBufferedData
{
 BYTE *data;      // Barry - This is the data to be written
 uint64 start;     // Barry - This is the start offset of the data
 uint64 end;      // Barry - This is the end offset of the data
 Requested_Block_Struct *block; // Barry - This is the requested block that this data relates to
};
这是缓冲区结构
struct FlushDone_Struct
{
 bool bIncreasedFile;
 bool bForceICH;
 bool* changedPart;
};
刷新完成
struct PartfileSourceCache
{
 uint16   nPort;
 uint32   dwID;
 uint32   dwServerIP;
 uint16   nServerPort;
 uchar   achUserHash[16];
 uint8   byCryptOptions;
 bool   withuserhash;
 bool   ed2kIDFlag;
 ESourceFrom  sourcefrom;
 uint32   expires;
};
文件源节点缓冲
#define SOURCECACHEPROCESSLOOP MIN2MS(1) //every one minute把1分转成毫秒值
#define SOURCECACHELIFETIME  MIN2MS(30) //expires after 30 minutes把30分转成毫秒值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值