Mercurial > hg > orthanc-stone
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); }