diff Framework/Messages/IObservable.cpp @ 1059:e713f1a99861 broker

replacing MessageBroker by weak_ptr
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 11 Oct 2019 17:08:34 +0200
parents 262a0244e9b2
children af4b9cba905f
line wrap: on
line diff
--- a/Framework/Messages/IObservable.cpp	Fri Oct 11 13:38:35 2019 +0200
+++ b/Framework/Messages/IObservable.cpp	Fri Oct 11 17:08:34 2019 +0200
@@ -48,7 +48,10 @@
          it != forwarders_.end(); ++it)
     {
       IMessageForwarder* fw = *it;
-      broker_.Unregister(dynamic_cast<IObserver&>(*fw));
+
+      // TODO - What to do with forwarders?
+      
+      //broker_.Unregister(dynamic_cast<IObserver&>(*fw));
     }
   }
   
@@ -75,7 +78,10 @@
       for (std::set<ICallable*>::const_iterator
              itCallable = itCallableSet->second.begin(); itCallable != itCallableSet->second.end(); )
       {
-        if ((*itCallable)->GetObserver() == observer)
+        boost::shared_ptr<IObserver> shared((*itCallable)->GetObserver());
+
+        if (shared &&
+            shared.get() == observer)
         {
           LOG(TRACE) << "  ** IObservable::Unregister : deleting callable: "
             << std::hex << (*itCallable) << std::dec;
@@ -102,11 +108,12 @@
       {
         assert(*it != NULL);
 
-        const IObserver* observer = (*it)->GetObserver();
-        if (broker_.IsActive(*observer))
+        boost::shared_ptr<IObserver> observer((*it)->GetObserver());
+
+        if (observer)
         {
           if (receiver == NULL ||    // Are we broadcasting?
-              observer == receiver)  // Not broadcasting, but this is the receiver
+              observer.get() == receiver)  // Not broadcasting, but this is the receiver
           {
             (*it)->Apply(message);
           }