Version: 9.15.0
YACS::ENGINE::Dispatcher Class Reference

Base class for dispatcher in observer pattern. More...

#include <Dispatcher.hxx>

Inheritance diagram for YACS::ENGINE::Dispatcher:
Collaboration diagram for YACS::ENGINE::Dispatcher:

Public Member Functions

virtual void dispatch (Node *object, const std::string &event)
 
virtual void dispatch2 (Node *object, const std::string &event, void *something)
 
virtual void dispatchFromClone (Node *originalInstance, const std::string &event, Node *clonedInstanceGeneratingEvent)
 
virtual void addObserver (Observer *observer, Node *object, const std::string &event)
 
virtual void removeObserver (Observer *observer, Node *object, const std::string &event)
 
virtual void printObservers ()
 
virtual ~Dispatcher ()
 

Static Public Member Functions

static DispatchergetDispatcher ()
 
static void setDispatcher (Dispatcher *dispatcher)
 

Protected Attributes

std::map< std::pair< Node *, std::string >, std::set< Observer * > > _observers
 

Static Protected Attributes

static Dispatcher_singleton = 0
 

Detailed Description

Base class for dispatcher in observer pattern.

Dispatcher and Observer objects can be used to be notified about events that occurs in editing or executing a calculation schema.

When an object wants to notify an event, it calls the dispatch method of the dispatcher with 2 arguments : the object reference and an event type. The dispatcher which is a singleton is obtained by calling the class method getDispatcher. The dispatcher notifies all the registered observers by calling their notifyObserver method.

Observers can be registered by calling the addObserver method with two arguments : an object reference and an event type. This observer will be notify with events coming only from this object.

Limitation : emitting objects can be only Node

Definition at line 73 of file Dispatcher.hxx.

Constructor & Destructor Documentation

◆ ~Dispatcher()

Dispatcher::~Dispatcher ( )
virtual

Definition at line 50 of file Dispatcher.cxx.

51 {
53 }
static Dispatcher * _singleton
Definition: Dispatcher.hxx:87

References _singleton.

Member Function Documentation

◆ addObserver()

void Dispatcher::addObserver ( Observer observer,
Node object,
const std::string &  event 
)
virtual

Definition at line 125 of file Dispatcher.cxx.

126 {
127  _observers[std::pair<Node*,std::string>(object,event)].insert(observer);
128 // printObservers();
129 }
std::map< std::pair< Node *, std::string >, std::set< Observer * > > _observers
Definition: Dispatcher.hxx:86

References _observers.

Referenced by DefineCustomObservers(), and YACS::HMI::SubjectNode::SubjectNode().

◆ dispatch()

void Dispatcher::dispatch ( Node object,
const std::string &  event 
)
virtual

Reimplemented in MyDispatcher, and YACS::ENGINE::SALOMEDispatcher.

Definition at line 85 of file Dispatcher.cxx.

86 {
87  DEBTRACE("Dispatcher::dispatch " << event );
88  std::pair<Node*,std::string> key(object,event);
89  std::map< std::pair<Node*,std::string> , std::set<Observer*> >::const_iterator it(_observers.find(key));
90  if(it!=_observers.end())
91  {
92  for(std::set<Observer*>::const_iterator iter=(*it).second.begin();iter!=(*it).second.end();iter++)
93  {
94  (*iter)->notifyObserver(object,event);
95  }
96  }
97 }
#define DEBTRACE(msg)
Definition: YacsTrace.hxx:31

References _observers, and DEBTRACE.

Referenced by YACS::ENGINE::Executor::sendEvent(), and YACS::ENGINE::Node::sendEvent().

◆ dispatch2()

void Dispatcher::dispatch2 ( Node object,
const std::string &  event,
void *  something 
)
virtual

Definition at line 99 of file Dispatcher.cxx.

100 {
101  std::pair<Node*,std::string> key(object,event);
102  std::map< std::pair<Node*,std::string> , std::set<Observer*> >::const_iterator it(_observers.find(key));
103  if(it!=_observers.end())
104  {
105  for(std::set<Observer*>::const_iterator iter=(*it).second.begin();iter!=(*it).second.end();iter++)
106  {
107  (*iter)->notifyObserver2(object,event,something);
108  }
109  }
110 }

References _observers.

Referenced by YACS::ENGINE::Node::sendEvent2().

◆ dispatchFromClone()

void Dispatcher::dispatchFromClone ( Node originalInstance,
const std::string &  event,
Node clonedInstanceGeneratingEvent 
)
virtual

Definition at line 112 of file Dispatcher.cxx.

113 {
114  std::pair<Node*,std::string> key(originalInstance,event);
115  std::map< std::pair<Node*,std::string> , std::set<Observer*> >::const_iterator it(_observers.find(key));
116  if(it!=_observers.end())
117  {
118  for(std::set<Observer*>::const_iterator iter=(*it).second.begin();iter!=(*it).second.end();iter++)
119  {
120  (*iter)->notifyObserverFromClone(originalInstance,event,clonedInstanceGeneratingEvent);
121  }
122  }
123 }

References _observers.

Referenced by YACS::ENGINE::Node::sendEvent().

◆ getDispatcher()

Dispatcher * Dispatcher::getDispatcher ( )
static

Definition at line 55 of file Dispatcher.cxx.

56 {
58  {
60  }
62 }
Base class for dispatcher in observer pattern.
Definition: Dispatcher.hxx:74

References _singleton.

Referenced by Yacs_i::addObserver(), main(), YACS::ENGINE::Executor::sendEvent(), YACS::ENGINE::Node::sendEvent(), and YACS::ENGINE::Node::sendEvent2().

◆ printObservers()

void Dispatcher::printObservers ( )
virtual

Definition at line 69 of file Dispatcher.cxx.

70 {
71  std::cerr << "Dispatcher::printObservers " << std::endl;
72  typedef std::map< std::pair<Node*,std::string> , std::set<Observer*> >::iterator it;
73  typedef std::set<Observer*>::iterator jt;
74 
75  for(it i=_observers.begin();i!=_observers.end();i++)
76  {
77  std::cerr << "Node*: " << (*i).first.first << " event: " << (*i).first.second << std::endl;
78  for(jt j=(*i).second.begin();j!=(*i).second.end();j++)
79  {
80  std::cerr << "observer: " << *j << std::endl;
81  }
82  }
83 }

References _observers, and yacsorb.CORBAEngineTest::i.

◆ removeObserver()

void Dispatcher::removeObserver ( Observer observer,
Node object,
const std::string &  event 
)
virtual

Definition at line 131 of file Dispatcher.cxx.

132 {
133  _observers[std::pair<Node*,std::string>(object,event)].erase(observer);
134 // printObservers();
135 }

References _observers.

Referenced by PluginObserverKeeper::clean().

◆ setDispatcher()

void Dispatcher::setDispatcher ( Dispatcher dispatcher)
static

Definition at line 64 of file Dispatcher.cxx.

65 {
67 }
dispatcher
Definition: CItems.py:28

References _singleton, and gui.CItems::dispatcher.

Referenced by main(), and YACS::ENGINE::SALOMEDispatcher::setSALOMEDispatcher().

Member Data Documentation

◆ _observers

std::map< std::pair<Node*,std::string> , std::set<Observer*> > YACS::ENGINE::Dispatcher::_observers
protected

◆ _singleton

Dispatcher * Dispatcher::_singleton = 0
staticprotected

Definition at line 87 of file Dispatcher.hxx.

Referenced by getDispatcher(), setDispatcher(), and ~Dispatcher().


The documentation for this class was generated from the following files: