#include <OMKSignalDispatcher.h>
Collaboration diagram for OMK::SignalDispatcher:
Public Member Functions | |
SignalDispatcher (Controller &controller) | |
constructor | |
virtual | ~SignalDispatcher () |
destrcutor | |
virtual void | sendEventsForSignal (Event &event, const EventIdentifier &sigId) |
send the events correponding to signal sigId | |
virtual bool | registerForSignal (const EventIdentifier &sigId, const Name ®istrant, const EventIdentifier &eventId) |
register an object for a signal | |
virtual bool | cancelRegistrationForSignal (const EventIdentifier &sigId, const Name ®istrant) |
cancel the registration of an object for a signal | |
Protected Types | |
typedef std::vector< std::pair< Name, EventIdentifier > > | _VectorType |
the type of data structure associated to a signal | |
typedef std::map< EventIdentifier, _VectorType * > | _TableType |
the type of data structure remembering who is registred to what signal | |
Protected Attributes | |
Controller & | _controler |
the controller used to find the reference handles to objects registering | |
_TableType | _tableOfRegistredObjects |
the table of registref objects |
Definition at line 38 of file OMKSignalDispatcher.h.
typedef std::vector<std::pair<Name,EventIdentifier> > OMK::SignalDispatcher::_VectorType [protected] |
the type of data structure associated to a signal
Definition at line 74 of file OMKSignalDispatcher.h.
typedef std::map<EventIdentifier, _VectorType * > OMK::SignalDispatcher::_TableType [protected] |
the type of data structure remembering who is registred to what signal
Definition at line 77 of file OMKSignalDispatcher.h.
SignalDispatcher::SignalDispatcher | ( | Controller & | controller | ) |
constructor
controller | a controller used to get reference to object handles to send the events |
Definition at line 28 of file OMKSignalDispatcher.cpp.
00028 : 00029 _controler (ctrl) 00030 { 00031 00032 }
SignalDispatcher::~SignalDispatcher | ( | ) | [virtual] |
destrcutor
Definition at line 34 of file OMKSignalDispatcher.cpp.
References _tableOfRegistredObjects.
00034 { 00035 for (_TableType::iterator i = _tableOfRegistredObjects.begin() ; 00036 i != _tableOfRegistredObjects.end() ; 00037 i++ ) 00038 { 00039 delete (*i).second ; 00040 } 00041 }
void SignalDispatcher::sendEventsForSignal | ( | Event & | event, | |
const EventIdentifier & | sigId | |||
) | [virtual] |
send the events correponding to signal sigId
event | a prototype for the event send | |
sigId | the signal for wich the events are dispatched |
Definition at line 43 of file OMKSignalDispatcher.cpp.
References _controler, _tableOfRegistredObjects, OMK::Event::eventId, OMK::SimulatedObject::getObjectHandle(), OMK::Controller::getPointerToSimulatedObjectNamed(), OMK::ObjectHandle::receiveEvent(), and OMK::Event::receiver.
Referenced by OMK::Controller::broadcastEventsForSignal(), and OMK::ReferenceObjectHandle::sendEventsForSignal().
00045 { 00046 //cerr<<"SignalDispatcher:"<<this<<":sendEventsForSignal "<<sigId<<endl; 00047 #ifdef _OMK_MUTEX_ 00048 _mutexForRegistredObjectsTable.protect() ; 00049 #endif 00050 _TableType::iterator i = _tableOfRegistredObjects.find ( sigId ) ; 00051 if (i != _tableOfRegistredObjects.end() ) 00052 { 00053 _VectorType::iterator listIterator = (*i).second->begin(); 00054 while ( listIterator != (*i).second->end() ) 00055 { 00056 event.receiver = listIterator->first ; 00057 event.eventId = listIterator->second ; 00058 SimulatedObject * receiver = _controler.getPointerToSimulatedObjectNamed(event.receiver) ; 00059 if ( receiver != NULL ) 00060 { 00061 receiver->getObjectHandle()->receiveEvent(event) ; 00062 listIterator ++ ; 00063 } 00064 else 00065 { 00066 // we suppose the objet no longer exists 00067 cerr<<"WARNING : OMKReferenceObjectHandle::sendSignalAsEvent " 00068 <<receiver 00069 << "no longer seems to exists : deleted from data structure "<<endl; 00070 listIterator = (*i).second->erase ( listIterator ) ; 00071 } 00072 } 00073 } 00074 #ifdef _OMK_MUTEX_ 00075 _mutexForRegistredObjectsTable.unprotect() ; 00076 #endif 00077 }
bool SignalDispatcher::registerForSignal | ( | const EventIdentifier & | sigId, | |
const Name & | registrant, | |||
const EventIdentifier & | eventId | |||
) | [virtual] |
register an object for a signal
sigId | the signal to react to | |
registrant | the simulated object registering to signal sigId | |
eventId | the eventId to send to registrant when sigId is emitted |
Definition at line 79 of file OMKSignalDispatcher.cpp.
References _tableOfRegistredObjects.
Referenced by OMK::DistributedController::processEvent(), OMK::ReferenceObjectHandle::receiveRegistrationForSignal(), and OMK::Controller::receiveRegistrationForSignal().
00082 { 00083 // cerr << "SignalDispatcher: " << this << " :registerForSignal on "<< sigId <<" send "<< eventId <<" to " << registrant << endl ; 00084 #ifdef _OMK_MUTEX_ 00085 _mutexForRegistredObjectsTable.protect() ; 00086 #endif 00087 _TableType::iterator i = _tableOfRegistredObjects.find ( sigId ) ; 00088 if (i == _tableOfRegistredObjects.end() ) 00089 { 00090 _tableOfRegistredObjects[sigId] = new _VectorType( 1, pair<Name, EventIdentifier>( registrant, eventId ) ); 00091 } 00092 else 00093 { 00094 _VectorType::iterator j = (*i).second->begin() ; 00095 while ( j != (*i).second->end() ) 00096 { 00097 if ( ( *j ).first == registrant ) 00098 { 00099 j = (*i).second->erase( j ) ; 00100 } 00101 else 00102 { 00103 ++j ; 00104 } 00105 } 00106 ( *i ).second->push_back( pair <Name, EventIdentifier> 00107 ( registrant, eventId ) ); 00108 } 00109 00110 #ifdef _OMK_MUTEX_ 00111 _mutexForRegistredObjectsTable.unprotect() ; 00112 #endif 00113 return true ; 00114 }
bool SignalDispatcher::cancelRegistrationForSignal | ( | const EventIdentifier & | sigId, | |
const Name & | registrant | |||
) | [virtual] |
cancel the registration of an object for a signal
sigId | the signal for wich there is a cancellation | |
registrant | the object cancelling registration |
Definition at line 117 of file OMKSignalDispatcher.cpp.
References _tableOfRegistredObjects.
Referenced by OMK::ReferenceObjectHandle::cancelRegistrationForSignal(), OMK::DistributedController::processEvent(), and OMK::Controller::receiveCancellationForSignal().
00119 { 00120 #ifdef _OMK_MUTEX_ 00121 _mutexForRegistredObjectsTable.protect() ; 00122 #endif 00123 _TableType::iterator i = _tableOfRegistredObjects.find ( sigId ) ; 00124 if (i != _tableOfRegistredObjects.end() ) 00125 { 00126 _VectorType::iterator listIterator = (*i).second->begin(); 00127 while ( listIterator != (*i).second->end() ) 00128 { 00129 if (listIterator->first == registrant ) 00130 { 00131 listIterator = (*i).second->erase( listIterator ) ; 00132 } 00133 else 00134 { 00135 listIterator++ ; 00136 } 00137 } 00138 } 00139 #ifdef _OMK_MUTEX_ 00140 _mutexForRegistredObjectsTable.unprotect() ; 00141 #endif 00142 return true ; 00143 }
Controller& OMK::SignalDispatcher::_controler [protected] |
the controller used to find the reference handles to objects registering
Definition at line 71 of file OMKSignalDispatcher.h.
Referenced by sendEventsForSignal().
the table of registref objects
Definition at line 80 of file OMKSignalDispatcher.h.
Referenced by cancelRegistrationForSignal(), registerForSignal(), sendEventsForSignal(), and ~SignalDispatcher().
Documentation generated on Mon Jun 9 11:46:03 2008 |
Generated with doxygen by Dimitri van Heesch , 1997-2007 |