主要包含类:
CUserInfo 和 CChatPacket 和服务器定义的一致
CChatSocket用于和服务器或其他用户交互数据(类里面内置两个指针,分别指向CClientDlg和CChatDlg 以有效指针来辨别和谁通信)
重写OnReceive和OnClose 均调用对应对话框函数处理
CListenSocket用于监听其他用户的连接请求 在OnAccept和OnClose中调用CClientDlg的函数处理
CLogInDlg用与用户输入登录信息
COffMsgDlg 用于显示离线消息
用户点击回复时 调用CClientDlg::CreateChatDlg 该函数根据用户状态创建不同的聊天对话框
CClientDlg和CChatDlg即为核心实现类
- CClientDlg
在登录成功后
与服务器交互
/*
* 读取并且处理服务器发来的数据包
*/
void CClientDlg::ReadAndProcessPacket()
{
CChatPacket packet;
//临时链表用于保存读取的用户链表信息
CObList obList;
packet.m_pUserlist = &obList;
packet.Serialize(*m_pArchiveIn);
switch(packet.m_type)
{
//收到服务器信息 显示然后退出
case CChatPacket::SERVERMSG:
MessageBox(packet.m_strMsg);
EndDialog(IDCANCEL);
break;