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

模拟服务器

开发平台:

C/C++

  1. /********************************************************************
  2. created: 2003/02/18
  3. file base: SocketClient
  4. file ext: h
  5. author: liupeng
  6. purpose:
  7. *********************************************************************/
  8. #ifndef __INCLUDE_SOCKETCLIENT_H__
  9. #define __INCLUDE_SOCKETCLIENT_H__
  10. #if defined (_MSC_VER) && (_MSC_VER >= 1020)
  11. #pragma once
  12. #endif
  13. #include "UsesWinsock.h"
  14. #include "Thread.h"
  15. #include "CriticalSection.h"
  16. #include "IOBuffer.h"
  17. #include "ManualResetEvent.h"
  18. #include "NodeList.h"
  19. #include "OpaqueUserData.h"
  20. #include "EventSelect.h"
  21. /*
  22.  * namespace OnlineGameLib::Win32
  23.  */
  24. namespace OnlineGameLib {
  25. namespace Win32 {
  26. class CSocketClient : protected CThread, private CUsesWinsock, private CIOBuffer::Allocator
  27. {
  28. public:
  29. virtual ~CSocketClient();
  30. using CThread::Start;
  31. void ConnectTo(
  32. const _tstring &addressToConnectServer,
  33. unsigned short portToConnectServer
  34. );
  35. void StartConnections();
  36. void StopConnections();
  37. void InitiateShutdown();
  38. void WaitForShutdownToComplete();
  39. void Write( const char *pData, size_t dataLength );
  40. protected:
  41. CSocketClient(
  42. const _tstring &addressToConnectServer,
  43. unsigned short portToConnectServer,
  44. size_t maxFreeBuffers,
  45. size_t bufferSize /* = 1024 */
  46. );
  47. CSocketClient(
  48. size_t maxFreeBuffers,
  49. size_t bufferSize /* = 1024 */
  50. );
  51. virtual void PreWrite( 
  52. CIOBuffer *pBuffer, 
  53. const char *pData, 
  54. size_t dataLength ) {};
  55. void ReleaseBuffers();
  56. /*
  57.  * Virtual function has different access specifier to base class
  58.  */
  59. virtual int Run();
  60. private:
  61. /*
  62.  * Override this to create the listening socket of your choice
  63.  */
  64. virtual SOCKET CreateConnectionSocket( 
  65. const _tstring &addressToConnectServer,
  66. unsigned short port) = 0;
  67. /*
  68.  * Interface for derived classes to receive state change notifications...
  69.  */
  70. virtual void OnStartConnections() {};
  71. virtual void OnStopConnections() {};
  72. virtual void OnShutdownInitiated() {};
  73. virtual void OnShutdownComplete() {};
  74. virtual void OnConnect() {};
  75. virtual void OnClose() {};
  76. void OnRead( CIOBuffer *pBuffer );
  77. virtual void ReadCompleted( CIOBuffer *pBuffer ) = 0;
  78. void OnWrite();
  79. virtual void OnError( const _tstring &message );
  80. SOCKET m_connectSocket;
  81. CEventSelect m_eventSelect;
  82. CManualResetEvent m_shutdownEvent;
  83. CManualResetEvent m_successConnectionsEvent;
  84. _tstring m_address;
  85. unsigned short m_port;
  86. };
  87. } // End of namespace OnlineGameLib
  88. } // End of namespace Win32
  89. #endif //__INCLUDE_SOCKETCLIENT_H__