Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

PsnPvmDuplicatedObjectHandle.cxx

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

logo OpenMask

Documentation generated on Mon Nov 25 15:25:01 2002

Generated with doxygen 1.2.12 by Dimitri van Heesch ,   1997-2001