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

模拟服务器

开发平台:

C/C++

  1. // testIOCPServer.cpp : Defines the entry point for the console application.
  2. //
  3. #include <winsock2.h>
  4. #include "IOCPServerException.h"
  5. #include "IOCPServerUtils.h"
  6. #include "IOCPServerManualResetEvent.h"
  7. #include "GameServer.h"
  8. using OnlineGameLib::Win32::_tstring;
  9. using OnlineGameLib::Win32::CException;
  10. using OnlineGameLib::Win32::Output;
  11. using OnlineGameLib::Win32::CManualResetEvent;
  12. int main(int argc, char* argv[])
  13. {
  14. try
  15. {
  16. CGameServer server(
  17. "Welcome to jx.online server! What are you doing now?",
  18. 10,                           // max number of sockets to keep in the pool
  19. 10,                           // max number of buffers to keep in the pool
  20. 1024);                        // buffer size 
  21. server.Open( 
  22. INADDR_ANY,                   // address to listen on
  23. 5001                          // port to listen on
  24. );
  25. server.StartAcceptingConnections();
  26. CManualResetEvent shutdownEvent(_T("OnlineGameServerShutdown"), false);
  27. CManualResetEvent pauseResumeEvent(_T("OnlineGameServerPauseResume"), false);
  28. HANDLE handlesToWaitFor[2];
  29. handlesToWaitFor[0] = shutdownEvent.GetEvent();
  30. handlesToWaitFor[1] = pauseResumeEvent.GetEvent();
  31. bool accepting = true;
  32. bool done = false;
  33. while (!done)
  34. {
  35. DWORD waitResult = ::WaitForMultipleObjects(2, handlesToWaitFor, false, INFINITE);
  36. if (waitResult == WAIT_OBJECT_0)
  37. {
  38. done = true;
  39. }
  40. else if (waitResult == WAIT_OBJECT_0 + 1)
  41. {
  42. if (accepting)
  43. {
  44. server.StopAcceptingConnections();
  45. }
  46. else
  47. {
  48. server.StartAcceptingConnections();
  49. }
  50. accepting = !accepting;
  51. }
  52. else
  53. {
  54. Output(_T("Unexpected result from WaitForMultipleObjects - exiting"));
  55. done = true;
  56. }
  57. }
  58. server.WaitForShutdownToComplete();
  59. }
  60. catch(const CException &e)
  61. {
  62. Output(_T("Exception: ") + e.GetWhere() + _T(" - ") + e.GetMessage());
  63. }
  64. catch(...)
  65. {
  66. Output(_T("Unexpected exception"));
  67. }
  68. return 0;
  69. }