当前位置:天才代写 > tutorial > C语言/C++ 教程 > 深入阐明驴子系列(2)

深入阐明驴子系列(2)

2017-11-04 08:00 星期六 所属: C语言/C++ 教程 浏览:334

在 BOOL CemuleApp::InitInstance() 函数 的 672行(VERIFY( (m_hTimer = ::SetTimer(NULL, NULL, 300, StartupTimer)) != NULL );

) 启动一个按时器 在该按时器的 执行函数( void CALLBACK CemuleDlg::StartupTimer(HWND /*hwnd*/, UINT /*uiMsg*/, UINT /*idEvent*/, DWORD /*dwTime*/))

的 814 行 theApp.emuledlg->OnBnClickedButton2();毗连到emule处事器

CServerSocket 就是一个客户端与处事器会话的类(可能说是处事器类),它毗连某 一详细处事器 ,处理惩罚所有与此处事器有关的事物,好比(详细的)发数据,收数据,连 接到来等

在毗连到来的函数(void CServerSocket::OnConnect(int nErrorCode))里处理惩罚各类 环境(是否继承实验毗连)

virtual void OnReceive(int nErrorCode) 函数里处理惩罚收到的数据包.

由于毗连较量巨大,所以专门封装了一个类 CServerConnect 来毗连处事器。 CServerConnect驱动与多个处事器的毗连,遏制毗连实验,断开毗连 ,对毗连后的详细 信息的处理惩罚(如 毗连正确 则发送 登岸动静,错误 则从头毗连) 超时检测等

此两个类 耦合性 较强,所以阐明起来较量贫苦。较量好的环境是 只有导出耦合干系 ,一个类之引用另一个类

另对两个类相关的有些函数可以疏散出来形成一个新的类,这样职责较量单一

异常: 对付 CServerConnect类 内部维持一个状态机(connecting 和connected 两 种状态)

针对两种环境有差异处理惩罚,如为connecting 状态 则客户类 多次启动一个新毗连

对付 CServerSocket类,毗连到来后 也有差异的环境 假如 正常 则发登岸动静,关 闭所有的与其它处事器的毗连

假如失败 则 要 CServerConnect 启动一个按时器 开始一个新的毗连

实验毗连处事器

第一步:

ConnectToAnyServer(UINT startAt, bool prioSort, bool isAuto, bool bNoCrypt) ;

在该函数里 首先 遏制 所有已经毗连 和正在毗连中的

假如有静态处事器 则处理惩罚

监听套接字启动监听

tryAnotherConnectionRequest();

// 启动毗连

正常环境下 在tryAnotherConnectionRequest函数里启动

ConnectToServer(next_server, true, !m_bTryObfuscated);

该函数真正实现一个与处事器毗连,假如正在毗连 则在

CuploadQueue ::UploadTimer()函数的 965行

if (theApp.serverconnect->IsConnecting())//假如正在毗连则查抄是否超时

theApp.serverconnect->CheckForTimeout(); //一秒钟今后查抄毗连是否超时

查抄是否毗连超时

假如 已经毗连进去可能 处事器期待登岸信息 则发送登岸信息

当正在毗连时,客户端会期待 毗连事件产生

void CServerSocket::OnConnect(int nErrorCode)

在该函数里处理惩罚各类毗连事件,假如正常的话 则发登岸动静 不正常的话 则从头启动 与其它处事器毗连

异常环境 处理惩罚函数

void CServerConnect::ConnectionFailed(CServerSocket* sender)

驴子毗连处事器的进程写的较量细腻,主要有两个类CServerSocket, CServerConnect 来完成处事器的毗连与通讯

在 BOOL CemuleApp::InitInstance() 函数 的 672行(VERIFY( (m_hTimer = ::SetTimer(NULL, NULL, 300, StartupTimer)) != NULL );

) 启动一个按时器 在该按时器的 执行函数( void CALLBACK CemuleDlg::StartupTimer(HWND /*hwnd*/, UINT /*uiMsg*/, UINT /*idEvent*/, DWORD /*dwTime*/))

的 814 行 theApp.emuledlg->OnBnClickedButton2();毗连到emule处事器

登岸处事器

以上根基完成了处事器毗连的进程

 

    关键字:

天才代写-代写联系方式