MAK RTIspy API Documentation for HLA 1.3
fedex.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 1998 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *********************************************************************/
00005 /*********************************************************************
00006 ** $RCSfile: fedex.h,v $ $Revision: 1.24 $ $State: Exp $
00007 *********************************************************************/
00008 
00011 
00012 #ifndef DtFedExec_H_
00013 #define DtFedExec_H_
00014 
00015 #include <rtiMsConfig.h>
00016 #include <vlutil/vlString.h>
00017 #include <vlutil/vlUtil.h>
00018 #include "vlThreadedObject.h"
00019 #include <rtiApiTypes.h>
00020 #include <connection.h>
00021 #include <resignMsg.h>
00022 #include <fomMgr.h>
00023 
00024 #include "federate.h"
00025 #include "timeInfoList.h"
00026 #include "asynchronousFileDistributor.h"
00027 #include "execCmds.h"
00028 #include "distributorThreadEvents.h"
00029 
00030 #include <joinRespMsg.h>
00031 #include <savRespMsg.h>
00032 #include <syncPointMsg.h>
00033 #include <savFinMsg.h>
00034 #include <resEndMsg.h>
00035 
00036 #include "mtl/fedReader13.h"
00037 #include "mtl/fedReader1516.h"
00038 #include "mtl/fedReader1516e.h"
00039 
00040 
00041 class DtRidFileTester;
00042 
00043 class DtFederateHandleSet;
00044 class DtLogicalTimeFactory;
00045 class DtRIDParameters;
00046 class DtSyncPt;
00047 class DtTimeInfo;
00048 
00049 class DtAliveMsg;
00050 class DtTransferRidParamsMsg;
00051 class DtConstrainedSyncMsg;
00052 class DtDisableMsg;
00053 class DtEnableRegulationMsg;
00054 class DtEnableConstrainedMsg;
00055 class DtJoinConfirmMsg;
00056 class DtJoinMsg;
00057 class DtNextEventRequestMsg;
00058 class DtOwnershipMsg;
00059 class DtResignMsg;
00060 class DtRestoreBegunMsg;
00061 class DtRestoreCompleteMsg;
00062 class DtRestoreRequestMsg;
00063 class DtAbortRestoreMsg;
00064 class DtSaveBegunMsg;
00065 class DtSaveCompleteMsg;
00066 class DtSaveRequestMsg;
00067 class DtSaveRequestTsoMsg;
00068 class DtAbortSaveMsg;
00069 class DtInitiatedSaveMsg;
00070 class DtSaveTimeAdvanceMsg;
00071 class DtSyncPointMsg;
00072 class DtSyncPointQueryMsg;
00073 class DtTimeAdvanceRequestMsg;
00074 class DtReserveNameMsg;
00075 class DtQuerySaveStatusMsg;
00076 class DtQueryRestoreStatusMsg;
00077 class DtFedExec;
00078 class DtFedJoinInfo;
00079 class DtRtiAssistantExecClient;
00080 class DtReserveMultiNameMsg;
00081 class DtReleaseMultiNameMsg;
00082 
00083 #ifdef DtIFSPEC1516
00084 #define RTINAMESPACE rti1516
00085 #elif defined(DtIFSPEC1516E)
00086 #define RTINAMESPACE rti1516e
00087 #else 
00088 // TODO Unimplemented for HLA 1.3
00089 #endif
00090 
00092 typedef DtFedExec* (*DtFedExecCreator)(DtConnectionMgr* connMgr,
00093                                        const std::vector<unsigned int> & crcs,
00094                                        DtString const & fedExName,
00095                                        std::string const & timeImplName,
00096                                        MAKRti::DtFomType fedType,
00097                                        const DtString& momModuleName,
00098                                        const std::vector<DtString>& fedFileName,
00099                                        int fedExHandle,
00100                                        DtRIDParameters* params,
00101                                        unsigned int momModuleCrc);
00102 
00103 
00105 typedef void (*DtFederateCbFn)(DtFederate* federate, void* usr);
00106 
00108 typedef void (*DtFederateCbFn)(DtFederate* handle, void* usr );
00109 
00111 typedef void (*DtSyncPointCbFn)(DtSyncPt* pt, void* usr);
00112 
00114 typedef void (*DtSyncPointAchievedCbFn)(DtFederate* who, DtSyncPt* pt, void* usr);
00115 
00117 typedef std::map<DtFederateHandle, DtFederate*> DtFederateHandleInfoMap;
00118 
00120 typedef std::map<DtString, DtFederate*> DtFederateNameInfoMap;
00121 
00122 
00123 class DT_DLL_EXEC DtFedExec
00124 {
00125 
00126 protected:
00127    
00129    DtFedExec(DtConnectionMgr* connMgr,
00130       const std::vector<unsigned int> & crcs, DtString const & fedExName,
00131       std::string const & timeImplName, MAKRti::DtFomType fedType,
00132       const DtString& momModuleName,
00133       const std::vector<DtString >& modules, 
00134       int fedExHandle, DtRIDParameters* params, unsigned int momModuleCrc);
00135    
00136 public:
00137 
00139    virtual ~DtFedExec();
00140 
00142    virtual DtConnectionMgr* connectMgr();
00143 
00145    virtual DtLogicalTimeFactory* fedTimeFactory();
00146 
00148    virtual const DtString& fedExName() const;
00149 
00151    virtual int fedExHandle() const;
00152 
00155    virtual const DtString& fedFileName() const;
00156 
00158    virtual const std::vector<DtString>& fomModules() const;
00159 
00161    virtual bool fullyCreated() const;
00162 
00164    virtual void setFullyCreated(bool val);
00165 
00167    virtual unsigned long creatorID() const;
00168 
00170    virtual void createDistributor( const unsigned long initiatingFedID,
00171       const DtString& momModuleName,
00172       const std::vector<DtString>& fomModules );
00173 
00175    virtual int numFederates() const;
00176 
00179    virtual DtFederate* getFederate(DtFederateHandle handle);
00180 
00183    virtual DtFederateHandle federateHandleOfConnection(unsigned long connId) const;
00184 
00186    virtual void disconnectFederate( DtFederate* fed );
00187 
00189    virtual bool removeFederateConnection(unsigned long id);
00190 
00195    virtual bool restoreFederateConnection( DtFederateHandle handle,
00196       unsigned long newConnId, unsigned long& oldConnId);
00197 
00199    virtual void reconnectFederateSucceeded( DtFederate* fed );
00200 
00202    virtual void reconnectFederateFailed( DtFederate* fed );
00203 
00205    virtual bool resignFederate(DtFederateHandle handle,
00206       DtResignAction action, DtResignReason reason );
00207 
00214    virtual void resetClockForHeartBeat();
00215 
00217    virtual bool tick();
00218 
00220    virtual void printFederates();
00221 
00223    virtual void addFederateJoinedCallback(DtFederateCbFn fn, void* usr);
00224 
00226    virtual void removeFederateJoinedCallback(DtFederateCbFn fn, void* usr);
00227 
00229    virtual void addFederateResignedCallback(DtFederateCbFn fn, void* usr);
00230 
00232    virtual void removeFederateResignedCallback(DtFederateCbFn fn, void* usr);
00233 
00236    virtual void addSyncPtRegisteredCallback(DtSyncPointCbFn fn, void* usr);
00237 
00240    virtual void removeSyncPtRegisteredCallback(DtSyncPointCbFn fn, void* usr);
00241 
00244    virtual void addSyncPtAchievedCallback(DtSyncPointAchievedCbFn fn, void* usr);
00245 
00248    virtual void removeSyncPtAchievedCallback(DtSyncPointAchievedCbFn fn, void* usr);
00249 
00252    virtual void addFederationSynchronizedCallback(DtSyncPointCbFn fn, void* usr);
00253 
00256    virtual void removeFederationSynchronizedCallback(DtSyncPointCbFn fn, void* usr);
00257 
00259    virtual void addFederateDisconnectedCallback(DtFederateCbFn fn, void* usr );
00260 
00262    virtual void removeFederateDisconnectedCallback(DtFederateCbFn fn, void* usr );
00263 
00264    //Register callbacks for federate reconnect.
00265    virtual void addFederateReconnectSucceededCallback(DtFederateCbFn fn, void* usr );
00266 
00267    //Unregister callbacks for federate reconnect.
00268    virtual void removeFederateReconnectSucceededCallback(DtFederateCbFn fn, void* usr );
00269 
00270    //Register callbacks for federate reconnect.
00271    virtual void addFederateReconnectFailedCallback(DtFederateCbFn fn, void* usr );
00272 
00273    // Unregister callbacks for federate reconnect.
00274    virtual void removeFederateReconnectFailedCallback(DtFederateCbFn fn, void* usr );
00275 
00277    void multFileReceivedCb( const DtFomModuleDistributionMsg& msg );
00278 
00280    void multFileRequestedCb( const DtFomModuleRequestMsg& msg );
00281 
00283    void pushFomModuleToJoinedFederates(DtFederate* newFederate,
00284       DtString fileName,
00285       unsigned int fileSize,
00286       const char* fileBuffer );
00287 
00289    void pushFomModuleToSingleFederate(DtFederateHandle recipient,
00290       DtString fileName,
00291       unsigned int fileSize,
00292       const char* fileBuffer );
00293 
00295    virtual void processRequestedModulesArrived( const DtRequestedModulesArrivedEvent& e );
00296 
00298    virtual void processFedFileRequestMsg( const DtFedFileRequestMsgEvent& e);
00299 
00301    virtual void processFileTransfer(const DtFedExTakeFileEvent& e);
00302 
00304    virtual DtFederateHandleInfoMap const& federates() const;
00305 
00306 #ifdef DtTIME
00307 
00308    virtual const DtTimeInfoList* regulatingFederates() const;
00309 
00311    virtual const DtTimeInfoList* constrainedFederates() const;
00312 #endif
00313 
00315    virtual void disableNetworkTesting();
00316 
00318    virtual void enableNetworkTesting();
00319 
00321    virtual void changeLatencyTestMode( DtFederateHandle handle, bool runTest,
00322       bool continuous, bool haltContinuous, bool observing, 
00323       unsigned int interactionPeriod, unsigned int numInteractions, 
00324       unsigned int payloadBytes );
00325 
00327    virtual bool transferRidParams(DtFederateHandle handle, const DtString& ridString);
00328 
00329 public:
00330 
00333 
00334    static void processJoinMsg(const DtJoinMsg& msg, void* usr);
00335    static void processJoinConfirm(const DtJoinConfirmMsg& msg, void* usr);
00336    static void processAlive(const DtAliveMsg& msg,void* usr);
00337    static void processResign(const DtResignMsg& msg, void* usr);
00338    static void processSyncPoint(const DtSyncPointMsg& msg, void* usr);
00339    static void processSyncPointQuery(const DtSyncPointQueryMsg& msg, void* usr);
00340    static void processSaveRequest(const DtSaveRequestMsg& msg, void* usr);
00341    static void processInitiatedSave(const DtInitiatedSaveMsg& msg, void* usr);
00342    static void processSaveComplete(const DtSaveCompleteMsg& msg, void* usr);
00343    static void processSaveBegun(const DtSaveBegunMsg& msg, void* usr);
00344    static void processAbortSave(const DtAbortSaveMsg& msg, void* usr);
00345    static void processRestoreRequest(const DtRestoreRequestMsg& msg, void* usr);
00346    static void processRestoreBegun(const DtRestoreBegunMsg& msg, void* usr);
00347    static void processRestoreComplete(const DtRestoreCompleteMsg& msg,
00348       void* usr);
00349    static void processAbortRestore(const DtAbortRestoreMsg& msg, void* usr);
00350    static void processOwnership(const DtOwnershipMsg& msg, void* usr);
00351    static void processReserveName(DtReserveNameMsg const& msg, void* usr);
00352    static void processReserveMultiName(DtReserveMultiNameMsg const& msg, void* usr);
00353    static void processReleaseMultiName(DtReleaseMultiNameMsg const& msg, void* usr);
00354    static void processQuerySaveStatus(DtQuerySaveStatusMsg const& msg, 
00355       void* usr);
00356    static void processQueryRestoreStatus(DtQueryRestoreStatusMsg const& msg, 
00357       void* usr);
00358 #ifdef DtTIME
00359    static void processSaveTimeAdvance(const DtSaveTimeAdvanceMsg& msg, void* usr);
00360    static void processSaveRequestTso(const DtSaveRequestTsoMsg& msg, void* usr);
00361    static void processEnableRegulation(const DtEnableRegulationMsg& msg, 
00362       void* usr);
00363    static void processEnableConstrained(const DtEnableConstrainedMsg& msg, 
00364       void* usr);
00365    static void processTimeAdvanceRequest(const DtTimeAdvanceRequestMsg& msg,
00366       void* usr);
00367    static void processDisable(const DtDisableMsg& msg, void* usr);
00368    static void processConstrainedSync(const DtConstrainedSyncMsg& msg,
00369       void* usr);
00370    static void processNextEventRequest(const DtNextEventRequestMsg& msg,
00371       void* usr);
00372 #endif
00373 
00374 
00376    static void multFileReceivedCb( const DtFomModuleDistributionMsg& msg, void* usr );
00377 
00379    static void multFileRequestedCb( const DtFomModuleRequestMsg& msg, void* usr );
00380 
00382    static DtFedExec* create(DtConnectionMgr* connMgr,
00383       const std::vector<unsigned int> & crcs,
00384       DtString const & fedExName,
00385       std::string const & timeImplName,
00386       MAKRti::DtFomType fedType,
00387       DtString const& momModuleName,
00388       const std::vector<DtString>& fomModules,
00389       int fedExHandle,
00390       DtRIDParameters* params,
00391       unsigned int momModuleCrc);
00392 
00396    static void setCreatorFunction(DtFedExecCreator creator);
00397 
00398    static void init( DtRtiAssistantExecClient* assistant );
00399 
00400 protected:
00401 
00403    virtual const std::map< unsigned long, const std::vector<DtString>*>& joinFomModules() const;
00404    
00405    virtual const std::vector<DtString>& joinFomModulesForConnection(unsigned long connID) const;
00406 
00408    virtual const std::vector<DtString>& createFomModules() const;
00409 
00412 
00413    virtual void processJoinMsg(const DtJoinMsg& msg);   
00414    virtual bool handleJoinFailureCases( const DtJoinMsg &msg );   
00415    virtual void requestFedFileUpload( const DtJoinMsg& msg );
00416   
00417    virtual void processJoinConfirm(const DtJoinConfirmMsg& msg);
00418    virtual void processAlive(const DtAliveMsg& msg);
00419    virtual void processResign(const DtResignMsg& msg);
00420    virtual void processSyncPoint(const DtSyncPointMsg& msg);
00421    virtual void processSyncPointQuery(const DtSyncPointQueryMsg& msg);
00422    virtual void processSaveRequest(const DtSaveRequestMsg& msg);
00423    virtual void processInitiatedSave(const DtInitiatedSaveMsg& msg);
00424    virtual void processSaveComplete(const DtSaveCompleteMsg& msg);
00425    virtual void processSaveBegun(const DtSaveBegunMsg& msg);
00426    virtual void processAbortSave(const DtAbortSaveMsg& msg);
00427    virtual void processRestoreRequest(const DtRestoreRequestMsg& msg);
00428    virtual void processRestoreBegun(const DtRestoreBegunMsg& msg);
00429    virtual void processRestoreComplete(const DtRestoreCompleteMsg& msg);
00430    virtual void processAbortRestore(const DtAbortRestoreMsg& msg);
00431    virtual void processOwnership(const DtOwnershipMsg& msg);
00432    virtual void processReserveName(DtReserveNameMsg const& msg);
00433    virtual void processReserveMultiName(DtReserveMultiNameMsg const& msg);
00434    virtual void processReleaseMultiName(DtReleaseMultiNameMsg const& msg);
00435    virtual void processQuerySaveStatus(DtQuerySaveStatusMsg const& msg);
00436    virtual void processQueryRestoreStatus(DtQueryRestoreStatusMsg const& msg);
00437 
00438 #ifdef DtTIME
00439    virtual void processEnableRegulation(const DtEnableRegulationMsg& msg);
00440    virtual void processEnableConstrained(const DtEnableConstrainedMsg& msg);
00441    virtual void processTimeAdvanceRequest(const DtTimeAdvanceRequestMsg& msg);
00442    virtual void processDisable(const DtDisableMsg& msg);
00443    virtual void processConstrainedSync( const DtConstrainedSyncMsg& msg);
00444    virtual void processSaveRequestTso(const DtSaveRequestTsoMsg& msg);
00445    virtual void processSaveTimeAdvance(const DtSaveTimeAdvanceMsg& msg);
00446    virtual void processNextEventRequest(const DtNextEventRequestMsg& msg);
00447 #endif
00448 
00450 
00452    virtual void processRegisterSyncPoint(const DtSyncPointMsg& msg);
00453 
00455    virtual void processAchievedSyncPoint(const DtSyncPointMsg& msg);
00456 
00458    virtual void createSyncPoint(const DtSyncPointMsg& msg);
00459 
00461    virtual void processSyncPtAchievedCallbacks(DtSyncPt* point,
00462       DtFederate* federate);
00463 
00465    virtual void processFederationSynchronizedCallbacks(DtSyncPt* point);
00466 
00470    virtual bool synchronized(DtSyncPt* point,
00471       DtFederateHandleSet& unsuccessfulSet) const;
00472 
00474    virtual void sendSyncPointReport(const DtSyncPointQueryMsg& msg);
00475 
00477    virtual void sendSyncPointStatusReport(const DtSyncPointQueryMsg& msg);
00478 
00480    virtual DtFederate* addFederate(
00481      const char* federateType, const char* fedHostName, DtFederateHandle handle,
00482      unsigned long connHandle, MAKRti::DtInetAddr host, DtHlaVersionId hlaVersion,
00483      MAKRti::DtInetAddr webServerHost, int webServerPort,
00484      const char* federateName = 0);
00485 
00488    virtual DtFederate* createFederate(
00489      const char* federateType, const char* federateName,
00490      const char* fedHostname, DtFederateHandle handle,
00491      unsigned long connHandle, MAKRti::DtInetAddr host,
00492      DtHlaVersionId hlaVersion,
00493      MAKRti::DtInetAddr webServerHost, int webServerPort);
00494 
00496    virtual bool isMember(DtFederateHandle handle) const;
00497 
00500    virtual bool deleteFederate(DtFederateHandle handle);
00501 
00503 
00505    virtual bool processCreateReady();
00506 
00508    virtual void processJoin(unsigned long connID, const DtFedJoinInfo* fedInfo);
00509 
00511    virtual void processJoinReady();
00512 
00514    virtual void destroyDistributor();
00515 
00517    virtual DtAsyncFileDistributorRunnable* distributor() const;
00518 
00524    virtual unsigned int numberFederatesAllowed(unsigned int numPartners) const;
00525  
00527    virtual void resetControl();
00528 
00530    virtual bool tickDistributor();
00531 
00533    virtual bool processEvents();
00534 
00535 protected:
00536 
00537 
00538    DtFedReader * getReader(DtFomType theFomType);
00539    DtFedReader * getReader( DtFomType theFomType, DtFomClassMgr* target);
00540 
00541    void populateWithUnknownFoms(std::vector<DtString> & mods, std::vector<DtString> & requestedMods);
00542    bool isFomAvailable(const DtString & fomName);
00543    bool doesCrcMatchKnownFomModuleCrc( const DtString & fomName, unsigned int myTakenFomCrc );
00544 
00546    virtual bool fedFileReady(const MAKRti::DtString& fileName) const;
00547 
00549    virtual bool fedFilesReady( const std::vector<MAKRti::DtString>* fileNames ) const;
00550 
00552    virtual bool addJoinFomModuleForConnection( unsigned long connId,
00553       const std::vector<MAKRti::DtString>& modulesFromJoinRequest );      
00554 
00556    virtual void removeJoinFomModuleForConnection( unsigned long connID );
00557 
00559 
00561    virtual void tickSaveRestore();
00562 
00565    virtual void tickJoin();
00566 
00569    virtual void tickFederates();
00570    
00573 
00574    virtual void sendSyncPointMsg(
00575       DtSyncMsgType kind, int id,
00576       DtSyncPointStatus status,
00577       const char* name,
00578       RTINAMESPACE::VariableLengthData const* theTag = NULL,
00579       const DtFederateHandleSet* set = NULL,
00580       const DtFederateHandleSet* unsuccessfulSet = NULL);
00581 
00582    virtual void sendResignMsg(
00583       const char* name, DtFederateHandle fedHandle, 
00584       DtResignAction action, DtResignReason reason,
00585       const DtTimeInfo* timeInfo );
00586    virtual void sendEnableDisableNetworkTestingMsg(
00587       const char* name, bool enabled );
00588    virtual void sendTransferRidParamsMsg(
00589       const char* name, DtFederateHandle fedHandle, const DtString& paramString);
00590    virtual void sendJoinResponseMsg(unsigned long destinationIDValue,
00591       unsigned short requestID, unsigned int crcOfFedFile, DtFederateHandle handle, 
00592       const char* federateName, int fedExHandle, const char* fedExName,
00593       const DtString& momModule, const std::vector<MAKRti::DtString>& modules,
00594       unsigned long flags, bool allowNetworkTesting, bool enableNetworkTesting,
00595       DtHlaVersionId hlaVers,
00596       DtJoinResponseMsg::errorCodes errorValue = DtJoinResponseMsg::DT_NO_ERROR,
00597       const DtString& errorString = DtString::nullString());
00598    virtual void sendSaveInitiateMsg(const char* labelVal);
00599    virtual void sendSaveInitiateConstrainedMsg(const char* labelVal);
00600    virtual void sendSaveResponse(DtFederateHandle fedHandle,
00601       unsigned long requestID, const char* labelVal,
00602       DtSaveResponseFlag response);
00603    virtual void sendDesignatedFederate(DtFederateHandle fedHandle);
00604    virtual void sendNameReservedMsg(DtFederateHandle requestingFederate,
00605       char const* objectName, bool result);
00606    virtual void sendMultiNameReservedMsg( DtFederateHandle requestingFederate, 
00607       std::set< std::wstring > const & objectNames,
00608       bool result );
00609 
00610    virtual void sendRestoreStatus(DtFederateHandle requestingFederate,
00611       RTINAMESPACE::FederateRestoreStatusVector const & restoreStatusList);
00612 
00613    virtual void sendSaveStatus(DtFederateHandle requestingFederate,
00614       RTINAMESPACE::FederateHandleSaveStatusPairVector const & saveStatusList);
00615 
00616 #ifdef DtTIME
00617    virtual void sendRegulationEnabledMsg(
00618       DtFederateHandle handle,
00619       DtRtiApiTime const & time);
00620    virtual void sendConstrainedEnabledMsg(
00621       DtFederateHandle handle,
00622       DtRtiApiTime const & time,
00623       DtRtiApiTime const & lbts);
00624    virtual void sendLbtsMsg(DtFederateHandle laggardFederate,
00625       DtRtiApiTime const & lbtsVal,
00626       DtRtiApiTime const & lagLbtsVal);
00627    virtual void sendNerLbtsMsg(
00628       unsigned long nerCycle, DtFederateHandle laggardFederate,
00629       bool nerPending, bool lagNerPending,
00630       DtRtiApiTime const & lbtsVal,
00631       DtRtiApiTime const & lagLbtsVal);
00632    virtual void sendSyncConstrainedMsg();
00633    virtual void sendResumeConstrainedMsg(DtFederateHandle laggardFederate,
00634       DtRtiApiTime const & lbtsVal,
00635       DtRtiApiTime const & lagLbtsVal);
00636    virtual void sendSaveTimeMsg(char const* label,
00637       DtRtiApiTime const & saveTime);
00638 #endif //! DtTIME
00639 
00640 
00643    virtual void retireSyncPoint(const char* name);
00644 
00647    virtual void announceAllSyncPoints(DtFederateHandle hand);
00648 
00650    virtual void checkTimedSave();
00651 
00653    virtual void initiateSave(const char* label);
00654 
00657    virtual bool save( const char* label );
00658 
00660    virtual int  verifyRestore( const char* label );
00661 
00664    virtual bool restore( const char* label );
00665 
00667    virtual void endSave(DtSaveFinishedResult result);
00668 
00670    virtual void endRestore(DtEndRestoreResult restoreResult);
00671 
00674    virtual DtString& getSaveFileName(const char* label, MAKRti::DtString& fileName,
00675       bool extendName=true);
00676 
00679    virtual DtString& getRestoreFileName(const char* label, MAKRti::DtString& fileName);
00680 
00681 #ifdef DtTIME
00682 
00683    virtual void resignFederateTime(DtFederateHandle federateHandle);
00684 
00686    void disableFederateTimeRegulation(DtFederateHandle federateHandle);
00687 
00689    void removeRegulatingEntry(DtTimeInfo* entry);
00690 
00692    virtual void checkPendingConstrained(DtRtiApiTime const & lbts);
00693 
00695    virtual void checkPendingConstrained(DtTimeInfo* entry,
00696       DtRtiApiTime const & lbts);
00697 
00700    virtual bool becomeConstrained(DtTimeInfo* entry);
00701 
00704    void adjustRegulatingEntry(DtTimeInfo* entry,
00705       DtRtiApiTime const & time,
00706       DtRtiApiTimeInterval const & lookahead,
00707       bool isTimeAvailable);
00708 
00710    void checkNerCycle(DtFederateHandle fedHandle);
00711 
00713    virtual void processEnableRegulation(DtFederateHandle federateHandle,
00714       DtRtiApiTime const & time,
00715       DtRtiApiTimeInterval const & lookahead);
00716 
00719    virtual void processPendingRegulation(DtFederateHandle federateHandle,
00720       DtRtiApiTime const & time,
00721       DtRtiApiTimeInterval const & lookahead);
00722 
00724 
00725 
00726 
00727 
00728    virtual DtRtiApiTime& getTempTime();
00730    virtual void putTempTime(DtRtiApiTime& timePtr);
00732    virtual void destroyTempTimePool();
00734 
00736    virtual DtFederateHandle minLbtsFederate() const;
00737 
00739    virtual DtRtiApiTime const & minLbts() const;
00740 
00742    virtual DtRtiApiTime const & lagLbts() const;
00743 
00746    virtual bool minTimeAvailable() const;
00747 
00750    virtual bool lagTimeAvailable() const;
00751 
00753    virtual DtFederateHandle minNerLbtsFederate() const;
00754 
00756    virtual DtRtiApiTime const & minNerLbts() const;
00757 
00759    virtual DtRtiApiTime const & lagNerLbts() const;
00760 
00762    virtual bool minNerPending() const;
00763 
00765    virtual bool lagNerPending() const;
00766 
00768    virtual void setSaveTime(DtRtiApiTime const & timeVal);
00769 
00771    virtual DtRtiApiTime const & saveTime() const;
00772 
00773 #endif
00774 
00777    virtual int getNextFreeFedHandle();
00778 
00779 
00781    DtFedExec();
00782    
00784    DtFedExec(const DtFedExec& orig);
00785    DtFedExec& operator=(DtFedExec const& orig);
00786 
00787 protected:
00788    DtConnectionMgr* myConnectionMgr;
00789    unsigned int myCrcOfFedFile;
00790    int myFreeFedHandle;
00791    bool* myFedHandlesInUse;
00792    DtString myFedExName;
00793    DtFederateHandleInfoMap myFederates;
00794    DtFederateNameInfoMap myFederatesByName;
00795    std::map< MAKRti::DtString, DtFederateHandle > myFederateHdlsByName;
00796    int myNumFederates;
00797    DtSyncHashlist mySyncList;   
00798    DtString myMomModule;
00799    unsigned int myMomModuleCrc;
00800    std::vector<unsigned int> myCreationFedFilesCRCs;
00801    MAKRti::DtFomType myFedType;
00802    std::vector<DtString> myFomModules;
00803    // ! This will be a Map with the keys being a FOM module name, and the value being its CRC.  
00804    // ! This map is populated at create and join
00805    std::map<DtString, unsigned int> myFomModulesNameToCrcMap;
00806    std::set<DtString> myFomModulesSet;
00807    std::vector<DtString> myCreateFomModules;
00808    std::map<unsigned long, const std::vector<DtString>* >myJoinFomModules;
00809    DtFomClassMgr* myFom; 
00810    int myFedExHandle;
00811    DtFederateHandle myDesignatedFederate;
00812    float myFederateTimeoutInterval;
00813 
00814    std::set< unsigned long > myConnectionsProcessJoined;
00815 
00817    std::map<DtFederateHandle, DtFedJoinInfo*> myJoiningFederates;
00818    std::map<unsigned long, DtFedJoinInfo*> myJoiningFederatesByID;
00820    int myNumberResponseAttempts;
00822    float myResponseInterval;
00823 
00824    bool mySave;
00825    bool myRestore;
00826    std::set<DtFederateHandle> myFederateSaveList;
00827    DtFederateHandleStdSet myInitiatedSaveFederates;
00828    DtString mySaveLabel;
00829    DtFederateHandle mySavingFederate;
00830    DtFederateHandleInfoMap myFedRestoreList;
00831    std::map<DtFederateHandle, unsigned long> myRestoreConnectIdMap;
00832    std::map<DtFederateHandle, MAKRti::DtInetAddr> myRestoreHostAddrMap;
00833    DtString mySavePath;
00834    bool mySavePending;
00835    bool mySaveBegun;
00836    //When files are received from distributor, store them here
00838    std::map<DtString, DtFileInformation*> myTakenFiles;
00839 
00840    bool myAwaitingCreateUpload;
00841    unsigned long myCreatorConnId;
00842    std::set< unsigned long> myAwaitingJoinUpload;
00843    bool myFullyCreated;
00844 
00845    int myTimeout;
00846    int myDefaultWait;
00847 
00848    DtList myJoinCallbacks;
00849    DtList myResignCallbacks;
00850    DtList myDisconnectCallbacks;
00851    DtList myReconnectSucceededCallbacks;
00852    DtList myReconnectFailedCallbacks;
00853    DtList myFedSynchronizedCallbacks;
00854    DtList mySpAchievedCallbacks;
00855    DtList mySpRegisterCallbacks;
00856 
00857    typedef std::set<std::string> DtFedExReservedNameSet;
00858    typedef std::map< DtFederateHandle, DtFedExReservedNameSet >
00859       DtFedExFederateReservedNameMap;
00860    DtFedExReservedNameSet myReservedNames;
00861    DtFedExFederateReservedNameMap myFederateReservedNames;
00862 
00863 #ifdef DtTIME
00864    DtLogicalTimeFactory* myLogicalTimeFactory;
00865    DtTimeInfoList myRegulatingFederates;
00866    DtTimeInfoList myConstrainedFederates;
00867    DtTimeInfoList myPendingConstrained;
00868    DtTimeInfoList myPendingTar;
00869    DtTimeInfoList myPendingRegulation;
00870    DtTimeInfoList myNerLbtsList;
00871    DtTimeInfoList myNerRequested;
00872    DtTimeInfoList myNerPending;
00873    bool myNewNerRequestPending;
00874    bool myForceNerCycle;
00875    bool myTransmitLaggardLBTS;
00876    DtList mySyncConstrained;
00877    unsigned long myNerCycle;
00878    DtFederateHandle myNerFederate;
00879    DtList myTempTimePool;
00880    std::auto_ptr<DtRtiApiTime> myPositiveInfinity;
00881    std::auto_ptr<DtRtiApiTime> mySaveTime;
00882    std::auto_ptr<DtRtiApiTime> myNerLbts;
00883    std::auto_ptr<DtRtiApiTime> myLagNerLbts;
00884 #endif //! DtTIME
00885    
00886    vrlmod::DtThreadedObject* myDistributorThread;
00887    DtAsyncFileDistributorRunnable* myDistributor;
00888    static const std::vector<DtString> theEmptyStringSet;
00889    bool myDistributeFedFile;
00890    bool myCrcCheckFedFile;
00891    unsigned long myInitiatorID;
00892    int myStrictNameReservation;
00894    bool myAllowNetworkTesting;
00896    bool myNetworkTestingEnabled;
00897 
00898    DtClock myClock;
00899 
00900    unsigned int myNumberFederatesAllowed;
00901 
00902 protected:
00903 
00904    static DtFedExecCreator theCreator;  
00905    //DtFedReaderFactory myFedReaderFactory;
00906    DtFedReader13 * myFedReader13;
00907    DtFedReader1516 * myFedReader1516;
00908    DtFedReader1516e * myFedReader1516e;
00909 
00910 private:
00911    static const DtString nullStr;
00912    bool myFullFedFileDistribution;
00913 };
00914 
00915 
00916 
00917 #endif //! DtFedExec_H_
00918 

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)