ParseMessage.cpp
上传用户:power_led
上传日期:2013-04-11
资源大小:373k
文件大小:2k
源码类别:

ICQ/即时通讯

开发平台:

Visual C++

  1. #include "Stdafx.h"
  2. #include "ParseMessage.h"
  3. #include "ClientSocket.h"
  4. #include "CChatServer.h"
  5. extern CCChatServerApp theApp;
  6. CParseMessage::~CParseMessage()
  7. {
  8. }
  9. CParseMessage::CParseMessage(const CMyTreeView * pWnd,const Message & Value)
  10. {
  11. pView = const_cast < CMyTreeView *>(pWnd);
  12. Msg = Value;
  13. }
  14. BOOL CParseMessage::SWitchMessage()
  15. {
  16. ASSERT(pView != NULL);
  17. ASSERT_VALID(pView);
  18. switch(Msg.iType)
  19. {
  20. case USERLOG:
  21. switch(Msg.iSubType)
  22. {
  23. case USERLOGIN:
  24. pView ->OnNewClientIn(Msg,0);
  25. break;
  26. default:
  27. break;
  28. }
  29. break;
  30. case USERSESSION:
  31. switch(Msg.iSubType)
  32. {
  33. default:
  34. break;
  35. case CHANGEROOM:
  36. pView ->OnChangeRoom(Msg,0);
  37. break;
  38. case SAYINPRIVATE:
  39. pView ->OnSendInPrivate(Msg,0);
  40. break;
  41. case USERQUIT:
  42. {
  43. g_cs.Lock();
  44. CString strUserName = Msg.strName;
  45. CString strRoomName = Msg.strRoom;
  46. CPtrList * m_pClientList = theApp.m_pClientSocketList;
  47. int iCount = m_pClientList->GetCount();
  48. POSITION pos = m_pClientList ->GetHeadPosition();
  49. POSITION tempos = pos;
  50. if(pos)
  51. {  
  52. for(int i = 0; i < m_pClientList ->GetCount(); i++)
  53. {
  54. tempos = pos;
  55. CClientSocket *m_pClientSocket = static_cast < CClientSocket *>(m_pClientList->GetNext(pos));
  56. if(m_pClientSocket ->GetRoomName() == strRoomName && m_pClientSocket ->GetUserName() == strUserName)
  57. {
  58. m_pClientSocket ->ShutDown();
  59. m_pClientSocket ->Close();
  60. delete m_pClientSocket;
  61. m_pClientList->RemoveAt(tempos);
  62. break;
  63. }
  64. }
  65. g_cs.Unlock();
  66. }
  67. pView ->OnClientOut(Msg,0);
  68. }
  69. break;
  70. }
  71. break;
  72. default:
  73. break;
  74. }
  75. return TRUE;
  76. }