MAK RTIspy API Documentation for HLA 1516
exec.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 1998 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: exec.h,v $ $Revision: 1.27 $ $State: Exp $
00007 *******************************************************************************/
00008 
00011 
00012 #ifndef VXWORKS
00013 
00014 #ifndef DtRtiExec_H_
00015 #define DtRtiExec_H_
00016 
00017 #include "rtiMsConfig.h"
00018 #include <map>
00019 #include <string>
00020 #include <list>
00021 #include <vlThreadedObject.h>
00022 #include <vlutil/vlTime.h>
00023 #include <vlutil/vlList.h>
00024 #include <vlutil/vlUtil.h>
00025 #include <vlutil/vlPrint.h>
00026 #include <vlutil/vlInetAddr.h>
00027 
00028 #include <creRespMsg.h>
00029 #include <desRespMsg.h>       
00030 #include <joinRespMsg.h>
00031 #include <execHandshakeMsg.h>
00032 #include <rtiUtil.h>
00033 #include <assistantConnectionInfo.h>
00034 
00035 
00036 class DtForwarderFaultManager;
00037 class DtLogicalTimeFactory;
00038 class DtMulitcastDiscoveryMgr;
00039 class DtCreateMsg;
00040 class DtDestroyMsg;
00041 class DtListFederationsMsg;
00042 class DtJoinMsg;
00043 class DtDisconnectMsg;
00044 class DtReconnectMsg;
00045 class DtRidTestRequestMsg;
00046 class DtFedExec;
00047 class DtRIDParameters;
00048 class DtExtendedRtiMsgForwarder;
00049 class DtQueueFullMsg;
00050 
00052 typedef DtBoost::shared_ptr<DtExtendedRtiMsgForwarder> DtRtiMsgForwarderSP;
00053 
00054 
00057 
00058 class DtRtiExec;
00059 
00061 typedef DtRtiExec* (*DtRtiExecCreator)(DtRIDParameters* p,
00062    DtBoost::shared_ptr<DtFilePrinter> logPrinter,
00063    bool autoExit, const DtRtiConnectionInfoDataPair& connInfo );
00064 
00066 typedef void (*DtFedExCbFn)(DtFedExec* exec, void* usr);
00067 
00069 typedef void (*DtTickCbFn)(void* usr);
00070 typedef void (*DtTickWithExecCbFn)(const DtRtiExec& exec, void* usr);
00071 
00073 typedef void (*DtLogFileNameCbFn)(const DtFilename& file, void* usr);
00074 
00076 typedef void (*DtWebServerCbFn)(const DtInetAddr& webSpyIpAddr, int webSpyPort, void* usr);
00077 
00079 class DtFedExCallbackInfo
00080 {
00081 public:
00082    DtFedExCallbackInfo(DtFedExCbFn fn, void* data) :
00083       myData(data), myFn(fn) {}
00084 
00085    void* myData;
00086    DtFedExCbFn myFn;
00087 };
00088 
00090 class DtTickCallbackInfo
00091 {
00092 public:
00093    DtTickCallbackInfo(DtTickCbFn fn, void* data, DtTime interval) :
00094       myData(data), myFn(fn), myInterval(interval), myNextExecutionTime(0) {}
00095 
00096    bool operator<(const DtTickCallbackInfo& other) const
00097    {
00098       return ( myData < other.myData ||
00099          myData == other.myData && myFn < other.myFn );
00100    }
00101 
00102    void* myData;
00103    DtTickCbFn myFn;
00104    DtTime myInterval;
00105    DtTime myNextExecutionTime;
00106 };
00107 
00109 class DtTickWithExecCallbackInfo
00110 {
00111 public:
00112    DtTickWithExecCallbackInfo(DtTickWithExecCbFn fn, void* data, DtTime interval) :
00113       myData(data), myFn(fn), myInterval(interval), myNextExecutionTime(0) {}
00114 
00115    bool operator<(const DtTickWithExecCallbackInfo& other) const
00116    {
00117       return ( myData < other.myData ||
00118          myData == other.myData && myFn < other.myFn );
00119    }
00120 
00121    void* myData;
00122    DtTickWithExecCbFn myFn;
00123    DtTime myInterval;
00124    DtTime myNextExecutionTime;
00125 };
00126 
00128 class DtLogFileNameCallbackInfo
00129 {
00130 public:
00131    DtLogFileNameCallbackInfo(DtLogFileNameCbFn fn, void* data) :
00132       myData(data), myFn(fn) {}
00133 
00134    bool operator<(const DtLogFileNameCallbackInfo& other) const
00135    {
00136       return ( myData < other.myData ||
00137          myData == other.myData && myFn < other.myFn );
00138    }
00139 
00140    void* myData;
00141    DtLogFileNameCbFn myFn;
00142 };
00143 
00145 class DtWebServerCallbackInfo
00146 {
00147 public:
00148    DtWebServerCallbackInfo(DtWebServerCbFn fn, void* data) :
00149       myData(data), myFn(fn) {}
00150 
00151    bool operator<(const DtWebServerCallbackInfo& other) const
00152    {
00153       return ( myData < other.myData ||
00154          myData == other.myData && myFn < other.myFn );
00155    }
00156 
00157    void* myData;
00158    DtWebServerCbFn myFn;
00159 };
00160 
00161 class DT_DLL_EXEC DtRtiExec
00162 {
00163 protected:
00164 
00166    DtRtiExec(DtRIDParameters* p,
00167       DtBoost::shared_ptr<DtFilePrinter> logPrinter,
00168       bool autoExit, 
00169       const DtRtiConnectionInfoDataPair& connInfo );
00170 
00171 public:
00172 
00174    virtual ~DtRtiExec();
00175 
00176    virtual void shutdownForwarderIfCreated();
00177 
00179    virtual void checkVersion(const DtString& version) const;
00180 
00182    virtual void processCreate(const DtCreateMsg& msg);
00183 
00185    virtual void processDestroy(const DtDestroyMsg& msg);
00186 
00188    virtual void processListFederations(const DtListFederationsMsg& msg);
00189 
00191    virtual void processJoin(const DtJoinMsg& msg);
00192 
00195    virtual void processDisconnect(const DtDisconnectMsg& msg);
00196 
00198    virtual void processQueueFull( const DtQueueFullMsg& msg );
00199 
00202    virtual void processReconnect(const DtReconnectMsg& msg);
00203    
00207    virtual DtFedExec* createFedEx(
00208       DtConnectionMgr* connMgr, const std::vector<unsigned int> & crcs, const char* fedExName,
00209       std::string const & timeImplName, MAKRti::DtFomType fedType,
00210       const std::vector<DtString>& fedFileName, const DtString& momModuleName,
00211       int fedExHandle, DtRIDParameters* params, unsigned int momModuleCrc);
00212 
00215    DtConnectionMgr* connectMgr();
00216 
00218    virtual bool exists(const DtString& fedExName);
00219 
00220 
00225    virtual void destroyFederationByName( const DtString& fullFedexName, 
00226                                          bool sendDestroyResponse = true,
00227                                          bool forceDestroy = false );
00228 
00229 
00234    int processQuit();
00235 
00237    virtual void listFederates();
00238 
00240    virtual void parseDeleteCommand( const DtString& command,
00241                                     unsigned int& handle, 
00242                                     DtString& federationName ) const;
00243                      
00244    virtual int deleteFederate( unsigned int handle, 
00245                                 const DtString& federationName );
00246 
00248    virtual void processUpdateNotifyLevel( DtNotifyLevelType level );
00249 
00251    virtual void exit();
00252 
00254    virtual void enableLogging();
00255    
00257    virtual void enableWebSpy( const DtInetAddr& webSpyIpAddr, int webSpyPort );
00258 
00259 
00262    DtFedExec* fedExec(const DtString& fedExName);
00263    const DtFedExec* fedExec(const DtString& fedExName) const;
00264 
00266    const std::map<DtString, DtFedExec*>& fedExecs() const;
00267 
00269    const DtRIDParameters& params() const;
00270 
00272    virtual void run();
00273  
00278    virtual bool tick( bool noCallbacks = false );
00279 
00281    virtual void wait(DtTime intervalInSeconds);
00282 
00285    virtual void addFedExCreatedCallback(DtFedExCbFn fn, void* usr);
00286    virtual void removeFedExCreatedCallback(DtFedExCbFn fn, void* usr);
00287 
00290    virtual void addFedExDestroyedCallback(DtFedExCbFn fn, void* usr);
00291    virtual void removeFedExDestroyedCallback(DtFedExCbFn fn, void* usr);
00292 
00295    virtual void addLogFileNameUpdatedCallback(DtLogFileNameCbFn fn, void* usr);
00296    virtual void removeLogFileNameUpdatedCallback(DtLogFileNameCbFn fn, void* usr);
00297 
00300    virtual void addWebServerUpdatedCallback(DtWebServerCbFn fn, void* usr);
00301    virtual void removeWebServerUpdatedCallback(DtWebServerCbFn fn, void* usr);
00302 
00305    virtual void addTickCallback(DtTickCbFn fn, void* usr, DtTime interval );
00306    virtual void removeTickCallback(DtTickCbFn fn, void* usr );
00307 
00311    virtual void addTickCallback(DtTickWithExecCbFn fn, void* usr, DtTime interval );
00312    virtual void removeTickCallback(DtTickWithExecCbFn fn, void* usr );
00313 
00315    virtual void sendCreateResponseMsg(const unsigned long destinationID,
00316       DtCreateResponseFlag flag, MAKRti::DtString const & errorString);
00317    virtual void sendDestroyResponseMsg(
00318        const char* fedExName, DtDestroyResponseFlag flag);
00319    virtual void sendReportFederationsMsg(unsigned long destId,
00320       const std::vector<DtString>& federationNames,
00321       const std::vector<DtString>& timeImplNames);
00322    virtual void sendJoinResponseMsg(
00323       unsigned long destinationIDValue,unsigned short requestID, unsigned int crc, 
00324       DtFederateHandle handle, const char* fedName, int fedExHandle, const char* fedExName,
00325       const DtString& momModule, const std::vector<DtString>& fedFileName,
00326       unsigned long flags, bool allowNetworkTesting,
00327       MAKRti::DtString const & errorString,
00328       DtJoinResponseMsg::errorCodes errorValue = DtJoinResponseMsg::DT_NO_ERROR);
00329 
00334    virtual void ridRequestCb( const DtRidTestRequestMsg& msg);
00335 
00336 public:
00337 
00339    static DtRtiExec* create(DtRIDParameters* p,
00340       DtBoost::shared_ptr<DtFilePrinter> logPrinter,
00341       bool autoExit = false, 
00342       const DtRtiConnectionInfoDataPair& connInfo = DtRtiConnectionInfoDataPair() );
00343 
00347    static void setCreatorFunction(DtRtiExecCreator fn);
00348 
00350    static void processRtiExecHandshakeMsg(const DtRtiExecHandshakeMsg& msg,
00351       void* usr);
00352    
00354    static void processCreate(const DtCreateMsg& msg,
00355       void *usr);
00356 
00358    static void processDestroy(const DtDestroyMsg& msg,
00359       void* usr);
00360 
00362    static void processListFederations(const DtListFederationsMsg& msg,
00363       void* usr);
00364 
00366    static void processJoin(const DtJoinMsg& msg,
00367       void* usr);
00368 
00370    static void processDisconnect(const DtDisconnectMsg& msg,
00371       void* usr);
00372 
00374    static void processQueueFull( const DtQueueFullMsg& msg, 
00375        void* usr);
00376 
00378    static void processReconnect(const DtReconnectMsg& msg,
00379       void* usr);
00380 
00382    static void ridRequestCb( const DtRidTestRequestMsg& msg, void* usr );
00383    static bool shutdownSignalCaught(); 
00384    static void caughtShutdownSignal();
00385 
00386 protected:
00387 
00390    void cleanupConstructorException();
00391 
00394    virtual void rtiExecToForwarderHandshake();
00395 
00397    virtual void sendRtiExecHandshakeMsg( DtHandle destId, DtRtiExecHandshakeMsg::DtHandshakeStatus status );
00398 
00400    virtual void processRtiExecHandshakeMsg( const DtRtiExecHandshakeMsg& msg );
00401 
00403    virtual void performMulticastDiscovery( bool reliableTransportDisabled );
00404 
00406    virtual void removeDroppedFederateConnections();
00407 
00408    enum DtStartRtiForwarderResult
00409    {
00410       ForwarderSuccessfullyStarted,
00411       RetryStartingForwarder,
00412       ForwarderStartupFailed
00413    };
00416    virtual DtStartRtiForwarderResult startRtiForwarder(const DtRIDParameters* params);
00417    
00418 protected:
00419 
00420    typedef std::map< unsigned long, DtTime > DtConnIdToTimeMap;
00421    static bool      theShutdownSignalCaught;   
00422 
00423    DtConnectionMgr* myConnectionMgr;
00424    std::map<DtString, DtFedExec*> myExecByName;
00425    std::map<DtFederationHandle, DtFedExec*> myExecByHandle;
00426    DtString lineOfInput;
00427   
00428    bool myHandleForDeleteComplete;
00429    bool myFedNameForDeleteComplete;
00430    DtString myFederationNameForDelete;   
00431    unsigned int myHandleForDelete;
00432 
00433    bool myCreatedRtiForwarder;
00434    bool myPendingDelete;
00435    bool myPendingQuit;
00436    int myFreeFedExHandle;
00437    DtList myCreateCallbacks;
00438    DtList myDestroyCallbacks;
00439 
00441    std::list<DtTickCallbackInfo> myTickCallbacks;
00442 
00444    std::list<DtTickWithExecCallbackInfo> myTickWithExecCallbacks;
00445 
00447    std::list<DtLogFileNameCallbackInfo> myLogFileNameCallbacks;
00448 
00450    std::list<DtWebServerCallbackInfo> myWebServerCallbacks;
00451 
00452    DtClock myClock;
00453    DtRtiExecHandshakeMsg::DtHandshakeStatus myHandshakeStatus;
00454    DtTime myNextHeartbeat;
00455 
00456    DtRtiMsgForwarderSP myRtiForwarder;
00457    DtForwarderFaultManager* myFaultManager;
00458 
00459    DtMulitcastDiscoveryMgr* myMcastDiscoveryMgr;
00460 
00464    DtConnIdToTimeMap myDisconnectedFederates;
00465 
00466    DtRIDParameters* myParams;   
00467    bool             myAutoExit;
00468 
00470    bool myExitCommanded;
00471 
00473    DtBoost::shared_ptr<DtFilePrinter> myLogPrinter;
00474 
00475    DtRtiConnectionInfoDataPair myConnInfo;
00476 
00477 
00478 protected:
00479 
00480    static DtRtiExecCreator theCreator;
00481 };
00482 
00483 inline DtConnectionMgr* DtRtiExec::connectMgr()
00484 {
00485    return myConnectionMgr;
00486 }
00487 
00488 inline const DtRIDParameters& DtRtiExec::params() const
00489 {
00490    return *myParams;
00491 }
00492 
00493 #endif   //! DtRtiExec_H_
00494 
00495 #endif //! VXWORKS
00496 

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)