![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 1998 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: timeMgr.h,v $ $Revision: 1.59 $ $State: Exp $ 00007 *********************************************************************/ 00008 00009 #ifndef timeMgr_H_ 00010 #define timeMgr_H_ 00011 #ifdef DtTIME 00012 00015 00016 #include "rtiApiTypes.h" 00017 #include <vlutil/vlFedTarget.h> 00018 #include <vlutil/vlList.h> 00019 #include "disableMsg.h" 00020 00021 class DtRtiSaveFile; 00022 class DtTimeMgr; 00023 class DtConnectionMgr; 00024 class DtFomClassMgr; 00025 class DtRIDParameters; 00026 class DtFederateMgr; 00027 class DtLogicalTimeFactory; 00028 class DtRtiMsgQueue; 00029 class DtRetractInfoList; 00030 class DtRegulationEnabledMsg; 00031 class DtConstrainedEnabledMsg; 00032 class DtLbtsMsg; 00033 class DtNerLbtsMsg; 00034 class DtSyncConstrainedMsg; 00035 class DtResumeConstrainedMsg; 00036 class DtRetractMsg; 00037 class DtSaveTimeMsg; 00038 class DtSaveInitiateConstrainedMsg; 00039 class DtInitiatedSaveMsg; 00040 00046 class DT_DLL_LRC DtTimeMgr 00047 { 00048 public: 00050 typedef DtTimeMgr* (*DtTimeMgrCreator)(DtFederateMgr* fedMgr); 00051 00052 protected: 00053 00055 DtTimeMgr(DtFederateMgr* fedMgr); 00056 00057 public: 00058 00060 virtual ~DtTimeMgr(); 00061 00062 private: 00063 00065 DtTimeMgr(DtTimeMgr const& ); 00066 00068 DtTimeMgr& operator= (DtTimeMgr const& ); 00069 00070 public: 00071 00073 virtual void preTick(); 00074 00076 virtual void postTick(); 00077 00079 virtual void postJoinInit(); 00080 00082 virtual bool isPostJoined() const; 00083 00086 void testSaveTime(DtRtiApiTime const & timeVal); 00087 00089 bool validTsoSendTime(DtRtiApiTime const & timeVal); 00090 00092 bool validRetractTime(DtRtiApiTime const & timeVal); 00093 00096 virtual void setTime(DtRtiApiTime const & theTime); 00097 virtual DtRtiApiTime const & time() const; 00098 00100 virtual void setLookahead(DtRtiApiTimeInterval const & theInterval); 00101 virtual DtRtiApiTimeInterval const & lookahead() const; 00102 00104 virtual void setLits(DtRtiApiTime const & theTime); 00105 virtual DtRtiApiTime const & lits() const; 00106 virtual DtRtiApiTime const & lots() const; 00107 00109 virtual bool galtIsValid() const; 00110 00112 virtual void setGalt(DtRtiApiTime const & theTime); 00113 virtual DtRtiApiTime const & galt() const; 00114 00116 virtual void setRequestedTime(DtRtiApiTime const & theTime); 00117 virtual DtRtiApiTime const & requestedTime() const; 00118 00120 virtual void setRequestedLookahead( 00121 DtRtiApiTimeInterval const & theInterval); 00122 virtual DtRtiApiTimeInterval const & requestedLookahead() const; 00123 00128 virtual void setWorkingLookahead(DtRtiApiTimeInterval const & theInterval); 00129 virtual DtRtiApiTimeInterval const & workingLookahead() const; 00130 00132 virtual void setPendingGrant(DtRtiApiTime const & theTime); 00133 virtual DtRtiApiTime const & pendingGrant() const; 00134 00136 virtual void setEventTime(DtRtiApiTime const & theTime); 00137 virtual DtRtiApiTime const & eventTime() const; 00138 00141 virtual bool getSaveTime(DtRtiApiTime & saveTimeValue ) const; 00142 virtual void setSaveTime(DtRtiApiTime const & time); 00143 00145 virtual void resetSaveTime(bool completedSuccessfully); 00146 00149 virtual bool getLastSaveTime(DtRtiApiTime & saveTime ) const; 00150 virtual void setLastSaveTime(DtRtiApiTime const & time); 00151 00152 00155 00156 00158 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00159 virtual void enableTimeRegulation(DtRtiApiTimeInterval const & theLookahead); 00160 #else 00161 virtual void enableTimeRegulation( 00162 DtRtiApiTime const & theFederateTime, 00163 DtRtiApiTimeInterval const & theLookahead); 00164 #endif 00165 00167 virtual void disableTimeRegulation(); 00168 00170 virtual void enableTimeConstrained(); 00171 00173 virtual void disableTimeConstrained(); 00174 00176 virtual void timeAdvanceRequest(DtRtiApiTime const & theTime); 00177 00179 virtual void timeAdvanceRequestAvailable(DtRtiApiTime const & theTime); 00180 00182 virtual void nextEventRequest(DtRtiApiTime const & theTime); 00183 00185 virtual void nextEventRequestAvailable(DtRtiApiTime const & theTime); 00186 00188 virtual void flushQueueRequest(DtRtiApiTime const & theTime); 00189 00191 virtual void enableAsynchronousDelivery(); 00192 00194 virtual void disableAsynchronousDelivery(); 00195 00197 virtual bool queryLBTS(DtRtiApiTime& theTime, 00198 bool testForExceptions=true); 00199 00201 virtual bool queryFederateTime(DtRtiApiTime& theTime, 00202 bool testForExceptions=true); 00203 00205 virtual bool queryMinNextEventTime(DtRtiApiTime& theTime, 00206 bool testForExceptions=true); 00207 00209 virtual void modifyLookahead(DtRtiApiTimeInterval const & theLookahead); 00210 00212 virtual bool queryLookahead ( 00213 DtRtiApiTimeInterval& theInterval, 00214 bool testForExceptions=true); 00215 00217 virtual void retract ( 00218 DtMessageRetractionHandle theHandle); 00220 00222 virtual bool save(DtRtiSaveFile& file); 00223 00225 virtual void prepareToRestore(); 00226 00228 virtual bool restore( DtRtiSaveFile& file ); 00229 00231 virtual void saveFinished(); 00232 00235 virtual void postSaveFinished(); 00236 00238 virtual void processSaveInitiate(); 00239 00241 virtual bool timeAdvancing() const; 00242 00244 virtual DtFederateMgr* federateMgr(); 00245 virtual DtFederateMgr* federateMgr() const; 00246 00248 virtual DtConnectionMgr* connectMgr(); 00249 virtual DtConnectionMgr* connectMgr() const; 00250 00252 virtual DtRIDParameters* params(); 00253 virtual DtRIDParameters* params() const; 00254 00256 virtual DtFomClassMgr* fom(); 00257 virtual DtFomClassMgr* fom() const; 00258 00260 virtual unsigned long nextSerialNumber(); 00261 00263 virtual bool isTimeRegulating() const; 00264 virtual bool isTimeConstrained() const; 00265 00267 virtual bool tsoEventWasServiced() const; 00268 virtual void setTsoEventWasServiced(bool eventServiced); 00269 00271 virtual bool timeAvailable() const; 00272 virtual void setTimeAvailable(bool isTimeAvailable); 00273 00274 public: 00275 00279 static DtTimeMgr* create(DtFederateMgr* fedMgr); 00280 00283 static void setCreatorFunction(DtTimeMgrCreator creator); 00284 00285 protected: 00286 00289 00290 00292 virtual void sendEnableTimeRegulationMsg(DtRtiApiTime const & theTime, 00293 DtRtiApiTimeInterval const & theLookahead); 00294 00296 virtual void sendEnableTimeConstrainedMsg(DtRtiApiTime const & theTime, 00297 DtRtiApiTimeInterval const & theLookahead); 00298 00300 virtual void sendTimeAdvanceRequestMsg(DtRtiApiTime const & theTime, 00301 DtRtiApiTimeInterval const & theLookahead); 00302 00304 virtual void sendConstrainedSyncMsg(DtRtiApiTime const & theTime, 00305 DtRtiApiTimeInterval const & theLookahead); 00306 00308 virtual void sendNextEventRequestMsg(DtRtiApiTime const & nerTime, 00309 DtRtiApiTimeInterval const & nerLookahead, bool isTimeAvailable, 00310 unsigned long nerCycle); 00311 00313 virtual void sendDisableMsg(DtTimeServiceType type); 00314 00316 virtual void sendRetractMsg(const unsigned long serialNumberVal); 00317 00319 virtual void sendSaveTimeAdvanceMsg(); 00320 00322 virtual void sendInitiatedSaveMsg(); 00324 00325 00330 virtual bool advanceTime(DtRtiApiTime const & newTime); 00331 00333 virtual void invokeGrant(DtRtiApiTime const & newTime); 00334 00336 virtual void setTimeAdvancing(bool isAdvancing); 00337 00342 virtual void adjustZeroLookahead(bool forceAdjust=false); 00343 00347 virtual void resetZeroLookahead(); 00348 00353 void reduceLookahead(DtRtiApiTime const & requestTime); 00354 00356 void commitLookaheadModifcation(); 00357 00359 virtual bool canGrantImmediately(DtRtiApiTime const & theTime); 00360 00362 virtual bool timeForSave(DtRtiApiTime const & requestTime); 00363 00366 bool canGrantImmediately(DtRtiApiTime const & timeVal, 00367 DtRtiApiTime const & galtVal); 00368 00371 bool canDeliverImmediately(DtRtiApiTime const & timeVal, 00372 DtRtiApiTime const & galtVal); 00373 00375 virtual void checkGalt(bool sendLbtsMsg); 00376 00378 virtual void checkTimedSave(); 00379 00384 virtual bool checkMsgQueue(DtRtiApiTime const & timeUpperBound, 00385 DtRtiApiTime & minimumTimestamp); 00386 00390 00391 virtual bool checkMsgQueue(DtRtiApiTime const & timeUpperBound); 00392 00399 virtual void processNextTsoEvents( 00400 DtRtiApiTime const & timeUpperBound, DtRtiApiTime& msgTime, 00401 DtRtiApiTime const & galtVal); 00402 00405 virtual void flushMsgQueue(DtRtiApiTime const & requestTime); 00406 00408 virtual void checkTimeAdvanceRequest(); 00409 00410 00415 virtual void checkNextEventRequest(DtRtiApiTime const & galtVal, 00416 bool sendNerMsg); 00417 00421 00422 00424 virtual void processRegulationEnabled(const DtRegulationEnabledMsg& msg); 00425 00427 virtual void processConstrainedEnabled(const DtConstrainedEnabledMsg& msg); 00428 00430 virtual void processLbts(const DtLbtsMsg& msg); 00431 00433 virtual void processNerLbts(const DtNerLbtsMsg& msg); 00434 00436 virtual void processSyncConstrained(const DtSyncConstrainedMsg& msg); 00437 00439 virtual void processResumeConstrained(const DtResumeConstrainedMsg& msg); 00440 00442 virtual void processRetract(const DtRetractMsg& msg); 00443 00445 virtual void processSaveTime(const DtSaveTimeMsg& msg); 00446 00448 virtual void processSaveInitiateConstrained(const DtSaveInitiateConstrainedMsg& msg); 00450 00453 void processLbts(DtFederateHandle laggardFederate, 00454 DtRtiApiTime const & lbts, DtRtiApiTime const & lagLbts); 00455 00457 virtual int sizeNeededForVariant(); 00458 00462 virtual DtRtiApiTime& getTempTime(); 00463 virtual void putTempTime(DtRtiApiTime& timePtr); 00464 00466 virtual void destroyTempTimePool(); 00467 00468 protected: 00469 00473 00474 00476 static void processRegulationEnabled(const DtRegulationEnabledMsg& msg, void* usr); 00477 00479 static void processConstrainedEnabled(const DtConstrainedEnabledMsg& msg, void* usr); 00480 00482 static void processLbts(const DtLbtsMsg& msg, void* usr); 00483 00485 static void processNerLbts(const DtNerLbtsMsg& msg, void* usr); 00486 00488 static void processSyncConstrained(const DtSyncConstrainedMsg& msg, void* usr); 00489 00491 static void processResumeConstrained(const DtResumeConstrainedMsg& msg, void* usr); 00492 00494 static void processRetract(const DtRetractMsg& msg, void* usr); 00495 00497 static void processSaveTime(const DtSaveTimeMsg& msg, void* usr); 00498 00500 static void processSaveInitiateConstrained(const DtSaveInitiateConstrainedMsg& msg, void* usr); 00502 00503 protected: 00504 00506 DtFederateMgr* myFederateMgr; 00507 00509 bool myIsJoined; 00510 00512 DtRtiMsgQueue* myMsgQueue; 00513 00515 DtLogicalTimeFactory* myLogicalTimeFactory; 00516 00518 bool myGaltIsValid; 00519 00521 bool myLastSaveTimeIsValid; 00522 00525 00526 00528 std::auto_ptr <DtRtiApiTime> myLits; 00529 00531 std::auto_ptr <DtRtiApiTime> myLots; 00532 00534 std::auto_ptr <DtRtiApiTime> myGalt; 00535 00537 std::auto_ptr <DtRtiApiTime> myFederateTime; 00538 00540 std::auto_ptr <DtRtiApiTimeInterval> myLookahead; 00541 00543 std::auto_ptr <DtRtiApiTime> myRequestedTime; 00544 00546 std::auto_ptr <DtRtiApiTimeInterval> myRequestedLookahead; 00547 00550 std::auto_ptr <DtRtiApiTime> myEventTime; 00551 00554 std::auto_ptr <DtRtiApiTimeInterval> myWorkingLookahead; 00555 00568 std::auto_ptr <DtRtiApiTime> myPendingGrantTime; 00569 00571 std::auto_ptr <DtRtiApiTime> mySaveTime; 00572 00574 std::auto_ptr <DtRtiApiTime> myLastSaveTime; 00576 00577 bool myEventWasDelivered; 00578 00579 bool myIncludeEventTime; 00580 00583 unsigned long myNerCycle; 00584 00586 bool myPendingGrant; 00587 00589 bool myInterruptedNextEvent; 00590 00592 00593 bool myTimeConstrainedEnabled; 00594 bool myTimeRegulatingEnabled; 00595 bool myEnableTimeRegulationPending; 00596 bool myEnableTimeConstrainedPending; 00597 bool myPendingConstrainedSync; 00599 00601 00602 bool myCheckGalt; 00603 bool myRequestingTimeAdvance; 00604 bool myRequestingNextEvent; 00605 bool myFlushQueue; 00606 bool myAdvancingTime; 00607 bool myTsoEventWasServiced; 00609 00611 00612 bool myTimeAvailable; 00613 bool myAdjustedLookahead; 00614 bool myAdjustedWorkingLookahead; 00615 bool myModifyingLookahead; 00616 bool myNeraRemovedLookaheadAdjustment; 00617 bool myAdvanceWillReduceLookahead; 00619 00621 00622 bool mySaveTimePending; 00623 bool mySaveTimeAdvancedPending; 00624 bool mySavePending; 00625 bool mySaveTimeIsReady; 00626 bool myPostSavePending; 00627 bool myPostSaveTimePending; 00628 bool myInitateSaveReady; 00630 00632 MAKRti::DtString mySaveTimeLabel; 00633 00635 unsigned long mySerialNumber; 00636 00638 DtRetractInfoList* myRetractList; 00639 00641 MAKRti::DtList myTempTimePool; 00642 00643 protected: 00644 00646 static DtTimeMgrCreator theCreator; 00647 }; 00648 00649 #endif 00650 #endif 00651 00652 00653 00654