OMKPvmLocalObjectHandle.cxx

Go to the documentation of this file.
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 }

logo OpenMask

Documentation generated on Mon Jun 9 11:45:57 2008

Generated with doxygen by Dimitri van Heesch ,   1997-2007