P2PModule.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #pragma once
  2. #include "CcosThread.h"
  3. #include "CcosLock.h"
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include <unistd.h>
  8. #include <fcntl.h>
  9. #include <errno.h>
  10. #include <pthread.h>
  11. #include <cstring>
  12. #include <cstdint>
  13. class P2P_Module_Base : public Ccos_Thread, public CcosLock
  14. {
  15. protected:
  16. char *m_pszMessageBuff;
  17. DWORD m_MessageBuffSize;
  18. PVOID m_pMainDevBus;
  19. char *m_pszIpAddress;
  20. char *m_pszLocalBusId;
  21. char *m_pszRemoteBusId;
  22. unsigned short m_Port;
  23. bool m_AsServer;
  24. int Socketfd;
  25. int m_SocketTarget;
  26. std::shared_ptr<LinuxEvent> m_ConnectionReady;
  27. //send block
  28. bool SendBlob(int&sck, const char *pMsg, const char *pBlock, DWORD size,bool Sync = false);
  29. bool ReadBlobSync(int&sck, char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);
  30. bool ReadBlob(int&sck, char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);
  31. public:
  32. P2P_Module_Base();
  33. ~P2P_Module_Base();
  34. //init
  35. void InitP2P(const char *pszIp, const char *pszLocalBusId, bool AsServer, PVOID pParent);
  36. //connect
  37. virtual bool ConnectP2P();
  38. //disconnect
  39. virtual void Disconnect();
  40. //check line
  41. virtual bool IsConnected();
  42. //do last quit
  43. virtual void Quit();
  44. bool IsTargetBusId(const char *pszTargetBusId);
  45. //callback
  46. virtual void OnBlob(char *pMsg, unsigned char *pData, DWORD size);
  47. virtual bool Exec();
  48. bool SendRaw(int&sck, const char *pData, DWORD size,bool Sync = false);
  49. bool ReadRawSync(int&sck, char *pszBuff, DWORD ExpectedSize);
  50. bool ReadRaw(int&sck, char *pszBuff, DWORD ExpectedSize);
  51. virtual bool SendBlob(const char *pMsg, const char *pBlock, DWORD size);
  52. //virtual bool ReadBlob(char *pMsg, DWORD &MsgSize, char *pBlock, DWORD &size);//¶ÔÍâ²»¹«¿ª£¬Ã»ÓÃ
  53. };
  54. class P2P_Module_Server : public P2P_Module_Base
  55. {
  56. DWORD m_HeartBeatTimeout;
  57. public:
  58. P2P_Module_Server();
  59. ~P2P_Module_Server();
  60. //connect
  61. virtual bool ConnectP2P();
  62. //disconnect
  63. virtual void Disconnect();
  64. virtual void Quit();
  65. virtual bool IsConnected();
  66. //callback,one way to client no receive from anyone
  67. //virtual void OnBlob(char *pMsg, char *pData, DWORD size);
  68. virtual bool Exec();
  69. int TryInit();
  70. int TryAccept();
  71. int TryCheckConnection();
  72. virtual bool SendBlob(const char *pMsg, const char *pBlock, DWORD size);
  73. };
  74. class P2P_Module_Client : public P2P_Module_Base
  75. {
  76. char *m_pszMsgBuff;
  77. unsigned char *m_pszBlockBuff;
  78. public:
  79. P2P_Module_Client();
  80. ~P2P_Module_Client();
  81. bool TryConnectServer();
  82. //connect
  83. virtual bool ConnectP2P();
  84. //disconnect
  85. virtual void Disconnect();
  86. //send block,one way to client no send to anyone
  87. //virtual bool SendBlob(char *pMsg, char *pBlock, DWORD size);
  88. //callback
  89. //virtual void OnBlob(char *pMsg, char *pData, DWORD size);
  90. virtual bool Exec();
  91. };