MAK RTIspy API Documentation for HLA 1.3
distributorThreadEvents.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2007 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: distributorThreadEvents.h,v $ $Revision: 1.3 $ $State: Exp $
00007 *******************************************************************************/
00008 
00011 
00012 #ifndef DtDistributorThreadEvents_H_
00013 #define DtDistributorThreadEvents_H_
00014 
00015 #include <rtiMsConfig.h>
00016 #include <memory>
00017 #include <typeinfo>
00018 #include <vector>
00019 #include <map>
00020 #include <vlutil/vlString.h>
00021 #include "rtiMsg.h"
00022 #include "fomModuleRequestMsg.h"
00023 #include "fomModuleDistributionMsg.h"
00024 
00025 class DtFedExec;
00026 class DtAsyncFileDistributorRunnable;
00027 class DtRtiExecFederateMgr;
00028 class DtFileInformation;
00029 class DtRtiExecFederateMgr;
00030 class DtFomModuleDistributionMsg;
00031 class DtFomModuleRequestMsg;
00032 class DtFederate;
00033 
00034 
00035 //base class enforces clone() ability
00038 class DT_DLL_EXEC DtDistributorThreadEvent
00039 {
00040 public:
00041 
00042    virtual ~DtDistributorThreadEvent() {}
00043    virtual DtDistributorThreadEvent* clone() const = 0;
00044 
00049    virtual bool operator==( const DtDistributorThreadEvent& value )
00050    {
00051       return ( typeid( *this ) == typeid( value ));
00052    }
00053 
00056    virtual void processResults() {}
00057 };
00058 
00059 
00061 
00065 class DT_DLL_EXEC DtFedExecDistribFunctor : public DtDistributorThreadEvent
00066 {
00067 public:
00068 
00069    virtual ~DtFedExecDistribFunctor() {};
00070    virtual void operator()( const DtAsyncFileDistributorRunnable& dist ) = 0;
00071 };
00072 
00073 
00074 class DT_DLL_EXEC DtGetFileFromDistributorCmd : public DtFedExecDistribFunctor
00075 {
00076 public:
00077    DtGetFileFromDistributorCmd( const std::vector<DtString>& fileNames, 
00078       const unsigned long ID) :
00079    DtFedExecDistribFunctor(), myFileNames ( fileNames ), myInitiatorID(ID)  {}
00080 
00081    virtual ~DtGetFileFromDistributorCmd() {}
00082    virtual void operator()(const DtAsyncFileDistributorRunnable& dist );
00083    virtual DtDistributorThreadEvent* clone() const
00084    { return new DtGetFileFromDistributorCmd(myFileNames, myInitiatorID); }
00085 
00086    virtual void processResults();
00087 
00088    std::vector<DtString> myFileNames;
00089    unsigned long myInitiatorID;
00090 };
00091 
00092 class DT_DLL_EXEC DtFedexRemoveFileCmd : public DtFedExecDistribFunctor
00093 {
00094 public:
00095    DtFedexRemoveFileCmd( unsigned long ID, const std::vector<DtString>& fileNames ) :
00096       DtFedExecDistribFunctor(), myFileNames( fileNames), myInitiatorID(ID) {}
00097       virtual ~DtFedexRemoveFileCmd() {}
00098       virtual void operator()(const DtAsyncFileDistributorRunnable& dist );
00099       virtual DtDistributorThreadEvent* clone() const
00100       { return new DtFedexRemoveFileCmd(myInitiatorID, myFileNames); }
00101 
00102       std::vector<DtString> myFileNames;
00103       unsigned long myInitiatorID;
00104 };
00105 
00106 class DT_DLL_EXEC DtPushFilesToAllFederatesCmd : public DtFedExecDistribFunctor
00107 {
00108 public: 
00109    DtPushFilesToAllFederatesCmd( const DtString fileName, 
00110                                                        const char* fileBuff, unsigned long fileSize,
00111       const unsigned int ID ) :
00112    DtFedExecDistribFunctor(), myFileBuffer(fileBuff), myFileName(fileName), 
00113       myFileSize(fileSize), myDestination(ID) {}
00114       virtual ~DtPushFilesToAllFederatesCmd() {}
00115       virtual void operator()(const DtAsyncFileDistributorRunnable& dist);
00116       virtual DtDistributorThreadEvent* clone() const
00117       { return new DtPushFilesToAllFederatesCmd(myFileName, 
00118                                                                              myFileBuffer, myFileSize, myDestination); }
00119 
00120       const char* myFileBuffer;
00121       unsigned long myFileSize;
00122       DtString myFileName;
00123       unsigned long myDestination;
00124 };
00125 
00126 
00127 class DT_DLL_EXEC DtDistributionMsgCmd : public DtFedExecDistribFunctor
00128 {
00129 public: 
00130    DtDistributionMsgCmd(unsigned long ID, const DtFomModuleDistributionMsg msg ) : 
00131       DtFedExecDistribFunctor( ), myMsg(msg), myInitiatorID(ID) {};
00132 
00133       virtual DtDistributorThreadEvent* clone() const 
00134       { 
00135          return new DtDistributionMsgCmd(myInitiatorID, myMsg ); 
00136       }
00137       virtual void operator()(const DtAsyncFileDistributorRunnable& dist);
00138       const DtFomModuleDistributionMsg myMsg;
00139       unsigned long myInitiatorID;
00140 };
00141 
00142 
00143 class DT_DLL_EXEC DtFomModuleRequestMsgCmd : public DtFedExecDistribFunctor
00144 {
00145 public:
00146    DtFomModuleRequestMsgCmd( unsigned long ID, const DtFomModuleRequestMsg msg ) :
00147       DtFedExecDistribFunctor(), myMsg(msg), myInitiatorID(ID) {};
00148       virtual DtFomModuleRequestMsgCmd* clone() const
00149       {
00150          return new DtFomModuleRequestMsgCmd(myInitiatorID, myMsg);
00151       }
00152       virtual void operator()(const DtAsyncFileDistributorRunnable& dist);
00153       const DtFomModuleRequestMsg myMsg;
00154       unsigned long myInitiatorID;
00155 };
00156 
00159 class DT_DLL_EXEC DtFedexTakeFileCmd : public DtFedExecDistribFunctor
00160 {
00161 public:
00162    DtFedexTakeFileCmd( unsigned long ID,
00163       const std::map<DtString, DtFileInformation*>& files ) : 
00164    DtFedExecDistribFunctor( ),
00165       myFiles(files), myInitiatorID(ID) {};
00166    static DtFedexTakeFileCmd* createNamesOnlyTakeFileEvent(DtFedExec* parent, 
00167       const std::vector<DtString>& fileNames);
00169    virtual DtDistributorThreadEvent* clone() const 
00170    { 
00171       return new DtFedexTakeFileCmd( myInitiatorID, myFiles ); 
00172    }
00173    virtual void operator()(const DtAsyncFileDistributorRunnable& dist);
00174    std::map<DtString, DtFileInformation*> myFiles;
00175    unsigned long myInitiatorID;
00176 };
00177 
00178 
00180 
00181 
00182 
00183 
00184 //Event Definitions
00185 class DT_DLL_EXEC DtDistribFunctor : public DtDistributorThreadEvent
00186 {
00187 public: 
00188    virtual ~DtDistribFunctor() {};
00189    virtual void operator()( const DtAsyncFileDistributorRunnable& dist ) = 0;
00190 };
00191 
00192 
00195 class DT_DLL_EXEC DtFedexDistributionEvent : public DtDistribFunctor
00196 {
00197 public:
00198    DtFedexDistributionEvent( DtFedExec* parent ) :
00199       DtDistribFunctor(), myParent ( parent) { };
00200    virtual void operator()( const DtAsyncFileDistributorRunnable& dist ) {}   
00201 
00202    DtFedExec* myParent;
00203 };
00204 
00205 class DT_DLL_EXEC DtRequestedModulesArrivedEvent : public DtFedexDistributionEvent
00206 {
00207 public: 
00208    DtRequestedModulesArrivedEvent(DtFedExec* parent ) : 
00209       DtFedexDistributionEvent( parent ) {};
00210 
00211    virtual DtDistributorThreadEvent* clone() const 
00212    { 
00213       return new DtRequestedModulesArrivedEvent( myParent  ); 
00214    }
00215    virtual void operator()( const std::vector<DtString>& fileNames);
00216    virtual void processResults();
00217 
00218    std::vector<DtString> myFileNames;
00219 };
00220 
00221 class DT_DLL_EXEC DtFedFileRequestMsgEvent : public DtFedexDistributionEvent
00222 {
00223 public: 
00224    DtFedFileRequestMsgEvent( DtFedExec* parent ) :
00225       DtFedexDistributionEvent( parent ) {};
00226    virtual DtDistributorThreadEvent* clone() const
00227    {
00228       return new DtFedFileRequestMsgEvent( myParent );
00229    }
00230    virtual void operator()( const std::vector<DtString>& fileNames, unsigned long fedID);
00231    virtual void processResults();
00232 
00233    std::vector<DtString> myFileNames;
00234    unsigned long myInitiatingID;
00235 };
00236 
00237 
00238 class DT_DLL_EXEC DtFedExTakeFileEvent : public DtFedexDistributionEvent
00239 {
00240 public:
00241    DtFedExTakeFileEvent( DtFedExec* parent ) :
00242       DtFedexDistributionEvent(parent) {};
00243       virtual DtDistributorThreadEvent* clone() const { return new DtFedExTakeFileEvent(myParent); }
00244       virtual void operator()( const std::map<DtString, DtFileInformation*>& fileNames  );
00245       virtual void processResults();
00246 
00247       std::map<DtString, DtFileInformation*> myFileNames;
00248 };
00249 
00250 class DT_DLL_EXEC DtFileRequestedEvent : public DtFedexDistributionEvent
00251 {
00252 public:
00253    DtFileRequestedEvent( DtFedExec* parent ) :
00254       DtFedexDistributionEvent(parent) {};
00255    virtual DtDistributorThreadEvent* clone() const
00256    {
00257       return new DtFileRequestedEvent( myParent );
00258    }
00259    virtual void operator()( const std::vector<DtString>& files );
00260    virtual void processResults();
00261 
00262    std::vector<DtString> myFileNames;
00263 };
00264 
00265 class DT_DLL_EXEC DtFileReceivedEvent : public DtFedexDistributionEvent
00266 {
00267 public:
00268    DtFileReceivedEvent( DtFedExec* parent ) :      
00269       DtFedexDistributionEvent(parent) {};
00270 
00271    virtual DtDistributorThreadEvent* clone() const
00272    {
00273       return new DtFileReceivedEvent( myParent );
00274    }
00275    virtual void operator()( const DtFomModuleDistributionMsg& msg );
00276    virtual void processResults();
00277 
00278 
00279    DtFomModuleDistributionMsg myMsg;
00280 };
00281 
00282 class DT_DLL_EXEC DtPushFedFileToFederatesEvent : public DtFedexDistributionEvent
00283 {
00284 public:
00285    DtPushFedFileToFederatesEvent( DtFedExec* parent ) :
00286       DtFedexDistributionEvent( parent ) {};
00287    virtual DtDistributorThreadEvent* clone() const
00288    {
00289       return new DtPushFedFileToFederatesEvent(myParent);
00290    }
00291    virtual void operator()(DtString name, int fileSize, const char* buff);
00292    virtual void processResults();
00293 
00294    DtString myFileName;
00295    int myFileSize;
00296    const char* myBuff;
00297 };
00298 
00299 
00300 
00301 class DT_DLL_EXEC DtPushFedFileToSingleFederateEvent : public DtPushFedFileToFederatesEvent
00302 {
00303 public:
00304    DtPushFedFileToSingleFederateEvent( DtFedExec* parent ) :
00305       mySingleFederate(0),
00306       DtPushFedFileToFederatesEvent(parent) {};
00307       virtual DtDistributorThreadEvent* clone() const
00308       {
00309          return new DtPushFedFileToSingleFederateEvent(myParent);
00310       }
00311       virtual void operator()(DtString name, int fileSize, const char* buff, DtFederateHandle recipientHandle)
00312       {
00313          DtPushFedFileToFederatesEvent::operator ()(name, fileSize, buff);
00314          mySingleFederate = recipientHandle;
00315       }
00316       virtual void processResults();
00317       DtFederateHandle mySingleFederate;
00318 };
00319 
00320 
00321 
00323 
00324 
00325 class DT_DLL_EXEC DtDistribFunctorChangeRequest: public DtDistributorThreadEvent
00326 {
00327 public:
00328    enum EventType {
00329       RequestedModuleArrived,
00330       FedFileRequested,
00331       FedFileReceived,
00332       PushFedFileToAllFederates,
00333       PushFedFileToSingleFederate,
00334       TakeFile,
00335       UploadToExec,
00336       RtiMsg,
00337       BackendExited
00338    };
00339 
00340    DtDistribFunctorChangeRequest( EventType type,
00341       const DtDistributorThreadEvent& newFunctor,
00342       bool addition = true ):
00343       myType( type ), 
00344       myAddition( addition ),
00345       myFunctor( newFunctor.clone() ),
00346       myMsgKind(),
00347       myIsMomMsg( false )
00348    {}
00349 
00350    DtDistribFunctorChangeRequest( EventType type,
00351       const DtDistributorThreadEvent& newFunctor,
00352       bool addition,
00353       DtRtiMsgKind kind,
00354       bool isMomMsg = false) :
00355    myType( type ), 
00356       myAddition( addition ),  
00357       myFunctor( newFunctor.clone() ),
00358       myMsgKind( kind ),
00359       myIsMomMsg( isMomMsg )
00360    {}
00361 
00362    DtDistribFunctorChangeRequest( const DtDistribFunctorChangeRequest& orig ) :
00363    myType( orig.myType ), 
00364       myAddition( orig.myAddition ),  
00365       myFunctor( orig.myFunctor->clone() ),
00366       myMsgKind( orig.myMsgKind ),
00367       myIsMomMsg( orig.myIsMomMsg )
00368    {}
00369 
00370    virtual ~DtDistribFunctorChangeRequest() { delete myFunctor; myFunctor = 0; }
00371 
00372    virtual DtDistributorThreadEvent* clone() const
00373    {
00374       return new DtDistribFunctorChangeRequest( myType, *myFunctor, myAddition,
00375          myMsgKind, myIsMomMsg );
00376    }
00377 
00378    virtual DtDistribFunctorChangeRequest& operator=( const DtDistribFunctorChangeRequest& orig )
00379    {
00380       if ( this == &orig ) return *this;
00381 
00382       DtDistributorThreadEvent* copy = orig.myFunctor->clone();
00383       myFunctor  = copy;
00384       myType     = orig.myType;
00385       myAddition = orig.myAddition;
00386       myMsgKind  = orig.myMsgKind;
00387       myIsMomMsg = orig.myIsMomMsg;
00388 
00389       return *this;
00390    }
00391 
00392 
00393    EventType          myType;
00394    bool               myAddition;
00395    DtDistributorThreadEvent* myFunctor;
00396    DtRtiMsgKind       myMsgKind;   
00397    bool                    myIsMomMsg;
00398 };
00399 
00400 
00401 
00402 
00403 #endif //DtDistributorThreadEvents_H_

Document ID: Generated on Thu Jun 14 14:15:04 EDT 2012 from SVN revision 116116
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)