emule(电驴/电骡)源码分析

void CUpDownClient::ConnectionEstablished():

emule中, CUpDownClient 代表了一个peer。一个peer会被放置到各种队列中去。比如,还未连接的peer被放入到待连接队列中。其它队列中保存的是peer的指针,这样可以节省内存。

函数ConnectionEstablished()其意思很明显:连接建立后调用。

一个peer连接后,需要做什么呢?

1 从connecting队列中删除。

2 如果本emule还未获取到自己的公网IP,则通过这个peer获取自己的公网IP。

3 更新peer在kad网络中的状态。

4 如果正在与这个peer聊天,则更新这个peer的聊天状态。

5 更新download状态。 如果正等待从这个peer上download数据,则马是上向这个peer发出下载请求。

6 更新reask状态。暂时不知道reask是针对什么情况出现的。

7 更新upload状态。如果处于等待向这个peer上传数据的状态(收到了这个peer的下载请求,这个peer会位于上传队列中),则马上向这个peer 发出同意上传请求的回复。

8 如果先前向这个peer发出文件列表请求的命令(可能通过pop menu),则发出请求paket。

9 如果有很多paket待发给这个peer,则全部发出去。

你可能感兴趣的:(mule)