Mercurial > hg > orthanc-stone
diff 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 |
line wrap: on
line diff
--- a/Framework/Messages/IObservable.h Sat Nov 10 12:34:45 2018 +0100 +++ b/Framework/Messages/IObservable.h Sun Nov 11 12:13:31 2018 +0100 @@ -48,60 +48,19 @@ { } - virtual ~IObservable() - { - // delete all callables (this will also unregister them from the broker) - for (Callables::const_iterator it = callables_.begin(); - it != callables_.end(); ++it) - { - for (std::set<ICallable*>::const_iterator - it2 = it->second.begin(); it2 != it->second.end(); ++it2) - { - delete *it2; - } - } - - // unregister the forwarders but don't delete them (they'll be deleted by the observable they are observing as any other callable) - for (Forwarders::iterator it = forwarders_.begin(); - it != forwarders_.end(); ++it) - { - IMessageForwarder* fw = *it; - broker_.Unregister(dynamic_cast<IObserver&>(*fw)); - } - } - - void RegisterObserverCallback(ICallable* callable) - { - MessageType messageType = callable->GetMessageType(); - - callables_[messageType].insert(callable); - } - - void EmitMessage(const IMessage& message) - { - Callables::const_iterator found = callables_.find(message.GetType()); - - if (found != callables_.end()) - { - for (std::set<ICallable*>::const_iterator - it = found->second.begin(); it != found->second.end(); ++it) - { - if (broker_.IsActive((*it)->GetObserver())) - { - (*it)->Apply(message); - } - } - } - } - - void RegisterForwarder(IMessageForwarder* forwarder) - { - forwarders_.insert(forwarder); - } + virtual ~IObservable(); MessageBroker& GetBroker() const { return broker_; } + + // Takes ownsership + void RegisterObserverCallback(ICallable* callable); + + void EmitMessage(const IMessage& message); + + // Takes ownsership + void RegisterForwarder(IMessageForwarder* forwarder); }; }