BUSClient.Receiver.hpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #pragma once
  2. #include "BUSClient.Define.hpp"
  3. #include "BUSClient.Base.hpp"
  4. namespace ECOM
  5. {
  6. namespace ServiceBus
  7. {
  8. namespace Controller
  9. {
  10. //-----------------------------------------------------------------------------
  11. // BaseReceiver, 消息接收的基类
  12. //-----------------------------------------------------------------------------
  13. class _ServiceBus_API BaseReceiver
  14. {
  15. public:
  16. void SetSourceID (LPCTSTR SourceID);
  17. DString SetUniqueSourceID (LPCTSTR SourceID);
  18. DString GetSourceID () const;
  19. void ConnectTo (LPCTSTR IPAddress);
  20. bool SetTcpNoDelay (bool bSet);
  21. int SetSocketOption (int level, int optname, const char * optval, int optlen);
  22. DString GetConnectIPAddress (void) const { return m_IPAddress; }
  23. void SetTCPTimeOut (int seconds);
  24. bool Subscribe (DWORD Command, int msTimeOut = gDefMSTimeOut);
  25. bool BUSSetting (DWORD Command, LPCTSTR Key, LPCTSTR Value);
  26. protected:
  27. DString m_IPAddress;
  28. int m_StatusPort;
  29. int m_NbOfChannel;
  30. bool m_bTcpNoDelay;
  31. int m_TCPTimeOut; // seconds
  32. DString m_SourceID;
  33. public:
  34. BaseReceiver ();
  35. virtual ~BaseReceiver ();
  36. public:
  37. // 启动线程后, Task 会检测是否真的启动了, 否则等待
  38. virtual void StartWait ();
  39. virtual void StopWait ();
  40. bool IsStarted () const;
  41. protected:
  42. virtual void CreateWaitTask (int NbOfChannel);
  43. protected:
  44. void OnHeartbeatRelay (const void * sender, EventArgs_Null * arg);
  45. void OnHeartbeat1MinuteRelay (const void * sender, EventArgs_Null * arg);
  46. void OnHeartbeat5MinuteRelay (const void * sender, EventArgs_Null * arg);
  47. void OnServerGlitchRelay (const void * sender, EventArgs_Int * arg);
  48. void OnServerOfflineRelay (const void * sender, EventArgs_Int * arg);
  49. void OnServerOnlineRelay (const void * sender, EventArgs_Int * arg);
  50. void OnServerRecoveredRelay (const void * sender, EventArgs_Int * arg);
  51. public:
  52. _tUnsafeDelegate <EventArgs_Null> OnHeartbeat;
  53. _tUnsafeDelegate <EventArgs_Null> OnHeartbeat1Minute;
  54. _tUnsafeDelegate <EventArgs_Null> OnHeartbeat5Minute;
  55. _tUnsafeDelegate <EventArgs_Int> OnServerGlitch;
  56. _tUnsafeDelegate <EventArgs_Int> OnServerOffline;
  57. _tUnsafeDelegate <EventArgs_Int> OnServerOnline;
  58. _tUnsafeDelegate <EventArgs_Int> OnServerRecovered;
  59. protected:
  60. class WaitMessageTask * m_Task;
  61. public:
  62. int m_iEnter;
  63. protected:
  64. static int gDefMSTimeOut;
  65. friend class Client;
  66. };
  67. //-----------------------------------------------------------------------------
  68. // MessageReceiver, 可以发送消息, 也可以接收消息
  69. //-----------------------------------------------------------------------------
  70. class _ServiceBus_API MessageReceiver : public BaseReceiver//, public MessageClient
  71. {
  72. typedef BaseReceiver inherited;
  73. public:
  74. MessageReceiver ();
  75. virtual ~MessageReceiver ();
  76. public:
  77. virtual void StartWait () override;
  78. virtual void StopWait () override;
  79. protected:
  80. virtual void CreateWaitTask (int NbOfChannel) override;
  81. protected:
  82. void OnMessageRelay (DWORD Command, const void * sender, ::EventArgs_BUSMessage * arg);
  83. protected:
  84. virtual bool RelayMessage (DWORD Command, const void * sender, ::EventArgs_BUSMessage * arg) { return false; }
  85. virtual void OnMessageNoResponse (const void * sender, ::EventArgs_BUSMessage * arg);
  86. public:
  87. BUSDelegate OnMessage;
  88. };
  89. class _ServiceBus_API BLOBReceiver : public BaseReceiver//, public BLOBClient
  90. {
  91. typedef BaseReceiver inherited;
  92. public:
  93. BLOBReceiver ();
  94. virtual ~BLOBReceiver ();
  95. protected:
  96. virtual void CreateWaitTask (int NbOfChannel) override;
  97. public:
  98. virtual void StartWait () override;
  99. virtual void StopWait () override;
  100. protected:
  101. void OnMessageRelay (DWORD Command, const void * sender, ::EventArgs_BUSMessage * arg);
  102. void OnBLOBRelay (DWORD Command, const void * sender, ::EventArgs_BUSBLOB * arg);
  103. protected:
  104. virtual bool RelayMessage (DWORD Command, const void * sender, ::EventArgs_BUSMessage * arg) { return false; }
  105. virtual bool RelayBLOB (DWORD Command, const void * sender, ::EventArgs_BUSBLOB * arg) { return false; }
  106. virtual void OnMessageNoResponse (const void * sender, ::EventArgs_BUSMessage * arg);
  107. virtual void OnBLOBNoResponse (const void * sender, ::EventArgs_BUSBLOB * arg);
  108. public:
  109. BUSDelegate OnMessage;
  110. BUSDelegate OnBLOB;
  111. };
  112. //-----------------------------------------------------------------------------
  113. // 单端口/固定端口的接收器
  114. //-----------------------------------------------------------------------------
  115. class _ServiceBus_API FixedMessageReceiver : public MessageReceiver
  116. {
  117. public:
  118. FixedMessageReceiver (int StatusPort, int NbOfChannel = 1)
  119. {
  120. m_StatusPort = StatusPort;
  121. m_NbOfChannel = NbOfChannel;
  122. }
  123. };
  124. class _ServiceBus_API FixedBLOBReceiver : public BLOBReceiver
  125. {
  126. public:
  127. FixedBLOBReceiver (int StatusPort, int NbOfChannel = 1)
  128. {
  129. m_StatusPort = StatusPort;
  130. m_NbOfChannel = NbOfChannel;
  131. }
  132. };
  133. }
  134. }
  135. };