广播消息:
void CUser::BroadcastMsg( CString& msg )
{
for (map<CString,CUser*>::iterator p = m_users.begin();p != m_users.end(); ++p)
{
CBuffer* buf = new CBuffer();
buf->SetType(BROADCAST_MSG);
buf->AddCString(msg);
int len = buf->GetPackageSize();
p->second->Send(buf);
}
}
处理数据包
enum{ //数据包类型
LOGIN = 1,
SEND_MESSAGE,
SEND_WHISPER,
LOGOUT,
LOGIN_S,
LOGIN_F,
BROADCAST_MSG,
WHISPER_MSG,
GET_USERS,
SEND_USERS
};
void CUser::AnalyseBuffer()
{
if (m_buf)
{
int type = m_buf->GetType();
switch(type)
{
case LOGIN:
{
m_name = m_buf->GetCString();
CBuffer* buf = new CBuffer();
if (AddUser(m_name,this))
{
buf->SetType(LOGIN_S);
}
else
{
buf->SetType(LOGIN_F);
buf->AddCString(CString("重名"));
}
Send(buf);
break;
}
case SEND_MESSAGE:
{
CString msg = m_buf->GetCString();
msg = m_name + CString(": ") + msg;
BroadcastMsg(msg);
www.751com.cn :
{
CString user_name = m_buf->GetCString();
CString msg = m_buf->GetCString();
msg = m_name + CString(": ") + msg;
CUser* pUser = GetUserByName(user_name);
if (pUser)
{
pUser->SendWhisperMsg(msg);
}
break;
}
case GET_USERS:
{
CBuffer* buf = new CBuffer();
buf->SetType(SEND_USERS);
int size = m_users.size();
buf->AddInt(size);
for (map<CString,CUser*>::iterator p = m_users.begin();p != m_users.end(); ++p)
{
CString name = p->second->GetName();
buf->AddCString(name);
}
Send(buf);
break;
}
…………………………………………省略若干行……………………………………………………
}
delete m_buf;
m_buf = NULL;
}
上一页 [1] [2] [3] [4] [5] [6] 下一页