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 }