#pragma once class DelegateArgs; #include "BUSClient.MainEntry.hpp" namespace BUSC = ECOM::ServiceBus::Controller; #ifndef _ServiceBus_DLL #define _ServiceBus_API _declspec(dllimport) #else #define _ServiceBus_API _declspec(dllexport) #endif namespace ECOM { namespace ServiceBus { namespace Controller { class _ServiceBus_API MessageClient; }; namespace MemMapExchBLOB { class _ServiceBus_API PullManager { public: static void SetLogFileName (const char * FileName); static void Prepare (); static void Quit (); // 设置缺省的超时, 单位: 毫秒 static void SetDefTimeOut (int msTimeOut); static bool GetBLOB (DString Message, BlockBuffer & BLOB); }; class _ServiceBus_API PullBLOB_Base { protected: PullBLOB_Base (LPCTSTR SourceID); PullBLOB_Base (const PullBLOB_Base &) = delete; PullBLOB_Base (PullBLOB_Base &&) = delete; PullBLOB_Base & operator = (const PullBLOB_Base &) = delete; public: virtual ~PullBLOB_Base (); protected: virtual Controller::MessageClient * GetClient () = 0; public: int Pull (LPCTSTR TargetID, DString Message, int msTimeOut = gDefMSTimeOut); int Pull (LPCTSTR TargetID, DString Message, DString & AckMessage, int msTimeOut = gDefMSTimeOut); // 可以用特殊命令 (而不是标准的 BUSCMD_MemMapPullBLOB) 给对方 // 不过对方只能用标准的 int Pull (LPCTSTR TargetID, DWORD Command, DString Message, DString & AckMessage, int msTimeOut = gDefMSTimeOut); protected: void OnBUSDummy (const void * sender, EventArgs_BUSMessage * e); void OnBUSMemMapPushBLOB (const void * sender, EventArgs_BUSMessage * e); public: std::vector m_arBLOB; protected: DString m_SourceID; Controller::MessageReceiver * m_Receiver; Controller::MessageClient * m_Client; protected: friend PullManager; static int gDefMSTimeOut; }; class _ServiceBus_API PullBLOB : public PullBLOB_Base { public: PullBLOB (PCTSTR SourceID); PullBLOB (const PullBLOB &) = delete; PullBLOB (PullBLOB &&) = delete; PullBLOB & operator = (const PullBLOB &) = delete; protected: virtual Controller::MessageClient * GetClient () override; }; class _ServiceBus_API FixedPullBLOB : public PullBLOB_Base { public: FixedPullBLOB (PCTSTR SourceID, int Port = BUSC::LegacySendPort); FixedPullBLOB (const FixedPullBLOB &) = delete; FixedPullBLOB (FixedPullBLOB &&) = delete; FixedPullBLOB & operator = (const FixedPullBLOB &) = delete; protected: virtual Controller::MessageClient * GetClient () override; int m_Port; }; } } };