![]() |
MAK RTIspy API Documentation for HLA 1516
|
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