00001 #include "PsnPvmDuplicatedObjectHandle.h" 00002 00003 #include "PsnProcess.h" 00004 #include "PsSimulatedObject.h" 00005 #include "PsnSvmLink.h" 00006 00007 PsnPvmDuplicatedObjectHandle::PsnPvmDuplicatedObjectHandle ( PsSimulatedObject & obj, PsController & ctrl ) : 00008 PsnDuplicatedObjectHandle ( obj, ctrl ) 00009 { 00010 00011 } 00012 00013 00014 00015 PsnPvmDuplicatedObjectHandle::~PsnPvmDuplicatedObjectHandle () 00016 { 00017 00018 } 00019 00020 00021 00022 void PsnPvmDuplicatedObjectHandle::broadcastEvent ( const PsEvent & event ) 00023 { 00024 PsnPvmOutgoingMessage * outgoingMessage ; 00025 //send the event to all copies of oneself 00026 for (list<const PsnProcess *>::const_iterator i = _processesOfDuplicates.begin() ; 00027 i != _processesOfDuplicates.end () ; 00028 ++i) 00029 { 00030 if (getSimulatedObject().getController().getObjectDescriptor().getProcess() != (*i)->getProcessName() ) 00031 { 00032 //cerr<<"sending "<<event<<" to "<<getSimulatedObject().getName ()<<" of process "<<(*i)->getProcessName()<<endl; 00033 #ifdef _DEBUGPVMMESS 00034 cerr<<"PsnPvmDuplicatedObjectHandle::broadcastEvent"<<endl; 00035 #endif 00036 (*i)->getSvmLink ()->getOutgoingBuffer()<< getSimulatedObject().getName () 00037 << EventReceived 00038 << event ; 00039 } 00040 } 00041 //receive the event oneself 00042 PsnReferenceObjectHandle::receiveEvent ( event.clone() ) ; 00043 } 00044 00045 00046 00047 void PsnPvmDuplicatedObjectHandle::unpack (PsIncomingSynchronisationMessage & in) 00048 { 00049 PsnRequestType typeMess ; 00050 int messageType ; 00051 00052 in >> messageType ; 00053 typeMess = static_cast <PsnRequestType> (messageType) ; 00054 00055 if ( typeMess == EventReceived ) 00056 { 00057 PsEvent * event ; 00058 PsName classToCreate ; 00059 PsEventIdentifier eventId; 00060 PsDate eventDate; 00061 PsName sender, receiver ; 00062 in >> classToCreate >> eventId>> eventDate>>sender>>receiver ; 00063 event = PsEventCreator::createEvent (classToCreate, eventId, eventDate, sender, receiver ) ; 00064 event->unpack ( in ) ; 00065 PsnReferenceObjectHandle::receiveEvent ( event ) ; 00066 } 00067 } 00068 00069 00070 00071 void PsnPvmDuplicatedObjectHandle::addProcessOfDuplicate ( const PsnProcess * process ) 00072 { 00073 _processesOfDuplicates.push_back( process ) ; 00074 }
| Documentation generated on Mon Nov 25 15:25:01 2002 |
Generated with doxygen 1.2.12 by Dimitri van Heesch , 1997-2001 |