ChatServer.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // ChatServer.cpp: implementation of the CChatServer class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "ChatServer.h"
  6. #include "ChatConnect.h"
  7. #include "S3Relay.h"
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. CChatServer::CChatServer()
  12. {
  13. }
  14. CChatServer::~CChatServer()
  15. {
  16. }
  17. CNetConnect* CChatServer::CreateConnect(CNetServer* pNetServer, unsigned long id)
  18. {
  19. return new CChatConnect((CChatServer*)pNetServer, id);
  20. }
  21. void CChatServer::DestroyConnect(CNetConnect* pConn)
  22. {
  23. delete pConn;
  24. }
  25. void CChatServer::OnBuildup()
  26. {
  27. AUTOLOCKWRITE(m_lockIpMap);
  28. rTRACE("chat server startup");
  29. }
  30. void CChatServer::OnClearup()
  31. {
  32. AUTOLOCKWRITE(m_lockIpMap);
  33. m_mapIp2Connect.clear();
  34. rTRACE("chat server shutdown");
  35. }
  36. void CChatServer::OnClientConnectCreate(CNetConnect* pConn)
  37. {
  38. AUTOLOCKWRITE(m_lockIpMap);
  39. m_mapIp2Connect[pConn->GetIP()] = (CChatConnect*)pConn;
  40. }
  41. void CChatServer::OnClientConnectClose(CNetConnect* pConn)
  42. {
  43. AUTOLOCKWRITE(m_lockIpMap);
  44. m_mapIp2Connect.erase(pConn->GetIP());
  45. }
  46. CNetConnectDup CChatServer::FindChatConnectByIP(DWORD IP)
  47. {
  48. AUTOLOCKREAD(m_lockIpMap);
  49. IP2CONNECTMAP::iterator it = m_mapIp2Connect.find(IP);
  50. if (it == m_mapIp2Connect.end())
  51. return CNetConnectDup();
  52. CChatConnect* pChatConn = (*it).second;
  53. if (!pChatConn)
  54. return CNetConnectDup();
  55. return CNetConnectDup(*pChatConn);
  56. }
  57. BOOL CChatServer::TraceInfo()
  58. {
  59. AUTOLOCKREAD(m_lockIpMap);
  60. std::_tstring info("message: [ChatServer] ");
  61. char buffer[_MAX_PATH];
  62. sprintf(buffer, "<total: %d> : ", m_mapIp2Connect.size());
  63. info.append(buffer);
  64. for (IP2CONNECTMAP::iterator it = m_mapIp2Connect.begin(); it != m_mapIp2Connect.end(); it++)
  65. {
  66. if (it != m_mapIp2Connect.begin())
  67. info.append(", ");
  68. sprintf(buffer, "%08X", (*it).first);
  69. info.append(buffer);
  70. }
  71. rTRACE(info.c_str());
  72. return TRUE;
  73. }