diff Framework/Messages/IObservable.cpp @ 623:42dadae61fa9

renamed IObservable::EmitMessage() as BroadcastMessage()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 07 May 2019 14:16:08 +0200
parents a750f11892ec
children f0008c55e5f7
line wrap: on
line diff
--- a/Framework/Messages/IObservable.cpp	Tue May 07 12:32:21 2019 +0200
+++ b/Framework/Messages/IObservable.cpp	Tue May 07 14:16:08 2019 +0200
@@ -84,7 +84,8 @@
     }
   }
   
-  void IObservable::EmitMessage(const IMessage& message)
+  void IObservable::EmitMessageInternal(const IObserver* receiver,
+                                        const IMessage& message)
   {
     Callables::const_iterator found = callables_.find(message.GetType());
 
@@ -94,14 +95,33 @@
              it = found->second.begin(); it != found->second.end(); ++it)
       {
         assert(*it != NULL);
-        if (broker_.IsActive(*(*it)->GetObserver()))
+
+        const IObserver* observer = (*it)->GetObserver();
+        if (broker_.IsActive(*observer))
         {
-          (*it)->Apply(message);
+          if (receiver == NULL ||    // Are we broadcasting?
+              observer == receiver)  // Not broadcasting, but this is the receiver
+          {
+            (*it)->Apply(message);
+          }
         }
       }
     }
   }
 
+
+  void IObservable::BroadcastMessage(const IMessage& message)
+  {
+    EmitMessageInternal(NULL, message);
+  }
+
+  
+  void IObservable::EmitMessage(const IObserver& observer,
+                                const IMessage& message)
+  {
+    EmitMessageInternal(&observer, message);
+  }
+
   
   void IObservable::RegisterForwarder(IMessageForwarder* forwarder)
   {