ClientSocket.cpp
上传用户:posgewe
上传日期:2013-05-17
资源大小:69k
文件大小:2k
源码类别:

Telnet服务器

开发平台:

Visual C++

  1. // ClientSocket.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ChatServer.h"
  5. #include "ClientSocket.h"
  6. #include "tagHeader.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CClientSocket
  14. CClientSocket::CClientSocket(CPtrList *list) : m_dlgServer(NULL)
  15. {
  16. clist = list;
  17. }
  18. CClientSocket::~CClientSocket()
  19. {
  20. }
  21. // Do not edit the following lines, which are needed by ClassWizard.
  22. #if 0
  23. BEGIN_MESSAGE_MAP(CClientSocket, CSocket)
  24. //{{AFX_MSG_MAP(CClientSocket)
  25. //}}AFX_MSG_MAP
  26. END_MESSAGE_MAP()
  27. #endif // 0
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CClientSocket member functions
  30. void CClientSocket::OnReceive(int nErrorCode) 
  31. {
  32. // TODO: Add your specialized code here and/or call the base class
  33. char buff1[sizeof(Header)];
  34. memset(buff1, 0, sizeof(buff1));
  35. Receive(buff1,sizeof(buff1));
  36. Header *header = (Header*)buff1;
  37. int length = header->len;
  38. char type = header->type;
  39. if(type == LOGIN_IO)
  40. {
  41. char buff[1000];
  42.   memset(buff,0,sizeof(buff));
  43.   Receive(buff,length);
  44. CTime time = CTime::GetCurrentTime();
  45. CString t = time.Format("%Y-%m-%d %H:%M:%S");
  46. CEdit *p_Edit = (CEdit *)::AfxGetMainWnd()->GetDlgItem(IDC_EDIT_INFO);
  47. CString strTemp = t + ": " + CString(buff) + " 进入聊天室rn";
  48. p_Edit->ReplaceSel(strTemp);
  49. m_strName = buff;
  50. m_dlgServer->UpdateUser(this);
  51. }
  52. if(type == SEND_MESSAGE)
  53. {
  54. char buff[1000];
  55.   memset(buff,0,sizeof(buff));
  56.   Receive(buff,sizeof(buff));
  57. CClientSocket *curr = NULL;
  58. POSITION pos = clist->GetHeadPosition();
  59. while (pos != NULL)
  60. {
  61. curr = (CClientSocket *)clist->GetNext(pos);
  62. curr->Send((char *)header,sizeof(Header));
  63. curr->Send(buff, sizeof(buff));
  64. }
  65. }
  66. CSocket::OnReceive(nErrorCode);
  67. }
  68. void CClientSocket::OnClose(int nErrorCode) 
  69. {
  70. // TODO: Add your specialized code here and/or call the base class
  71. POSITION pos = clist->Find(this);
  72. if(pos != NULL)
  73. {
  74. clist->RemoveAt(pos);
  75. CTime time = CTime::GetCurrentTime();
  76. CString t = time.Format("%Y-%m-%d %H:%M:%S");
  77. CEdit *p_Edit = (CEdit *)m_dlgServer->GetDlgItem(IDC_EDIT_INFO);
  78. CString strTemp = t + ": " + this->m_strName + " 离开聊天室rn";
  79. p_Edit->ReplaceSel(strTemp);
  80. m_dlgServer->UpdateUser(this);
  81. this->Close();
  82. delete this;
  83. }
  84. CSocket::OnClose(nErrorCode);
  85. }