eMule电驴eDonkey从死到生

我带大家来研究一下eMule是如何运转的,

先说一个额外的话题,我强烈鄙视,’我思念的城市’这位网友,他在eNet程序员论坛 » 挨踢生涯 中发表的文章:c++程序员修炼真经之四,是全文抄袭我的原创,极度鄙视这种用别人的智慧装点

自己门面的人.首先大家找到emule.cpp

CemuleApp::CemuleApp(LPCTSTR lpszAppName):CWinApp(lpszAppName)

里面大量的版本信息啊,,界面大小图标啊,加载gdiplus.dll,我们先不看,就看这句 m_UPnP_IGDControlPoint = CUPnP_IGDControlPoint::GetInstance();

这是在启动电驴的PnP控制

然后我们看BOOL CemuleApp::InitInstance() 这里面最主要的就是他的配置类的初始化,

这个配置类在eMule整个程序运行的过程中都会起到非常重要的作用,

thePrefs.Init();

更重要的马上就登场了 CemuleDlg dlg;

emuledlg = &dlg;

m_pMainWnd = &dlg;

我们立即转到 BOOL CemuleDlg::OnInitDialog() 去看看

这里面绝大部分都是eMule界面的一些参数预设置,但是最核心的一个步骤,老外也很不厚道啊,他隐藏的很神秘啊,现在我来为大家点出来

VERIFY( (m_hTimer = ::SetTimer(NULL, NULL, 300, StartupTimer)) != NULL );

在这里他启动了一个非常重要的定时器,

void CALLBACK CemuleDlg::StartupTimer(HWND /*hwnd*/, UINT /*uiMsg*/, UINT /*idEvent*/, DWORD /*dwTime*/)

我们来看他的

case 4

try {

theApp.downloadqueue->Init();

}

非常关键的一步,他在初始化他的下载队列,

theApp.listensocket->StartListening() 启动监听端口,

可以接受连接了

theApp.clientudp->Create() 创建UDP客户端

再看case 6

AfxBeginThread(RUNTIME_CLASS(CAICHSyncThread),THREAD_PRIORITY_BELOW_NORMAL,0);

这是他的智能HASH算法线程,以后会和大家讲到.从这时起整个电驴就跑起来啦

版权声明:本文为博主原创文章,未经博主允许不得转载。

自信是一个人的胆,有了这个胆,你就会所向披靡!

eMule电驴eDonkey从死到生

相关文章:

你感兴趣的文章:

标签云: