00001 /* 00002 * This file is part of openMask © INRIA, CNRS, Universite de Rennes 1 1993-2002, thereinafter the Software 00003 * 00004 * The Software has been developped within the Siames Project. 00005 * INRIA, the University of Rennes 1 and CNRS jointly hold intellectual property rights 00006 * 00007 * The Software has been registered with the Agence pour la Protection des 00008 * Programmes (APP) under registration number IDDN.FR.001.510008.00.S.P.2001.000.41200 00009 * 00010 * This file may be distributed under the terms of the Q Public License 00011 * version 1.0 as defined by Trolltech AS of Norway and appearing in the file 00012 * LICENSE.QPL included in the packaging of this file. 00013 * 00014 * Licensees holding valid specific licenses issued by INRIA, CNRS or Université de Rennes 1 00015 * for the software may use this file in accordance with that specific license 00016 * 00017 */ 00018 #include "PsnSignalDispatcher.h" 00019 00020 #include "PsController.h" 00021 #include "PsEvent.h" 00022 00023 PsnSignalDispatcher::PsnSignalDispatcher(PsController & ctrl ) : 00024 _controler (ctrl) 00025 { 00026 00027 } 00028 00029 PsnSignalDispatcher::~PsnSignalDispatcher() { 00030 for (_TableType::iterator i = _tableOfRegistredObjects.begin() ; 00031 i != _tableOfRegistredObjects.end() ; 00032 i++ ) 00033 { 00034 delete (*i).second ; 00035 } 00036 } 00037 00038 void PsnSignalDispatcher::sendEventsForSignal ( PsEvent & event, 00039 const PsEventIdentifier & sigId ) 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 } 00069 00070 bool PsnSignalDispatcher::registerForSignal ( const PsEventIdentifier & sigId, 00071 const PsName & registrant, 00072 const PsEventIdentifier & eventId ) 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 } 00088 00089 00090 bool PsnSignalDispatcher::cancelRegistrationForSignal ( const PsEventIdentifier & sigId, 00091 const PsName & registrant ) 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 }
| Documentation generated on Mon Nov 25 15:25:01 2002 |
Generated with doxygen 1.2.12 by Dimitri van Heesch , 1997-2001 |