I attach a slightly more elaborated sketch of the interface.
What I mostly want to illustrate here is that very few of the actual
types used needs to be visible in the interface.
Don't take the use of pointers too literally - they might well be
references in an actual design.
Andrew
#include <stdint.h>
#include <string>
using std::string;
namespace qpid {
// This is probably not the correct forward declaration, but it allows this to compile.
namespace types {
namespace Variant {
class Map;
}
}
namespace broker {
class BrokerContext;
// This is the parent class for the others here, but this need not be visible in this header file.
class AsyncHandle;
class DataHandle;
class QueueHandle;
class ConfigHandle;
class FlushHandle;
class TxnHandle;
class EventHandle;
class EnqueueHandle;
// This need not be defined here
/*
class DataSource {
public:
virtual ~DataSource() = 0;
virtual uint64_t getSize() = 0;
virtual void write(char* target) = 0;
};
*/
class DataSource;
class AsyncResult;
class ResultFactory {
public:
virtual AsyncResult* createSuccessResult(AsyncHandle*) = 0;
virtual AsyncResult* createFailureResult(AsyncHandle*, const int errNo, const std::string& errMsg) = 0;
};
typedef void (*ResultCallback)(AsyncResult*);
class StoreAsyncInterface {
public:
StoreAsyncInterface();
virtual ~StoreAsyncInterface() = 0;
virtual DataHandle* createDataHandle(BrokerContext*, DataSource& data) = 0;
virtual QueueHandle* createQueueHandle(BrokerContext*, const std::string& queueName , const qpid::types::Variant::Map& queueOptions) = 0;
virtual ConfigHandle* createConfigHandle(BrokerContext*) = 0;
virtual FlushHandle* createFlushHandle(BrokerContext*) = 0;
virtual TxnHandle* createTxnHandle(BrokerContext*, const std::string& xid=std::string()) = 0;
virtual EventHandle* createEventHandle(BrokerContext*) = 0;
virtual EnqueueHandle* createEnqueueHandle(BrokerContext*) = 0;
virtual void submitStoreConfig(ConfigHandle*, const DataHandle*, ResultCallback*) = 0;
virtual void submitDestroyConfig(ConfigHandle*, ResultCallback*) = 0;
virtual void submitCreateQueue(QueueHandle*, ResultCallback*) = 0;
virtual void submitDestroyQueue(QueueHandle*, ResultCallback*) = 0;
virtual void submitFlushQueue(FlushHandle*, const QueueHandle*, ResultCallback*) = 0;
virtual void submitBeginTxn(TxnHandle*, ResultCallback*) = 0;
virtual void submitPrepareTxn(TxnHandle*, ResultCallback*) = 0;
virtual void submitCommitTxn(TxnHandle*, ResultCallback*) = 0;
virtual void submitAbortTxn(TxnHandle*, ResultCallback*) = 0;
virtual void submitStoreEvent(EventHandle*, const DataHandle*, const QueueHandle*, const TxnHandle*, ResultCallback*) = 0;
virtual void submitEnqueueMsg(EnqueueHandle*, const DataHandle*, const QueueHandle*, const TxnHandle*, ResultCallback*) = 0;
virtual void submitDequeueMsg(EnqueueHandle*, const TxnHandle*, ResultCallback*) = 0;
// Legacy - Restore FTD message, is NOT async!
virtual int loadContent(EnqueueHandle*, const QueueHandle*, char* data, uint64_t offset, const uint64_t length) = 0;
};
}}
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]