Author: aconway
Date: Tue Jan 29 12:39:26 2008
New Revision: 616511

URL: http://svn.apache.org/viewvc?rev=616511&view=rev
Log:
Added Observer to SessionManager for cluster use.

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp?rev=616511&r1=616510&r2=616511&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp Tue Jan 29 
12:39:26 2008
@@ -50,6 +50,8 @@
     std::auto_ptr<SessionState> 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;
 }
 
@@ -100,6 +102,10 @@
             suspended.erase(suspended.begin(), keep);
         }
     }
+}
+
+void SessionManager::add(const intrusive_ptr<Observer>& o) {
+    observers.push_back(o);
 }
 
 }} // namespace qpid::broker

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.h?rev=616511&r1=616510&r2=616511&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.h Tue Jan 29 
12:39:26 2008
@@ -25,6 +25,7 @@
 #include <qpid/framing/Uuid.h>
 #include <qpid/sys/Time.h>
 #include <qpid/sys/Mutex.h>
+#include <qpid/RefCounted.h>
 
 #include <boost/noncopyable.hpp>
 #include <boost/ptr_container/ptr_vector.hpp>
@@ -44,8 +45,17 @@
  */
 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<SessionState> open(SessionHandler& h, uint32_t timeout_);
     
@@ -59,9 +69,13 @@
      */
     std::auto_ptr<SessionState> resume(const framing::Uuid&);
 
+    /** Add an Observer. */
+    void add(const intrusive_ptr<Observer>&);
+    
   private:
     typedef boost::ptr_vector<SessionState> Suspended;
     typedef std::set<framing::Uuid> Active;
+    typedef std::vector<intrusive_ptr<Observer> > Observers;
 
     void erase(const framing::Uuid&);             
     void eraseExpired();             
@@ -70,6 +84,7 @@
     Suspended suspended;
     Active active;
     uint32_t ack;
+    Observers observers;
     
   friend class SessionState; // removes deleted sessions from active set.
 };


Reply via email to