明
CListeningSocket* m_pSocket jiān tīng客户连接
CStringList m_msgList 存放所有聊天信息的链表
CPtrList m_connectionList 存放所有客户端连接的链表
BOOL bIsNewChatter 表示新加入的用户其用户名是否已有人使用
CString m_ChattersList 保存当前正在连接的所有用户名
为CChatServerDoc 类添加成员函数,如表11-10 所示。
枫叶文学网www.fywxw.com
第11 章 网络编程
·301·
表11-10 CChatServerDoc 类成员函数及其说明
成员函数 说明
void ProcessAccept() 当jiān tīng到客户端连接时调用此函数进行处理
void ProcessReceive(CClientSocket* pSocket) 当接收到信息时调用此函数,进行信息接收等cāo作
CMsg* ReadMsg(CClientSocket* pSocket) 接收信息
void SendMsg(CClientSocket* pSocket, CMsg* pMsg) 发送信息
void SendToAllClients(int nCode) 给各客户端发送消息
CMsg* AssembleMsg(CClientSocket* pSocket, int
nCode)
封装消息,nCode 指定消息类型
void SendForNewccomr(CMsg* pMsg) 给各客户端发送消息,告知有新用户加入
void UpdateMessageView(LPCTSTR lpszMessage) 更新服务器聊天信息视图
void UpdateChattersListView(CString sNcom ,
CClientSocket* pSocket)
更新服务器用户列表视图
BOOL IsUsedNcom(CString sNickNcom) 检查新登录的用户其用户名是否已被使用
void CloseSocket(CClientSocket* pSocket) 关闭连接
void DeleteChatter(CMsg* pMsg) 删除用户
virtual void DeleteContents() 当程序退出时做一些关闭、删除处理
下面为各函数编写代码。首先在构造函数中将各成员变量初始化,代码如下:
CChatServerDoc::CChatServerDoc()
{
// TODO: add one-tcom construction code here
m_pSocket = NULL;
m_msgList.RemoveAll();
m_connectionList.RemoveAll();
bIsNewChatter = TRUE;
m_ChattersList = "";