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

模拟服务器

开发平台:

C/C++

  1. #ifndef ZSERVER_H
  2. #define ZSERVER_H
  3. #include "zport.h"
  4. #include "zbuffer.h"
  5. enum enumClientConnectInfo {
  6. enumClientConnectCreate = 0x100,
  7. enumClientConnectClose
  8. };
  9. typedef void (*CALLBACK_SERVER_EVENT)(void * lpParam, const unsigned long &ulnID, const unsigned long &ulnEventType);
  10. //进行侦听的线程
  11. class ZServer;
  12. class ZListenThread : public ZThread {
  13. ZServer *parent;
  14. public:
  15. ZListenThread(ZServer *the_parent) : ZThread() {
  16. parent = the_parent;
  17. }
  18. int action();
  19. };
  20. #define MAX_IN_BUFFER 8192
  21. class client_info {
  22. public:
  23. #ifdef WIN32
  24. OVERLAPPED read_overlapped;
  25. OVERLAPPED write_overlapped;
  26. WSABUF  m_wsaInBuffer; //读数据的缓冲区
  27. WSABUF m_wsaOutBuffer; //发送数据使用的缓冲区
  28. #endif
  29. unsigned char m_byInBuffer[MAX_IN_BUFFER];
  30. SOCKET sock;
  31. struct sockaddr addr;
  32. int read_index;
  33. int write_index;
  34. unsigned long server_key;
  35. unsigned long client_key;
  36. client_info() {
  37. read_index = write_index = -1;
  38. #ifdef WIN32
  39. ZeroMemory(&read_overlapped, sizeof(OVERLAPPED));
  40. ZeroMemory(&write_overlapped, sizeof(OVERLAPPED));
  41. #endif
  42. }
  43. };
  44. class ZServer {
  45. public:
  46. CALLBACK_SERVER_EVENT call_back;
  47. void *parameter;
  48. #ifdef WIN32
  49. HANDLE CompletionPort;
  50. #else
  51.   sigset_t sigset;
  52.   int pid;
  53. #endif
  54. SOCKET listen_socket;
  55. ZListenThread *listen_thread;
  56. client_info *clients;
  57. int max_client;
  58. ZBuffer *buffer;
  59. ZServer(int number);
  60. ~ZServer();
  61. int getConnection(SOCKET sock);
  62. bool sendData(client_info *client);
  63. bool receiveData(client_info *client);
  64. //对外公开的接口
  65. int Startup();
  66. int Cleanup();
  67. int Release();
  68. int Open(const unsigned long &ulnAddressToListenOn, const unsigned short &usnPortToListenOn);
  69. int CloseService();
  70. int RegisterMsgFilter(void * lpParam, CALLBACK_SERVER_EVENT pfnEventNotify);
  71. int PreparePackSink();
  72. int PackDataToClient(const unsigned long &ulnClientID, const void *pData, unsigned long datalength);
  73. int SendPackToClient();
  74. int SendPackToClient(int index);
  75. int SendData(const unsigned long &ulnClientID, const void *pData, unsigned long datalength);
  76. const void *GetPackFromClient(unsigned long ulnClientID, unsigned long &datalength);
  77. int ShutdownClient(const unsigned long &ulnClientID);
  78. };
  79. #endif