P2PModule.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #pragma once
  2. #ifndef P2PMODULE_EXPORTS
  3. #ifdef _WIN64
  4. #ifdef _DEBUG
  5. #pragma comment(lib, "P2PModuleX64D.lib")
  6. #else
  7. #pragma comment(lib, "P2PModuleX64.lib")
  8. #endif
  9. #else
  10. #ifdef _DEBUG
  11. #pragma comment(lib, "P2PModuleD.lib")
  12. #else
  13. #pragma comment(lib, "P2PModule.lib")
  14. #endif
  15. #endif
  16. #endif
  17. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  18. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 RESDATAOBJECT_EXPORTS
  19. // 符号编译的。在使用此 DLL 的
  20. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  21. // RESDATAOBJECT_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  22. // 符号视为是被导出的。
  23. #ifdef P2PMODULE_EXPORTS
  24. #define P2PMODULE_API __declspec(dllexport)
  25. #define P2PMODULE_C_API extern "C" __declspec(dllexport)
  26. #else
  27. #define P2PMODULE_API __declspec(dllimport)
  28. #define P2PMODULE_C_API extern "C" __declspec(dllimport)
  29. #endif
  30. #include <winsock2.h>
  31. #include "CcosThread.h"
  32. #include "CcosLock.h"
  33. class P2PMODULE_API P2P_Module_Base : public Ccos_Thread, public CcosLock
  34. {
  35. protected:
  36. char *m_pszMessageBuff;
  37. DWORD m_MessageBuffSize;
  38. PVOID m_pMainDevBus;
  39. char *m_pszIpAddress;
  40. char *m_pszLocalBusId;
  41. char *m_pszRemoteBusId;
  42. WORD m_Port;
  43. bool m_AsServer;
  44. SOCKET Socketfd;
  45. SOCKET m_SocketTarget;
  46. HANDLE m_ConnectionReady;
  47. //send block
  48. bool SendBlob(SOCKET &sck, const char *pMsg, const char *pBlock, DWORD size,bool Sync = false);
  49. bool ReadBlobSync(SOCKET &sck, char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);
  50. bool ReadBlob(SOCKET &sck, char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);
  51. public:
  52. P2P_Module_Base();
  53. ~P2P_Module_Base();
  54. //init
  55. void InitP2P(const char *pszIp, const char *pszLocalBusId, bool AsServer, PVOID pParent);
  56. //connect
  57. virtual bool ConnectP2P();
  58. //disconnect
  59. virtual void Disconnect();
  60. //check line
  61. virtual bool IsConnected();
  62. //do last quit
  63. virtual void Quit();
  64. bool IsTargetBusId(const char *pszTargetBusId);
  65. //callback
  66. virtual void OnBlob(char *pMsg, unsigned char *pData, DWORD size);
  67. virtual bool Exec();
  68. bool SendRaw(SOCKET &sck, const char *pData, DWORD size,bool Sync = false);
  69. bool ReadRawSync(SOCKET &sck, char *pszBuff, DWORD ExpectedSize);
  70. bool ReadRaw(SOCKET &sck, char *pszBuff, DWORD ExpectedSize);
  71. virtual bool SendBlob(const char *pMsg, const char *pBlock, DWORD size);
  72. //virtual bool ReadBlob(char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);//对外不公开,没用
  73. };
  74. class P2PMODULE_API P2P_Module_Server : public P2P_Module_Base
  75. {
  76. DWORD m_HeartBeatTimeout;
  77. public:
  78. P2P_Module_Server();
  79. ~P2P_Module_Server();
  80. //connect
  81. virtual bool ConnectP2P();
  82. //disconnect
  83. virtual void Disconnect();
  84. virtual void Quit();
  85. virtual bool IsConnected();
  86. //callback,one way to client no receive from anyone
  87. //virtual void OnBlob(char *pMsg, char *pData, DWORD size);
  88. virtual bool Exec();
  89. int TryInit();
  90. int TryAccept();
  91. int TryCheckConnection();
  92. virtual bool SendBlob(const char *pMsg, const char *pBlock, DWORD size);
  93. };
  94. class P2PMODULE_API P2P_Module_Client : public P2P_Module_Base
  95. {
  96. char *m_pszMsgBuff;
  97. unsigned char *m_pszBlockBuff;
  98. public:
  99. P2P_Module_Client();
  100. ~P2P_Module_Client();
  101. bool TryConnectServer();
  102. //connect
  103. virtual bool ConnectP2P();
  104. //disconnect
  105. virtual void Disconnect();
  106. //send block,one way to client no send to anyone
  107. //virtual bool SendBlob(char *pMsg, char *pBlock, DWORD size);
  108. //callback
  109. //virtual void OnBlob(char *pMsg, char *pData, DWORD size);
  110. virtual bool Exec();
  111. };