MAK RTIspy API Documentation for HLA Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
timeMgr.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1998 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 /*********************************************************************
6 ** $RCSfile: timeMgr.h,v $ $Revision: 1.59 $ $State: Exp $
7 *********************************************************************/
8 
9 #ifndef timeMgr_H_
10 #define timeMgr_H_
11 #ifdef DtTIME
12 
15 
16 #include "rtiApiTypes.h"
17 #include <vlutil/vlFedTarget.h>
18 #include <vlutil/vlList.h>
19 #include "disableMsg.h"
20 #include <queue>
21 
22 class DtRtiSaveFile;
23 class DtTimeMgr;
24 class DtConnectionMgr;
25 class DtFomClassMgr;
26 class DtRIDParameters;
27 class DtFederateMgr;
29 class DtRtiMsgQueue;
30 class DtRetractInfoList;
31 class DtRegulationEnabledMsg;
32 class DtConstrainedEnabledMsg;
33 class DtLbtsMsg;
34 class DtNerLbtsMsg;
35 class DtSyncConstrainedMsg;
36 class DtResumeConstrainedMsg;
37 class DtRetractMsg;
38 class DtSaveTimeMsg;
40 class DtInitiatedSaveMsg;
41 
47 class DT_DLL_LRC DtTimeMgr
48 {
49 public:
51  typedef DtTimeMgr* (*DtTimeMgrCreator)(DtFederateMgr* fedMgr);
52 
53 protected:
54 
56  DtTimeMgr(DtFederateMgr* fedMgr);
57 
58 public:
59 
61  virtual ~DtTimeMgr();
62 
63 private:
64 
66  DtTimeMgr(DtTimeMgr const& );
67 
69  DtTimeMgr& operator= (DtTimeMgr const& );
70 
71 public:
72 
74  virtual void preTick();
75 
77  virtual void postTick();
78 
80  virtual void postJoinInit();
81 
83  virtual bool isPostJoined() const;
84 
87  void testSaveTime(DtRtiApiTime const & timeVal);
88 
90  bool validTsoSendTime(DtRtiApiTime const & timeVal);
91 
93  bool validRetractTime(DtRtiApiTime const & timeVal);
94 
97  virtual void setTime(DtRtiApiTime const & theTime);
98  virtual DtRtiApiTime const & time() const;
99 
101  virtual void setLookahead(DtRtiApiTimeInterval const & theInterval);
102  virtual DtRtiApiTimeInterval const & lookahead() const;
103 
105  virtual void setLits(DtRtiApiTime const & theTime);
106  virtual DtRtiApiTime const & lits() const;
107  virtual DtRtiApiTime const & lots() const;
108 
110  virtual bool galtIsValid() const;
111 
113  virtual void setGalt(DtRtiApiTime const & theTime);
114  virtual DtRtiApiTime const & galt() const;
115 
117  virtual void setFederationLbts(DtRtiApiTime const & theTime);
118  virtual DtRtiApiTime const & federationLbts() const;
119 
121  virtual void setRequestedTime(DtRtiApiTime const & theTime);
122  virtual DtRtiApiTime const & requestedTime() const;
123 
125  virtual void setRequestedLookahead(
126  DtRtiApiTimeInterval const & theInterval);
127  virtual DtRtiApiTimeInterval const & requestedLookahead() const;
128 
133  virtual void setWorkingLookahead(DtRtiApiTimeInterval const & theInterval);
134  virtual DtRtiApiTimeInterval const & workingLookahead() const;
135 
137  virtual void setPendingGrant(DtRtiApiTime const & theTime);
138  virtual DtRtiApiTime const & pendingGrant() const;
139 
141  virtual void setEventTime(DtRtiApiTime const & theTime);
142  virtual DtRtiApiTime const & eventTime() const;
143 
146  virtual bool getSaveTime(DtRtiApiTime & saveTimeValue ) const;
147  virtual void setSaveTime(DtRtiApiTime const & time);
148 
150  virtual void resetSaveTime(bool completedSuccessfully);
151 
154  virtual bool getLastSaveTime(DtRtiApiTime & saveTime ) const;
155  virtual void setLastSaveTime(DtRtiApiTime const & time);
156 
157 
160 
161 
163 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
164  virtual void enableTimeRegulation(DtRtiApiTimeInterval const & theLookahead);
165 #else
166  virtual void enableTimeRegulation(
167  DtRtiApiTime const & theFederateTime,
168  DtRtiApiTimeInterval const & theLookahead);
169 #endif
170 
172  virtual void disableTimeRegulation();
173 
175  virtual void enableTimeConstrained();
176 
178  virtual void disableTimeConstrained();
179 
181  virtual void timeAdvanceRequest(DtRtiApiTime const & theTime);
182 
184  virtual void timeAdvanceRequestAvailable(DtRtiApiTime const & theTime);
185 
187  virtual void nextEventRequest(DtRtiApiTime const & theTime);
188 
190  virtual void nextEventRequestAvailable(DtRtiApiTime const & theTime);
191 
193  virtual void flushQueueRequest(DtRtiApiTime const & theTime);
194 
196  virtual void enableAsynchronousDelivery();
197 
199  virtual void disableAsynchronousDelivery();
200 
202  virtual bool queryLBTS(DtRtiApiTime& theTime,
203  bool testForExceptions=true);
204 
206  virtual bool queryFederateTime(DtRtiApiTime& theTime,
207  bool testForExceptions=true);
208 
210  virtual bool queryMinNextEventTime(DtRtiApiTime& theTime,
211  bool testForExceptions=true);
212 
214  virtual void modifyLookahead(DtRtiApiTimeInterval const & theLookahead);
215 
217  virtual bool queryLookahead (
218  DtRtiApiTimeInterval& theInterval,
219  bool testForExceptions=true);
220 
222  virtual void retract (
223  DtMessageRetractionHandle theHandle);
225 
227  virtual bool save(DtRtiSaveFile& file);
228 
230  virtual void prepareToRestore();
231 
233  virtual bool restore( DtRtiSaveFile& file );
234 
236  virtual void saveFinished();
237 
240  virtual void postSaveFinished();
241 
243  virtual void processSaveInitiate();
244 
246  virtual bool timeAdvancing() const;
247 
249  virtual DtFederateMgr* federateMgr();
250  virtual DtFederateMgr* federateMgr() const;
251 
253  virtual DtConnectionMgr* connectMgr();
254  virtual DtConnectionMgr* connectMgr() const;
255 
257  virtual DtRIDParameters* params();
258  virtual DtRIDParameters* params() const;
259 
261  virtual DtFomClassMgr* fom();
262  virtual DtFomClassMgr* fom() const;
263 
265  virtual unsigned long nextSerialNumber();
266 
268  virtual bool isTimeRegulating() const;
269  virtual bool isTimeConstrained() const;
270 
272  virtual bool tsoEventWasServiced() const;
273  virtual void setTsoEventWasServiced(bool eventServiced);
274 
276  virtual bool timeAvailable() const;
277 
278 public:
279 
283  static DtTimeMgr* create(DtFederateMgr* fedMgr);
284 
287  static void setCreatorFunction(DtTimeMgrCreator creator);
288 
289 protected:
290 
291  // Time advancing state relies on the state of 2 variables
292  // but to support save/restore backwards compatibility they are merged into one enum
293  enum DtTimeAvailableState
294  {
295  // The old state values
296  DtTimeNotAvailable = 0,
297  DtTimeAvailable,
298  // The new state values
299  DtTimeNotAvailableAndNotAdvancingAvailable,
300  DtTimeNotAvailableAndAdvancingAvailable,
301  DtTimeAvailableAndNotAdvancingAvailable,
302  DtTimeAvailableAndAdvancingAvailable
303  };
304 
307 
308 
310  virtual void sendEnableTimeRegulationMsg(DtRtiApiTime const & theTime,
311  DtRtiApiTimeInterval const & theLookahead);
312 
314  virtual void sendEnableTimeConstrainedMsg(DtRtiApiTime const & theTime,
315  DtRtiApiTimeInterval const & theLookahead);
316 
318  virtual void sendTimeAdvanceRequestMsg(DtRtiApiTime const & theTime,
319  DtRtiApiTimeInterval const & theLookahead);
320 
322  virtual void sendConstrainedSyncMsg(DtRtiApiTime const & theTime,
323  DtRtiApiTimeInterval const & theLookahead);
324 
326  virtual void sendNextEventRequestMsg(DtRtiApiTime const & nerTime,
327  DtRtiApiTimeInterval const & nerLookahead, bool isWaitingForEvent, bool isTimeAvailable,
328  unsigned long nerCycle);
329 
331  virtual void sendDisableMsg(DtTimeServiceType type);
332 
334  virtual void sendRetractMsg(const unsigned long serialNumberVal);
335 
337  virtual void sendSaveTimeAdvanceMsg();
338 
340  virtual void sendInitiatedSaveMsg();
342 
343 
348  virtual bool advanceTime(DtRtiApiTime const & newTime);
349 
351  virtual void invokeGrant(DtRtiApiTime const & newTime);
352 
354  virtual void setTimeAdvancing(bool isAdvancing);
355 
357  virtual void setTimeAvailableState(DtTimeAvailableState timeAvailableState);
358 
360  virtual DtTimeAvailableState timeAvailableState() const;
361 
366  virtual void adjustZeroLookahead(bool forceAdjust=false);
367 
371  virtual void resetZeroLookahead();
372 
377  void reduceLookahead(DtRtiApiTime const & requestTime);
378 
380  void commitLookaheadModifcation();
381 
383  virtual bool canGrantImmediately(DtRtiApiTime const & theTime);
384 
386  virtual bool timeForSave(DtRtiApiTime const & requestTime);
387 
390  bool canGrantImmediately(DtRtiApiTime const & timeVal,
391  DtRtiApiTime const & galtVal);
392 
395  bool canDeliverImmediately(DtRtiApiTime const & timeVal,
396  DtRtiApiTime const & galtVal);
397 
399  virtual void checkGalt(bool sendLbtsMsg);
400 
402  virtual void checkTimedSave();
403 
408  virtual bool checkMsgQueue(DtRtiApiTime const & timeUpperBound,
409  DtRtiApiTime & minimumTimestamp);
410 
414 
415  virtual bool checkMsgQueue(DtRtiApiTime const & timeUpperBound);
416 
423  virtual void processNextTsoEvents(
424  DtRtiApiTime const & timeUpperBound, DtRtiApiTime& msgTime,
425  DtRtiApiTime const & galtVal);
426 
429  virtual void flushMsgQueue(DtRtiApiTime const & requestTime);
430 
432  virtual void checkTimeAdvanceRequest();
433 
434 
436  virtual void checkNextEventRequest();
437 
439  virtual void sendNerMessage();
440 
444 
445 
447  virtual void processRegulationEnabled(const DtRegulationEnabledMsg& msg);
448 
450  virtual void processConstrainedEnabled(const DtConstrainedEnabledMsg& msg);
451 
453  virtual void processLbts(const DtLbtsMsg& msg);
454 
456  virtual void processNerLbts(const DtNerLbtsMsg& msg);
457 
459  virtual void processSyncConstrained(const DtSyncConstrainedMsg& msg);
460 
462  virtual void processResumeConstrained(const DtResumeConstrainedMsg& msg);
463 
465  virtual void processRetract(const DtRetractMsg& msg);
466 
468  virtual void processSaveTime(const DtSaveTimeMsg& msg);
469 
471  virtual void processSaveInitiateConstrained(const DtSaveInitiateConstrainedMsg& msg);
473 
476  void processLbts(DtFederateHandle laggardFederate,
477  DtRtiApiTime const & lbts, DtRtiApiTime const & lagLbts);
478 
480  virtual int sizeNeededForVariant();
481 
485  virtual DtRtiApiTime& getTempTime();
486  virtual void putTempTime(DtRtiApiTime& timePtr);
487 
489  virtual void destroyTempTimePool();
490 
491 protected:
492 
496 
497 
499  static void processRegulationEnabled(const DtRegulationEnabledMsg& msg, void* usr);
500 
502  static void processConstrainedEnabled(const DtConstrainedEnabledMsg& msg, void* usr);
503 
505  static void processLbts(const DtLbtsMsg& msg, void* usr);
506 
508  static void processNerLbts(const DtNerLbtsMsg& msg, void* usr);
509 
511  static void processSyncConstrained(const DtSyncConstrainedMsg& msg, void* usr);
512 
514  static void processResumeConstrained(const DtResumeConstrainedMsg& msg, void* usr);
515 
517  static void processRetract(const DtRetractMsg& msg, void* usr);
518 
520  static void processSaveTime(const DtSaveTimeMsg& msg, void* usr);
521 
523  static void processSaveInitiateConstrained(const DtSaveInitiateConstrainedMsg& msg, void* usr);
525 
526 protected:
527 
529  DtFederateMgr* myFederateMgr;
530 
532  bool myIsJoined;
533 
535  DtRtiMsgQueue* myMsgQueue;
536 
538  DtLogicalTimeFactory* myLogicalTimeFactory;
539 
541  bool myGaltIsValid;
542 
544  bool myLastSaveTimeIsValid;
545 
548 
549 
551  std::auto_ptr <DtRtiApiTime> myLits;
552 
554  std::auto_ptr <DtRtiApiTime> myLots;
555 
557  std::auto_ptr <DtRtiApiTime> myGalt;
558 
560  std::auto_ptr <DtRtiApiTime> myFederationLbts;
561 
563  std::auto_ptr <DtRtiApiTime> myFederateTime;
564 
566  std::auto_ptr <DtRtiApiTimeInterval> myLookahead;
567 
569  std::auto_ptr <DtRtiApiTime> myRequestedTime;
570 
572  std::auto_ptr <DtRtiApiTimeInterval> myRequestedLookahead;
573 
576  std::auto_ptr <DtRtiApiTime> myEventTime;
577 
580  std::auto_ptr <DtRtiApiTimeInterval> myWorkingLookahead;
581 
594  std::auto_ptr <DtRtiApiTime> myPendingGrantTime;
595 
597  std::auto_ptr <DtRtiApiTime> mySaveTime;
598 
600  std::auto_ptr <DtRtiApiTime> myLastSaveTime;
602 
604  bool myEventWasDelivered;
605 
607  bool myIncludeEventTime;
608 
611  unsigned long myNerCycle;
612 
614  bool myPendingGrant;
615 
617  bool myInterruptedNextEvent;
618 
620 
621  bool myTimeConstrainedEnabled;
622  bool myTimeRegulatingEnabled;
623  bool myEnableTimeRegulationPending;
624  bool myEnableTimeConstrainedPending;
625  bool myPendingConstrainedSync;
627 
629 
630  bool myCheckGalt;
631  bool myRequestingTimeAdvance;
632  bool myRequestingNextEvent;
633  bool myFlushQueue;
634  bool myAdvancingTime;
635  bool myTsoEventWasServiced;
637 
639 
640  DtTimeAvailableState myTimeAvailableState;
641  bool myAdjustedLookahead;
642  bool myAdjustedWorkingLookahead;
643  bool myModifyingLookahead;
644  bool myNeraRemovedLookaheadAdjustment;
645  bool myAdvanceWillReduceLookahead;
647 
649 
650  bool mySaveTimePending;
651  bool mySaveTimeAdvancedPending;
652  bool mySavePending;
653  bool mySaveTimeIsReady;
654  bool myPostSavePending;
655  bool myPostSaveTimePending;
656  bool myInitateSaveReady;
658 
660  MAKRti::DtString mySaveTimeLabel;
661 
663  unsigned long mySerialNumber;
664 
666  DtRetractInfoList* myRetractList;
667 
669  std::queue<DtRtiApiTime*> myTempTimePool;
670  // MAKRti::DtList myTempTimePool;
671 
672 protected:
673 
675  static DtTimeMgrCreator theCreator;
676 };
677 
678 #endif
679 #endif
680 
681 
682 
683 

Document ID: Generated on Mon Mar 21 09:41:37 EDT 2016 from SVN revision 163228
Copyright © 2005-2015 VT MÄK Inc. All Rights Reserved (www.mak.com)