summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/qmf/SequenceManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src/qmf/SequenceManager.h')
-rw-r--r--qpid/cpp/src/qmf/SequenceManager.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/qpid/cpp/src/qmf/SequenceManager.h b/qpid/cpp/src/qmf/SequenceManager.h
index c027872313..bbfd0728a7 100644
--- a/qpid/cpp/src/qmf/SequenceManager.h
+++ b/qpid/cpp/src/qmf/SequenceManager.h
@@ -21,29 +21,43 @@
*/
#include "qpid/sys/Mutex.h"
+#include <boost/shared_ptr.hpp>
#include <map>
+namespace qpid {
+ namespace framing {
+ class Buffer;
+ }
+}
+
namespace qmf {
class SequenceContext {
public:
+ typedef boost::shared_ptr<SequenceContext> Ptr;
SequenceContext() {}
virtual ~SequenceContext() {}
- virtual void complete() = 0;
+ virtual void reserve() = 0;
+ virtual bool handleMessage(uint8_t opcode, uint32_t sequence, qpid::framing::Buffer& buffer) = 0;
+ virtual void release() = 0;
};
class SequenceManager {
public:
SequenceManager();
- uint32_t reserve(SequenceContext* ctx);
+ void setUnsolicitedContext(SequenceContext::Ptr ctx);
+ uint32_t reserve(SequenceContext::Ptr ctx = SequenceContext::Ptr());
void release(uint32_t sequence);
+ void releaseAll();
+ void dispatch(uint8_t opcode, uint32_t sequence, qpid::framing::Buffer& buffer);
private:
mutable qpid::sys::Mutex lock;
uint32_t nextSequence;
- std::map<uint32_t, SequenceContext*> contextMap;
+ SequenceContext::Ptr unsolicitedContext;
+ std::map<uint32_t, SequenceContext::Ptr> contextMap;
};
}