{
枫叶文学网www.fywxw.com
第11 章 网络编程
·303·
break;
}
}
while (!pSocket->m_pArchiveIn->IsBufferEmpty());
//如果是用户登录
if(bIsNewChatter)
{
//如果此用户名没有被使用
if(!bIsUsedNcom)
{
//发送消息通知各客户端
pMsg->code = SENDING_CHATTERS_LIST;
m_ChattersList += sNcom + ":";
pMsg->m_strText = m_ChattersList;
SendForNewccomr(pMsg);
}
//如果用户名已使用
else
{
//发消息通知此客户端
CMsg* msg = new CMsg;
msg->Init();
msg->code = USED_NAME;
CString string;
string.Format("用户名已被使用!");
msg->m_strText = string;
SendMsg(pSocket, msg);
}
bIsNewChatter = FALSE;
bIsUsedNcom = FALSE;
}
//如果消息表明该客户端已关闭连接
if (pMsg->m_bClose)
{
//发送消息通知各客户端
SendToAllClients(NORMAL_MESSAGE);
//在视图中将该用户删除
DeleteChatter(pMsg);
//关闭连接
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·304·
CloseSocket(pSocket);
//通知各客户端更新用户列表
SendToAllClients(SENDING_CHATTERS_LIST);
}
//如果是普通消息,发送给各客户端
else
SendToAllClients(NORMAL_MESSAGE);
}
为ReadMsg()函数编写如下代码:
CMsg* CChatServerDoc::ReadMsg(CClientSocket* pSocket)
{
static CMsg msg;
TRY
{
//接收数据
pSocket->ReceiveMsg(&msg);
//如果是新用户登录则更新用户列表
if(msg.code == SENDING_NICKNAME)
{
UpdateC