#pragma once #include "BUSClient.Define.hpp" #include "BUSClient.Stream.hpp" #include "BUSClient.Base.hpp" namespace ECOM { namespace ServiceBus { namespace Controller { //----------------------------------------------------------------------------- // MessageClient, 可以发送消息 //----------------------------------------------------------------------------- class _ServiceBus_API MessageClient : public Client { typedef Client inherited; public: MessageClient (); virtual ~MessageClient (); public: virtual void Close (); bool Send (LPCSTR TargetID, DWORD Command, DString Message, int msTimeOut = gDefMSTimeOut); bool Send (LPCSTR TargetID, DWORD Command, DString Message, DString & AckMessage, int msTimeOut = gDefMSTimeOut); bool Post (LPCSTR TargetID, DWORD Command, DString Message); bool Forward (LPCSTR TargetID, DWORD Command, DString Message); bool Send (LPCSTR TargetID, DWORD Command, WString Message, int msTimeOut = gDefMSTimeOut); bool Send (LPCSTR TargetID, DWORD Command, WString Message, WString & AckMessage, int msTimeOut = gDefMSTimeOut); bool Post (LPCSTR TargetID, DWORD Command, WString Message); bool Forward (LPCSTR TargetID, DWORD Command, WString Message); protected: template bool DoSend (LPCSTR TargetID, DWORD Command, const T & Message, T & AckMessage, int msTimeOut = gDefMSTimeOut); protected: template bool DoReadAck (DWORD MessageID, T & AckMessage, BlockBuffer & AckBLOB, int msTimeOut); public: _tUnsafeDelegate OnAppError; }; //----------------------------------------------------------------------------- // 二进制大对象 (BLOB, Binary Large OBjects) //----------------------------------------------------------------------------- class _ServiceBus_API BLOBClient : public MessageClient { typedef MessageClient inherited; public: BLOBClient (); virtual ~BLOBClient (); public: virtual void Close (); public: bool SendBLOB (LPCSTR TargetID, DWORD Command, BlockBuffer BLOB, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, BlockBuffer BLOB, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool PostBLOB (LPCSTR TargetID, DWORD Command, BlockBuffer BLOB, int msTimeOut = gDefMSTimeOut); public: bool SendBLOB (LPCSTR TargetID, DWORD Command, DString Message, BlockBuffer BLOB, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, DString Message, BlockBuffer BLOB, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, DString Message, BlockBuffer BLOB, DString & AckMessage, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, DString Message, BlockBuffer BLOB, DString & AckMessage, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool PostBLOB (LPCSTR TargetID, DWORD Command, DString Message, BlockBuffer BLOB, int msTimeOut = gDefMSTimeOut); public: bool SendBLOB (LPCSTR TargetID, DWORD Command, WString Message, BlockBuffer BLOB, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, WString Message, BlockBuffer BLOB, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, WString Message, BlockBuffer BLOB, WString & AckMessage, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, WString Message, BlockBuffer BLOB, WString & AckMessage, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool PostBLOB (LPCSTR TargetID, DWORD Command, WString Message, BlockBuffer BLOB, int msTimeOut = gDefMSTimeOut); protected: template bool DoSendBLOB (LPCSTR TargetID, DWORD Command, T Message, BlockBuffer BLOB, T & AckMessage, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); }; class _ServiceBus_API BLOBStreamClient : public MessageClient { typedef MessageClient inherited; public: BLOBStreamClient (); virtual ~BLOBStreamClient (); virtual void Close (); public: bool SendBLOB (LPCSTR TargetID, DWORD Command, funstream fun, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, funstream fun, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool PostBLOB (LPCSTR TargetID, DWORD Command, funstream fun, int msTimeOut = gDefMSTimeOut); public: bool SendBLOB (LPCSTR TargetID, DWORD Command, DString Message, funstream fun, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, DString Message, funstream fun, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, DString Message, funstream fun, DString & AckMessage, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, DString Message, funstream fun, DString & AckMessage, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool PostBLOB (LPCSTR TargetID, DWORD Command, DString Message, funstream fun, int msTimeOut = gDefMSTimeOut); public: bool SendBLOB (LPCSTR TargetID, DWORD Command, WString Message, funstream fun, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, WString Message, funstream fun, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, WString Message, funstream fun, WString & AckMessage, int msTimeOut = gDefMSTimeOut); bool SendBLOB (LPCSTR TargetID, DWORD Command, WString Message, funstream fun, WString & AckMessage, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); bool PostBLOB (LPCSTR TargetID, DWORD Command, WString Message, funstream fun, int msTimeOut = gDefMSTimeOut); protected: template bool DoSendBLOB (LPCSTR TargetID, DWORD Command, T Message, funstream fun, T & AckMessage, BlockBuffer & AckBLOB, int msTimeOut = gDefMSTimeOut); }; //----------------------------------------------------------------------------- // 单端口/固定端口客户端 //----------------------------------------------------------------------------- class _ServiceBus_API FixedMessageClient : public MessageClient { public: FixedMessageClient (int CmdPort, int NbOfChannel = 1) { m_CommandPort = CmdPort; m_NbOfChannel = NbOfChannel; } }; class _ServiceBus_API FixedBLOBClient : public BLOBClient { public: FixedBLOBClient (int CmdPort, int NbOfChannel = 1) { m_CommandPort = CmdPort; m_NbOfChannel = NbOfChannel; } }; } } };