Mercurial > hg > orthanc-stone
comparison Framework/Messages/IObservable.h @ 403:99e31898910e
IObservable.cpp
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sun, 11 Nov 2018 12:13:31 +0100 |
parents | e7a494bdd956 |
children | 751fb354149e b70e9be013e4 |
comparison
equal
deleted
inserted
replaced
402:72355b637945 | 403:99e31898910e |
---|---|
46 IObservable(MessageBroker& broker) : | 46 IObservable(MessageBroker& broker) : |
47 broker_(broker) | 47 broker_(broker) |
48 { | 48 { |
49 } | 49 } |
50 | 50 |
51 virtual ~IObservable() | 51 virtual ~IObservable(); |
52 { | |
53 // delete all callables (this will also unregister them from the broker) | |
54 for (Callables::const_iterator it = callables_.begin(); | |
55 it != callables_.end(); ++it) | |
56 { | |
57 for (std::set<ICallable*>::const_iterator | |
58 it2 = it->second.begin(); it2 != it->second.end(); ++it2) | |
59 { | |
60 delete *it2; | |
61 } | |
62 } | |
63 | |
64 // unregister the forwarders but don't delete them (they'll be deleted by the observable they are observing as any other callable) | |
65 for (Forwarders::iterator it = forwarders_.begin(); | |
66 it != forwarders_.end(); ++it) | |
67 { | |
68 IMessageForwarder* fw = *it; | |
69 broker_.Unregister(dynamic_cast<IObserver&>(*fw)); | |
70 } | |
71 } | |
72 | |
73 void RegisterObserverCallback(ICallable* callable) | |
74 { | |
75 MessageType messageType = callable->GetMessageType(); | |
76 | |
77 callables_[messageType].insert(callable); | |
78 } | |
79 | |
80 void EmitMessage(const IMessage& message) | |
81 { | |
82 Callables::const_iterator found = callables_.find(message.GetType()); | |
83 | |
84 if (found != callables_.end()) | |
85 { | |
86 for (std::set<ICallable*>::const_iterator | |
87 it = found->second.begin(); it != found->second.end(); ++it) | |
88 { | |
89 if (broker_.IsActive((*it)->GetObserver())) | |
90 { | |
91 (*it)->Apply(message); | |
92 } | |
93 } | |
94 } | |
95 } | |
96 | |
97 void RegisterForwarder(IMessageForwarder* forwarder) | |
98 { | |
99 forwarders_.insert(forwarder); | |
100 } | |
101 | 52 |
102 MessageBroker& GetBroker() const | 53 MessageBroker& GetBroker() const |
103 { | 54 { |
104 return broker_; | 55 return broker_; |
105 } | 56 } |
57 | |
58 // Takes ownsership | |
59 void RegisterObserverCallback(ICallable* callable); | |
60 | |
61 void EmitMessage(const IMessage& message); | |
62 | |
63 // Takes ownsership | |
64 void RegisterForwarder(IMessageForwarder* forwarder); | |
106 }; | 65 }; |
107 } | 66 } |