MemPullBLOB.hpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #pragma once
  2. class DelegateArgs;
  3. #include "BUSClient.MainEntry.hpp"
  4. namespace BUSC = ECOM::ServiceBus::Controller;
  5. #ifndef _ServiceBus_DLL
  6. #define _ServiceBus_API _declspec(dllimport)
  7. #else
  8. #define _ServiceBus_API _declspec(dllexport)
  9. #endif
  10. namespace ECOM
  11. {
  12. namespace ServiceBus
  13. {
  14. namespace Controller
  15. {
  16. class _ServiceBus_API MessageClient;
  17. };
  18. namespace MemMapExchBLOB
  19. {
  20. class _ServiceBus_API PullManager
  21. {
  22. public:
  23. static void SetLogFileName (const char * FileName);
  24. static void Prepare ();
  25. static void Quit ();
  26. // 设置缺省的超时, 单位: 毫秒
  27. static void SetDefTimeOut (int msTimeOut);
  28. static bool GetBLOB (DString Message, BlockBuffer & BLOB);
  29. };
  30. class _ServiceBus_API PullBLOB_Base
  31. {
  32. protected:
  33. PullBLOB_Base (LPCTSTR SourceID);
  34. PullBLOB_Base (const PullBLOB_Base &) = delete;
  35. PullBLOB_Base (PullBLOB_Base &&) = delete;
  36. PullBLOB_Base & operator = (const PullBLOB_Base &) = delete;
  37. public:
  38. virtual ~PullBLOB_Base ();
  39. protected:
  40. virtual Controller::MessageClient * GetClient () = 0;
  41. public:
  42. int Pull (LPCTSTR TargetID, DString Message, int msTimeOut = gDefMSTimeOut);
  43. int Pull (LPCTSTR TargetID, DString Message, DString & AckMessage, int msTimeOut = gDefMSTimeOut);
  44. // 可以用特殊命令 (而不是标准的 BUSCMD_MemMapPullBLOB) 给对方
  45. // 不过对方只能用标准的
  46. int Pull (LPCTSTR TargetID, DWORD Command, DString Message, DString & AckMessage, int msTimeOut = gDefMSTimeOut);
  47. protected:
  48. void OnBUSDummy (const void * sender, EventArgs_BUSMessage * e);
  49. void OnBUSMemMapPushBLOB (const void * sender, EventArgs_BUSMessage * e);
  50. public:
  51. std::vector <BlockBuffer> m_arBLOB;
  52. protected:
  53. DString m_SourceID;
  54. Controller::MessageReceiver * m_Receiver;
  55. Controller::MessageClient * m_Client;
  56. protected:
  57. friend PullManager;
  58. static int gDefMSTimeOut;
  59. };
  60. class _ServiceBus_API PullBLOB : public PullBLOB_Base
  61. {
  62. public:
  63. PullBLOB (PCTSTR SourceID);
  64. PullBLOB (const PullBLOB &) = delete;
  65. PullBLOB (PullBLOB &&) = delete;
  66. PullBLOB & operator = (const PullBLOB &) = delete;
  67. protected:
  68. virtual Controller::MessageClient * GetClient () override;
  69. };
  70. class _ServiceBus_API FixedPullBLOB : public PullBLOB_Base
  71. {
  72. public:
  73. FixedPullBLOB (PCTSTR SourceID, int Port = BUSC::LegacySendPort);
  74. FixedPullBLOB (const FixedPullBLOB &) = delete;
  75. FixedPullBLOB (FixedPullBLOB &&) = delete;
  76. FixedPullBLOB & operator = (const FixedPullBLOB &) = delete;
  77. protected:
  78. virtual Controller::MessageClient * GetClient () override;
  79. int m_Port;
  80. };
  81. }
  82. }
  83. };