17 #include <vlutil/vlFedTarget.h>
18 #include <vlutil/vlList.h>
31 class DtRegulationEnabledMsg;
32 class DtConstrainedEnabledMsg;
35 class DtSyncConstrainedMsg;
36 class DtResumeConstrainedMsg;
51 typedef DtTimeMgr* (*DtTimeMgrCreator)(
DtFederateMgr* fedMgr);
66 DtTimeMgr(DtTimeMgr
const& );
69 DtTimeMgr& operator= (DtTimeMgr
const& );
74 virtual void preTick();
77 virtual void postTick();
80 virtual void postJoinInit();
83 virtual bool isPostJoined()
const;
110 virtual bool galtIsValid()
const;
117 virtual void setFederationLbts(
DtRtiApiTime const & theTime);
121 virtual void setRequestedTime(
DtRtiApiTime const & theTime);
125 virtual void setRequestedLookahead(
137 virtual void setPendingGrant(
DtRtiApiTime const & theTime);
141 virtual void setEventTime(
DtRtiApiTime const & theTime);
146 virtual bool getSaveTime(
DtRtiApiTime & saveTimeValue )
const;
150 virtual void resetSaveTime(
bool completedSuccessfully);
154 virtual bool getLastSaveTime(
DtRtiApiTime & saveTime )
const;
155 virtual void setLastSaveTime(
DtRtiApiTime const & time);
163 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
203 bool testForExceptions=
true);
207 bool testForExceptions=
true);
211 bool testForExceptions=
true);
219 bool testForExceptions=
true);
230 virtual void prepareToRestore();
236 virtual void saveFinished();
240 virtual void postSaveFinished();
243 virtual void processSaveInitiate();
246 virtual bool timeAdvancing()
const;
265 virtual unsigned long nextSerialNumber();
268 virtual bool isTimeRegulating()
const;
269 virtual bool isTimeConstrained()
const;
272 virtual bool tsoEventWasServiced()
const;
273 virtual void setTsoEventWasServiced(
bool eventServiced);
276 virtual bool timeAvailable()
const;
287 static void setCreatorFunction(DtTimeMgrCreator creator);
293 enum DtTimeAvailableState
296 DtTimeNotAvailable = 0,
299 DtTimeNotAvailableAndNotAdvancingAvailable,
300 DtTimeNotAvailableAndAdvancingAvailable,
301 DtTimeAvailableAndNotAdvancingAvailable,
302 DtTimeAvailableAndAdvancingAvailable
310 virtual void sendEnableTimeRegulationMsg(
DtRtiApiTime const & theTime,
314 virtual void sendEnableTimeConstrainedMsg(
DtRtiApiTime const & theTime,
318 virtual void sendTimeAdvanceRequestMsg(
DtRtiApiTime const & theTime,
322 virtual void sendConstrainedSyncMsg(
DtRtiApiTime const & theTime,
326 virtual void sendNextEventRequestMsg(
DtRtiApiTime const & nerTime,
328 unsigned long nerCycle);
331 virtual void sendDisableMsg(DtTimeServiceType type);
334 virtual void sendRetractMsg(
const unsigned long serialNumberVal);
337 virtual void sendSaveTimeAdvanceMsg();
340 virtual void sendInitiatedSaveMsg();
354 virtual void setTimeAdvancing(
bool isAdvancing);
357 virtual void setTimeAvailableState(DtTimeAvailableState timeAvailableState);
360 virtual DtTimeAvailableState timeAvailableState()
const;
366 virtual void adjustZeroLookahead(
bool forceAdjust=
false);
371 virtual void resetZeroLookahead();
380 void commitLookaheadModifcation();
383 virtual bool canGrantImmediately(
DtRtiApiTime const & theTime);
386 virtual bool timeForSave(
DtRtiApiTime const & requestTime);
395 bool canDeliverImmediately(
DtRtiApiTime const & timeVal,
399 virtual void checkGalt(
bool sendLbtsMsg);
402 virtual void checkTimedSave();
408 virtual bool checkMsgQueue(
DtRtiApiTime const & timeUpperBound,
415 virtual bool checkMsgQueue(
DtRtiApiTime const & timeUpperBound);
423 virtual void processNextTsoEvents(
429 virtual void flushMsgQueue(
DtRtiApiTime const & requestTime);
432 virtual void checkTimeAdvanceRequest();
436 virtual void checkNextEventRequest();
439 virtual void sendNerMessage();
447 virtual void processRegulationEnabled(
const DtRegulationEnabledMsg& msg);
450 virtual void processConstrainedEnabled(
const DtConstrainedEnabledMsg& msg);
453 virtual void processLbts(
const DtLbtsMsg& msg);
456 virtual void processNerLbts(
const DtNerLbtsMsg& msg);
459 virtual void processSyncConstrained(
const DtSyncConstrainedMsg& msg);
462 virtual void processResumeConstrained(
const DtResumeConstrainedMsg& msg);
465 virtual void processRetract(
const DtRetractMsg& msg);
480 virtual int sizeNeededForVariant();
489 virtual void destroyTempTimePool();
499 static void processRegulationEnabled(
const DtRegulationEnabledMsg& msg,
void* usr);
502 static void processConstrainedEnabled(
const DtConstrainedEnabledMsg& msg,
void* usr);
505 static void processLbts(
const DtLbtsMsg& msg,
void* usr);
508 static void processNerLbts(
const DtNerLbtsMsg& msg,
void* usr);
511 static void processSyncConstrained(
const DtSyncConstrainedMsg& msg,
void* usr);
514 static void processResumeConstrained(
const DtResumeConstrainedMsg& msg,
void* usr);
517 static void processRetract(
const DtRetractMsg& msg,
void* usr);
520 static void processSaveTime(
const DtSaveTimeMsg& msg,
void* usr);
544 bool myLastSaveTimeIsValid;
551 std::auto_ptr <DtRtiApiTime> myLits;
554 std::auto_ptr <DtRtiApiTime> myLots;
557 std::auto_ptr <DtRtiApiTime> myGalt;
558 bool myLbtsIsFromNer;
561 std::auto_ptr <DtRtiApiTime> myFederationLbts;
564 std::auto_ptr <DtRtiApiTime> myFederateTime;
567 std::auto_ptr <DtRtiApiTimeInterval> myLookahead;
570 std::auto_ptr <DtRtiApiTime> myRequestedTime;
573 std::auto_ptr <DtRtiApiTimeInterval> myRequestedLookahead;
577 std::auto_ptr <DtRtiApiTime> myEventTime;
581 std::auto_ptr <DtRtiApiTimeInterval> myWorkingLookahead;
595 std::auto_ptr <DtRtiApiTime> myPendingGrantTime;
598 std::auto_ptr <DtRtiApiTime> mySaveTime;
601 std::auto_ptr <DtRtiApiTime> myLastSaveTime;
605 bool myEventWasDelivered;
608 bool myIncludeEventTime;
612 unsigned long myNerCycle;
618 bool myInterruptedNextEvent;
622 bool myTimeConstrainedEnabled;
623 bool myTimeRegulatingEnabled;
624 bool myEnableTimeRegulationPending;
625 bool myEnableTimeConstrainedPending;
626 bool myPendingConstrainedSync;
632 bool myRequestingTimeAdvance;
633 bool myRequestingNextEvent;
635 bool myAdvancingTime;
636 bool myTsoEventWasServiced;
641 DtTimeAvailableState myTimeAvailableState;
642 bool myAdjustedLookahead;
643 bool myAdjustedWorkingLookahead;
644 bool myModifyingLookahead;
645 bool myNeraRemovedLookaheadAdjustment;
646 bool myAdvanceWillReduceLookahead;
651 bool mySaveTimePending;
652 bool mySaveTimeAdvancedPending;
654 bool mySaveTimeIsReady;
655 bool myPostSavePending;
656 bool myPostSaveTimePending;
657 bool myInitateSaveReady;
661 MAKRti::DtString mySaveTimeLabel;
664 unsigned long mySerialNumber;
670 std::queue<DtRtiApiTime*> myTempTimePool;
676 static DtTimeMgrCreator theCreator;