MAK RTIspy API Documentation for HLA 1.3
testManager.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2008 VT MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: testManager.h,v $ $Revision: 1.17 $ $State: Exp $
00007 *******************************************************************************/
00008 
00012 
00013 #ifndef DtTestManager_H_
00014 #define DtTestManager_H_
00015 
00016 
00017 #include "rtiMsConfig.h"
00018 #include <vlutil/vlString.h>
00019 #include <vlutil/vlTime.h>
00020 #include <vlutil/vlFedTarget.h>
00021 #include <vlutil/vlMutex.h>
00022 #include <metadata.h>
00023 #include <vector>
00024 #include <list>
00025 
00026 #ifdef DtIFSPEC1516
00027 #include "RTI/RTIambassador.h"
00028 #include "RTI/LogicalTimeFactory.h"
00029 #include "RTI/Enums.h"
00030 using namespace rti1516;
00031 #elif defined(DtIFSPEC1516E)
00032 #include "RTI/RTIambassador.h"
00033 #include "RTI/LogicalTimeFactory.h"
00034 #include "RTI/Enums.h"
00035 using namespace rti1516e;
00036 #else
00037 #ifdef DtIFSPEC13DLC
00038 #include "RTI13.h"
00039 #define RTI rti13
00040 #else
00041 #include "RTI.hh"
00042 #endif
00043 #endif
00044 
00045 class DtFederateMgr;
00046 class DtConnectionMgr;
00047 class DtLatencyTestInteraction;
00048 class DtRIDParameters;
00049 class DtInteractionMsg;
00050 class DtPhvps;
00051 class DtSubInterMsg;
00052 class DtUnsubInterMsg;
00053 class DtAssistantChangeLatencyTestModeMsg;
00054 class DtChangeLatencyTestModeMsg;
00055 class DtRecipientLatencyTest;
00056 class DtTestMgrFedAmbWrapper;
00057 class DtInitiatorLatencyTest;
00058 class DtResignMsg;
00059 
00060 
00061 
00062 
00065 
00066 class DT_DLL_LRC DtTestManager
00067 {
00068 protected:
00069 
00070    typedef enum DtInitiatorByType_e { DtInitiatedByExec, DtInitiatedByAssistant } DtInitiatorByType;
00071    typedef std::multimap<DtMetadataType, MAKRti::DtTime> DtTimeStampMap;
00072    typedef std::map<unsigned int, DtTimeStampMap > DtTestToTimeStampMap;   
00073    
00074    struct DtTrialDetails
00075    {
00076        DtTrialDetails() :
00077        trialID(0),
00078        federateHandle(0),
00079        initiatorType (DtInitiatedByAssistant),
00080        numInteractions(0),
00081        payLoadSize(0),
00082        period(.1),
00083        continuous(false)
00084        { };
00085 
00086       unsigned int trialID;
00087       unsigned int federateHandle;
00088       DtInitiatorByType initiatorType;
00089       unsigned int numInteractions;
00090       unsigned int payLoadSize;
00091       MAKRti::DtTime period;
00092       bool continuous;
00093    };
00094 
00095 public:
00096 
00098    DtTestManager(bool initiallyEnabled);
00099 
00101    DtTestManager(DtFederateMgr* fedMgr, bool initiallyEnabled);
00102 
00104    virtual ~DtTestManager();
00105 
00106 
00108    DtRIDParameters* params();
00109 
00111    DtRIDParameters* params() const;
00112 
00114    DtFederateMgr* fedMgr();
00115 
00117    DtFederateMgr* fedMgr() const;
00118 
00119 #ifdef DtIFSPEC1516
00120 
00121    rti1516::RTIambassador* rtiAmb();
00122 
00124    rti1516::RTIambassador* rtiAmb() const;
00125 #elif defined(DtIFSPEC1516E)
00126 
00127    rti1516e::RTIambassador* rtiAmb();
00128 
00130    rti1516e::RTIambassador* rtiAmb() const;
00131 #else
00132 
00133    RTI::RTIambassador* rtiAmb();
00134 
00136    RTI::RTIambassador* rtiAmb() const;
00137 #endif
00138 
00140    virtual DtConnectionMgr* connectMgr();
00141 
00143    virtual DtConnectionMgr* connectMgr() const;
00144 
00146    virtual MAKRti::DtTime time() const;
00147 
00150    virtual void postJoinInit();
00151 
00153    virtual void resign();
00154 
00156    virtual void tick(unsigned long tickCount);
00157 
00159    virtual float averageTickPeriod() const;
00160 
00162    virtual void enableNetworkTesting();
00163 
00165    virtual void disableNetworkTesting();
00166 
00168    virtual bool networkTestingEnabled() const;
00169 
00171    void processResign(const DtResignMsg& msg);
00172 
00176    virtual bool receiveInteraction(DtInteractionClassHandle classHandle, const DtPhvps & params);
00177 
00179    virtual bool testMgrCurrentlySending() const;
00180 
00182    virtual bool queueMsgForSend(DtRtiMsg& msg ) const;
00183 
00186    virtual void setTestMgrCurrentlySending( bool isSending,
00187                                             unsigned int testID = 0 );
00188 
00190    virtual bool addSendTimeStampMetaDataIfNecessary( DtRtiMsg& msg );
00191 
00193    virtual bool addReceiveTimeStampIfNecessary( DtRtiMsg& msg );
00194 
00200    virtual bool addAsyncQueueMsgOnRecieve(DtRtiMsg& msg);
00201    
00203    virtual bool isTestInteractionClassHandle(DtInteractionClassHandle classHandle);
00204 
00206    virtual void sendStatusMessages() const;
00207 
00208 protected:
00209 
00211    virtual void processSub( const DtSubInterMsg& msg );
00212 
00214    virtual void processUnsub( const DtUnsubInterMsg& msg );
00215 
00219    virtual void processChangeLatencyTestStatus(const DtAssistantChangeLatencyTestModeMsg& testMsg);
00220    virtual void processChangeLatencyTestStatus(const DtChangeLatencyTestModeMsg& testMsg);
00221 
00223    virtual void changeLatencyTestRequestByType( bool initiateTest, bool continuousCommand,
00224       bool stopContinuous, bool observing, DtInitiatorByType type, MAKRti::DtTime period, 
00225       unsigned int numInteractions, unsigned int payloadSize );
00226 
00229    virtual void initiateLatencyTest();
00230 
00232    virtual void processLatencyTest();
00233 
00234    // Upon netread - get the testID from the metadata.
00235    virtual bool getTestIDFromMetaData( DtRtiMsg& msg, unsigned int& testID) const;
00236 
00238    virtual void addKnownFederate(DtFederateHandle subscribedFed);
00239 
00241    virtual void removeKnownFederate(DtFederateHandle unsubscribedFed);
00242 
00244    virtual bool atLeastOneKnownFederate() const;
00245 
00247    virtual bool isKnownFederateHandle(DtFederateHandle handle) const;
00248 
00253    virtual void addSendInteractionTimeStamp( unsigned int testID );
00254 
00260    virtual void addNetSendTimeStamp( unsigned int testID, DtRtiMsg& msg );
00261 
00267    virtual void addNetReceiveTimeStamp( unsigned int testID, const DtRtiMsg& msg );
00268 
00273    virtual void addReceiveInteractionTimeStamp( unsigned int testID, MAKRti::DtTime timeToUse );
00274 
00278    virtual void removeKnowledgeOfTestId( unsigned int testID );
00279 
00284    virtual void addAsyncQueueMsgTimeStamp( unsigned int& testID, const DtRtiMsg& msg );
00285 
00287    MAKRti::DtTransportType transportTypeForTestID( unsigned int testID );
00288 
00293    
00295    virtual unsigned int lastSentTestID() const;
00296 
00298    virtual void setLastSentTestID( unsigned int testID );
00299    
00301    virtual bool sendSingleLatencyInteraction(unsigned int testID, 
00302                                              DtFederateHandle recipient,
00303                                              MAKRti::DtTransportType transport,
00304                                              unsigned int payload );
00305       
00308    virtual bool addMetadataIfNecessary( DtRtiMsg& msg, unsigned int& testID ) const;
00309 
00311    virtual bool shouldAddMetadataToMessage( DtRtiMsg& msg ) const;
00312 
00314    virtual bool isInitiatorOfTestID( unsigned int testID ) const;
00315 
00317    virtual void calculateTickTime(unsigned long tickCount );
00318 
00324    virtual bool sendInteraction(unsigned int testID, 
00325           DtInteractionClassHandle handle, const DtPhvps& params, unsigned int payloadSize );
00326 
00327 protected:
00328 
00330    static void processSub( const DtSubInterMsg& msg, void* usr );
00331 
00333    static void processUnsub( const DtUnsubInterMsg& msg, void* usr );
00334 
00336    static void queueLatencyTestRequest( const DtAssistantChangeLatencyTestModeMsg& testMsg, void* usr );
00337 
00341    static void processChangeLatencyTestStatus( const DtAssistantChangeLatencyTestModeMsg& testMsg, void* usr );
00342    static void processChangeLatencyTestStatus( const DtChangeLatencyTestModeMsg& testMsg, void* usr );
00343 
00344 private:
00346    DtTestManager(DtTestManager const& orig);
00347 
00349    DtTestManager& operator= (DtTestManager const& orig);
00350 
00351 protected:
00352 
00354    DtFederateMgr* myFedMgr;
00355 
00357    DtInitiatorLatencyTest* myInitiatorTest;
00358 
00360    DtRecipientLatencyTest* myRecipientTest;
00361 
00363    DtLatencyTestInteraction* myLatencyInteraction;
00364 
00366    MAKRti::DtClock myClock;
00367    
00369    bool myRunningContinuous;
00371    DtTrialDetails myContinuousDetails;
00372 
00374    std::set<DtInitiatorByType> myObservers;
00375 
00377    DtTestToTimeStampMap myCompletedAveragedInitiatedTests;
00378   
00383    bool mySendingInteraction;
00384 
00387    unsigned int myTestIDOfLastSentInteraction;
00388 
00390    unsigned int myCurrentTrialID;
00391 
00393    unsigned int myInitiatedTrialID;
00394    DtFederateHandle myInitiatedFedHandle;
00395 
00398    DtTestMgrFedAmbWrapper* myTestFedAmbWrapper;
00399    
00401    std::list<DtTrialDetails> myTrialsToInitiate;
00402 
00407    std::set<DtFederateHandle> myListOfKnownFederates;   
00408 
00410    float myInitialTickTime;
00411 
00413    unsigned long myInitialTickCount;
00414 
00416    float mySecondTickTime;
00417 
00419    unsigned long mySecondTickCount;
00420 
00422    float myAverageTickPeriod;   
00423 
00425    bool myEnabled;
00426 
00428    unsigned myNumInitiatedTests;
00429 
00431    unsigned myNumTestReportsGenerated;
00432 
00434    DtMutex myInitiatorMutex;
00435    DtMutex myRecipientMutex;
00436 
00437 };
00438 
00439 #endif

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)