MAK RTIspy API Documentation for HLA Evolved
timeMgr.h
Go to the documentation of this file.
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 

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)