![]() |
MAK RTIspy API Documentation for HLA 1.3
|
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