Salome HOME
copy tag mergefrom_BR_V0_1_CC_Salome_04oct07
[modules/yacs.git] / src / runtime / SALOMEDispatcher.cxx
1
2 #include "SALOMEDispatcher.hxx"
3 #include "Node.hxx"
4
5 #include <iostream>
6
7 using namespace std;
8 using namespace YACS::BASES;
9 using namespace YACS::ENGINE;
10
11 map< pair<int,string> , set<YACSGui_ORB::Observer_ptr> > SALOMEDispatcher::_observers;
12 SALOMEDispatcher* SALOMEDispatcher::_disp = 0;
13
14 SALOMEDispatcher::SALOMEDispatcher()
15 {
16 }
17
18 SALOMEDispatcher::~SALOMEDispatcher()
19 {
20 }
21
22 void SALOMEDispatcher::setSALOMEDispatcher()
23 {
24   cerr << "SALOMEDispatcher::setSALOMEDispatcher" << endl;
25   _disp=new SALOMEDispatcher();
26   YACS::ENGINE::Dispatcher::setDispatcher(_disp);
27 }
28
29 SALOMEDispatcher* SALOMEDispatcher::getSALOMEDispatcher()
30 {
31   return _disp;
32 }
33
34 void SALOMEDispatcher::dispatch(Node* object, const std::string& event)
35 {
36   cerr << "SALOMEDispatcher::dispatch " << event << " " << object->getNumId() << endl;
37   CORBA::Long numId = object->getNumId();
38   typedef set<YACSGui_ORB::Observer_ptr>::iterator jt;
39   std::pair<int,std::string> key(numId, event);
40   for(jt iter = _observers[key].begin(); iter!=_observers[key].end(); iter++)
41     {
42       if (! CORBA::is_nil(*iter))
43         {
44           cerr << "numId, event " << numId << " " << event << endl;
45           (*iter)->notifyObserver(numId, event.c_str());
46         }
47       else
48         cerr << "************************** dispatch on a CORBA::nil *******************************" <<endl;
49     }
50 }
51
52 void SALOMEDispatcher::addObserver(YACSGui_ORB::Observer_ptr observer,
53                                    int numid,
54                                    std::string event)
55 {
56   _observers[std::pair<int,std::string>(numid,event)].insert(YACSGui_ORB::Observer::_duplicate(observer));
57 }