#include <PsnSignalDispatcher.h>
Collaboration diagram for PsnSignalDispatcher:

Public Methods | |
| PsnSignalDispatcher (PsController &controller) | |
| constructor | |
| virtual | ~PsnSignalDispatcher () |
| destrcutor | |
| virtual void | sendEventsForSignal (PsEvent &event, const PsEventIdentifier &sigId) |
| send the events correponding to signal sigId | |
| virtual bool | registerForSignal (const PsEventIdentifier &sigId, const PsName ®istrant, const PsEventIdentifier &eventId) |
| register an object for a signal | |
| virtual bool | cancelRegistrationForSignal (const PsEventIdentifier &sigId, const PsName ®istrant) |
| cancel the registration of an object for a signal | |
Protected Types | |
| typedef PsList< PsPair< PsName, PsEventIdentifier > > | _ListType |
| the type of data structure associated to a signal | |
| typedef map< PsEventIdentifier, _ListType * > | _TableType |
| the type of data structure remembering who is registred to what signal | |
Protected Attributes | |
| PsController & | _controler |
| the controller used to find the reference handles to objects registering | |
| _TableType | _tableOfRegistredObjects |
| the table of registref objects | |
| PsnMutexLock | _mutexForRegistredObjectsTable |
| a lock for mutual exclusion on the signal dispatcher | |
Definition at line 36 of file PsnSignalDispatcher.h.
|
|
the type of data structure associated to a signal
Definition at line 71 of file PsnSignalDispatcher.h. Referenced by registerForSignal(). |
|
|
the type of data structure remembering who is registred to what signal
Definition at line 74 of file PsnSignalDispatcher.h. |
|
|
constructor
Definition at line 23 of file PsnSignalDispatcher.cxx.
00023 : 00024 _controler (ctrl) 00025 { 00026 00027 } |
|
|
destrcutor
Definition at line 29 of file PsnSignalDispatcher.cxx. References _tableOfRegistredObjects, map< PsEventIdentifier, _ListType * >::begin(), and map< PsEventIdentifier, _ListType * >::end().
00029 {
00030 for (_TableType::iterator i = _tableOfRegistredObjects.begin() ;
00031 i != _tableOfRegistredObjects.end() ;
00032 i++ )
00033 {
00034 delete (*i).second ;
00035 }
00036 }
|
|
||||||||||||
|
cancel the registration of an object for a signal
Definition at line 90 of file PsnSignalDispatcher.cxx. References _mutexForRegistredObjectsTable, _tableOfRegistredObjects, map< PsEventIdentifier, _ListType * >::end(), map< PsEventIdentifier, _ListType * >::find(), PsnMutexLock::protect(), and PsnMutexLock::unprotect(). Referenced by PsnReferenceObjectHandle::cancelRegistrationForSignal(), PsDistributedController::processEvent(), and PsController::receiveCancellationForSignal().
00092 {
00093 _mutexForRegistredObjectsTable.protect() ;
00094 _TableType::iterator i = _tableOfRegistredObjects.find ( sigId ) ;
00095 if (i != _tableOfRegistredObjects.end() )
00096 {
00097 _ListType::iterator listeIterator = (*i).second->begin();
00098 while ( listeIterator != (*i).second->end() )
00099 {
00100 if (listeIterator->first == registrant )
00101 {
00102 listeIterator = (*i).second->erase ( listeIterator ) ;
00103 }
00104 else
00105 {
00106 listeIterator++ ;
00107 }
00108 }
00109 }
00110 _mutexForRegistredObjectsTable.unprotect() ;
00111 return true ;
00112 }
|
|
||||||||||||||||
|
register an object for a signal
Definition at line 70 of file PsnSignalDispatcher.cxx. References _ListType, _mutexForRegistredObjectsTable, _tableOfRegistredObjects, map< PsEventIdentifier, _ListType * >::end(), map< PsEventIdentifier, _ListType * >::find(), PsnMutexLock::protect(), and PsnMutexLock::unprotect(). Referenced by PsDistributedController::processEvent(), PsnReferenceObjectHandle::receiveRegistrationForSignal(), and PsController::receiveRegistrationForSignal().
00073 {
00074 //cerr<<"PsnSignalDispatcher:"<<this<<":registerForSignal on "<<sigId<<" send "<<eventId<<" to "<<registrant<<endl;
00075 _mutexForRegistredObjectsTable.protect() ;
00076 _TableType::iterator i = _tableOfRegistredObjects.find ( sigId ) ;
00077 if (i == _tableOfRegistredObjects.end() )
00078 {
00079 _tableOfRegistredObjects[sigId] = new _ListType (1,PsPair<PsName,PsEventIdentifier>(registrant,eventId)) ;
00080 }
00081 else
00082 {
00083 (*i).second->push_back( PsPair < PsName, PsEventIdentifier> ( registrant, eventId ) );
00084 }
00085 _mutexForRegistredObjectsTable.unprotect() ;
00086 return true ;
00087 }
|
|
||||||||||||
|
send the events correponding to signal sigId
Definition at line 38 of file PsnSignalDispatcher.cxx. References _controler, _mutexForRegistredObjectsTable, _tableOfRegistredObjects, map< PsEventIdentifier, _ListType * >::end(), PsEvent::eventId, map< PsEventIdentifier, _ListType * >::find(), PsSimulatedObject::getObjectHandle(), PsController::getPointerToSimulatedObjectNamed(), PsnMutexLock::protect(), PsnObjectHandle::receiveEvent(), PsEvent::receiver, and PsnMutexLock::unprotect(). Referenced by PsController::broadcastEventsForSignal(), and PsnReferenceObjectHandle::sendEventsForSignal().
00040 {
00041 //cerr<<"PsnSignalDispatcher:"<<this<<":sendEventsForSignal "<<sigId<<endl;
00042 _mutexForRegistredObjectsTable.protect() ;
00043 _TableType::iterator i = _tableOfRegistredObjects.find ( sigId ) ;
00044 if (i != _tableOfRegistredObjects.end() )
00045 {
00046 _ListType::iterator listeIterator = (*i).second->begin();
00047 while ( listeIterator != (*i).second->end() )
00048 {
00049 event.receiver = listeIterator->first ;
00050 event.eventId = listeIterator->second ;
00051 PsSimulatedObject * receiver = _controler.getPointerToSimulatedObjectNamed(event.receiver) ;
00052 if ( receiver != NULL )
00053 {
00054 receiver->getObjectHandle()->receiveEvent(event) ;
00055 listeIterator ++ ;
00056 }
00057 else
00058 {
00059 // we suppose the objet no longer exists
00060 cerr<<"WARNING : PsnReferenceObjectHandle::sendSignalAsEvent "
00061 <<receiver
00062 << "no longer seems to exists : deleted from data structure "<<endl;
00063 listeIterator = (*i).second->erase ( listeIterator ) ;
00064 }
00065 }
00066 }
00067 _mutexForRegistredObjectsTable.unprotect() ;
00068 }
|
|
|
the controller used to find the reference handles to objects registering
Definition at line 68 of file PsnSignalDispatcher.h. Referenced by sendEventsForSignal(). |
|
|
a lock for mutual exclusion on the signal dispatcher
Definition at line 80 of file PsnSignalDispatcher.h. Referenced by cancelRegistrationForSignal(), registerForSignal(), and sendEventsForSignal(). |
|
|
the table of registref objects
Definition at line 77 of file PsnSignalDispatcher.h. Referenced by cancelRegistrationForSignal(), registerForSignal(), sendEventsForSignal(), and ~PsnSignalDispatcher(). |
| Documentation generated on Mon Nov 25 15:26:29 2002 |
Generated with doxygen 1.2.12 by Dimitri van Heesch , 1997-2001 |