C++聊天室系统源代码 第5页

C++聊天室系统源代码 第5页
 m_used += len;
  if (m_used == need + 4)
  {
   return RECV_FINISH;
  }
 }
 return RECV_UNFINISH;
}


广播消息:
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] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有