Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
1058:a36c47487a70 | 1059:e713f1a99861 |
---|---|
46 // callable) | 46 // callable) |
47 for (Forwarders::iterator it = forwarders_.begin(); | 47 for (Forwarders::iterator it = forwarders_.begin(); |
48 it != forwarders_.end(); ++it) | 48 it != forwarders_.end(); ++it) |
49 { | 49 { |
50 IMessageForwarder* fw = *it; | 50 IMessageForwarder* fw = *it; |
51 broker_.Unregister(dynamic_cast<IObserver&>(*fw)); | 51 |
52 // TODO - What to do with forwarders? | |
53 | |
54 //broker_.Unregister(dynamic_cast<IObserver&>(*fw)); | |
52 } | 55 } |
53 } | 56 } |
54 | 57 |
55 | 58 |
56 void IObservable::RegisterObserverCallback(ICallable* callable) | 59 void IObservable::RegisterObserverCallback(ICallable* callable) |
73 itCallableSet != callables_.end(); ++itCallableSet) | 76 itCallableSet != callables_.end(); ++itCallableSet) |
74 { | 77 { |
75 for (std::set<ICallable*>::const_iterator | 78 for (std::set<ICallable*>::const_iterator |
76 itCallable = itCallableSet->second.begin(); itCallable != itCallableSet->second.end(); ) | 79 itCallable = itCallableSet->second.begin(); itCallable != itCallableSet->second.end(); ) |
77 { | 80 { |
78 if ((*itCallable)->GetObserver() == observer) | 81 boost::shared_ptr<IObserver> shared((*itCallable)->GetObserver()); |
82 | |
83 if (shared && | |
84 shared.get() == observer) | |
79 { | 85 { |
80 LOG(TRACE) << " ** IObservable::Unregister : deleting callable: " | 86 LOG(TRACE) << " ** IObservable::Unregister : deleting callable: " |
81 << std::hex << (*itCallable) << std::dec; | 87 << std::hex << (*itCallable) << std::dec; |
82 delete *itCallable; | 88 delete *itCallable; |
83 itCallableSet->second.erase(itCallable++); | 89 itCallableSet->second.erase(itCallable++); |
100 for (std::set<ICallable*>::const_iterator | 106 for (std::set<ICallable*>::const_iterator |
101 it = found->second.begin(); it != found->second.end(); ++it) | 107 it = found->second.begin(); it != found->second.end(); ++it) |
102 { | 108 { |
103 assert(*it != NULL); | 109 assert(*it != NULL); |
104 | 110 |
105 const IObserver* observer = (*it)->GetObserver(); | 111 boost::shared_ptr<IObserver> observer((*it)->GetObserver()); |
106 if (broker_.IsActive(*observer)) | 112 |
113 if (observer) | |
107 { | 114 { |
108 if (receiver == NULL || // Are we broadcasting? | 115 if (receiver == NULL || // Are we broadcasting? |
109 observer == receiver) // Not broadcasting, but this is the receiver | 116 observer.get() == receiver) // Not broadcasting, but this is the receiver |
110 { | 117 { |
111 (*it)->Apply(message); | 118 (*it)->Apply(message); |
112 } | 119 } |
113 } | 120 } |
114 } | 121 } |