00001 #include "OMKPvmLocalObjectHandle.h" 00002 00003 #include "OMKController.h" 00004 #include "OMKProcess.h" 00005 #include "OMKSimulatedObject.h" 00006 #include "OMKSvmLink.h" 00007 using namespace OMK ; 00008 00009 PvmLocalObjectHandle::PvmLocalObjectHandle ( SimulatedObject & obj, Controller & ctrl ) : 00010 LocalObjectHandle ( obj, ctrl ) 00011 { 00012 00013 } 00014 00015 00016 00017 PvmLocalObjectHandle::~PvmLocalObjectHandle () 00018 { 00019 00020 } 00021 00022 void PvmLocalObjectHandle::broadcastEvent ( const Event & event ) 00023 { 00024 // Warn: PvmOutgoingMessage * outgoingMessage ; 00025 //send the event to all copies of oneself 00026 for (std::list<const Process *>::const_iterator i = _processesOfLocal.begin() ; 00027 i != _processesOfLocal.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 std::cerr<<"PvmLocalObjectHandle::broadcastEvent"<<std::endl; 00035 #endif 00036 (*i)->getSvmLink ()->getOutgoingBuffer()<< getSimulatedObject().getName () 00037 << EventReceived 00038 << event ; 00039 } 00040 } 00041 //receive the event oneself 00042 ReferenceObjectHandle::receiveEvent ( event.clone() ) ; 00043 } 00044 00045 void PvmLocalObjectHandle::unpack (IncomingSynchronisationMessage & in) 00046 { 00047 RequestType typeMess ; 00048 int messageType ; 00049 00050 in >> messageType ; 00051 typeMess = static_cast <RequestType> (messageType) ; 00052 00053 if ( typeMess == EventReceived ) 00054 { 00055 Event * event ; 00056 Name classToCreate ; 00057 EventIdentifier eventId; 00058 Date eventDate; 00059 Name sender, receiver ; 00060 in >> classToCreate >> eventId>> eventDate>>sender>>receiver ; 00061 event = EventCreator::createEvent (classToCreate, eventId, eventDate, sender, receiver ) ; 00062 event->unpack ( in ) ; 00063 ReferenceObjectHandle::receiveEvent ( event ) ; 00064 } 00065 } 00066 00067 00068 void PvmLocalObjectHandle::addProcessOfLocal ( const Process * process ) 00069 { 00070 _processesOfLocal.push_back( process ) ; 00071 }
Documentation generated on Mon Jun 9 11:45:57 2008 |
Generated with doxygen by Dimitri van Heesch , 1997-2007 |