From 1fd398c1c0b78ce48d3b540698cfbf085e5ff8dd Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Tue, 29 Jan 2008 20:39:26 +0000 Subject: Added Observer to SessionManager for cluster use. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@616511 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/SessionManager.cpp | 6 ++++++ cpp/src/qpid/broker/SessionManager.h | 15 +++++++++++++++ 2 files changed, 21 insertions(+) (limited to 'cpp') diff --git a/cpp/src/qpid/broker/SessionManager.cpp b/cpp/src/qpid/broker/SessionManager.cpp index 1d5f9ebada..aadb2b9004 100644 --- a/cpp/src/qpid/broker/SessionManager.cpp +++ b/cpp/src/qpid/broker/SessionManager.cpp @@ -50,6 +50,8 @@ std::auto_ptr SessionManager::open( std::auto_ptr session( new SessionState(*this, h, timeout_, ack)); active.insert(session->getId()); + for_each(observers.begin(), observers.end(), + boost::bind(&Observer::opened, _1,boost::ref(*session))); return session; } @@ -102,4 +104,8 @@ void SessionManager::eraseExpired() { } } +void SessionManager::add(const intrusive_ptr& o) { + observers.push_back(o); +} + }} // namespace qpid::broker diff --git a/cpp/src/qpid/broker/SessionManager.h b/cpp/src/qpid/broker/SessionManager.h index fa7262252d..bb61f5a8be 100644 --- a/cpp/src/qpid/broker/SessionManager.h +++ b/cpp/src/qpid/broker/SessionManager.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -44,8 +45,17 @@ class SessionHandler; */ class SessionManager : private boost::noncopyable { public: + /** + * Observer notified of SessionManager events. + */ + struct Observer : public RefCounted { + virtual void opened(SessionState&) {} + }; + SessionManager(uint32_t ack); + ~SessionManager(); + /** Open a new active session, caller takes ownership */ std::auto_ptr open(SessionHandler& h, uint32_t timeout_); @@ -59,9 +69,13 @@ class SessionManager : private boost::noncopyable { */ std::auto_ptr resume(const framing::Uuid&); + /** Add an Observer. */ + void add(const intrusive_ptr&); + private: typedef boost::ptr_vector Suspended; typedef std::set Active; + typedef std::vector > Observers; void erase(const framing::Uuid&); void eraseExpired(); @@ -70,6 +84,7 @@ class SessionManager : private boost::noncopyable { Suspended suspended; Active active; uint32_t ack; + Observers observers; friend class SessionState; // removes deleted sessions from active set. }; -- cgit v1.2.1