![]() |
VR-Link API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00008 00009 #ifndef hExerciseConn_H_ 00010 #define hExerciseConn_H_ 00011 00012 #if DtHLA 00013 00014 #include "baseExConn.h" 00015 #include "callbacks.h" 00016 #include "rprFomMap.h" 00017 #include "rtiCompatibility.h" 00018 #include "eventId.h" 00019 #include "vrlFedAmb.h" 00020 #include "vrlRtiAmb.h" 00021 00022 #include <matrix/geodCoord.h> 00023 #include <vlutil/vlVersion.h> 00024 #include "userTagModifiers.h" 00025 00026 00027 class DtInteraction; 00028 class DtInteractionFactory; 00029 class DtHlaObjectFactory; 00030 class DtInteractionManager; 00031 class DtHlaObjectManager; 00032 class DtStateMsg; 00033 class DtVrlFederateAmbassador; 00034 class DtFom; 00035 class DtFilename; 00036 class DtDynamicLibrary; 00037 class DtFomMapper; 00038 class DtExerciseConnInitializer; 00039 00040 00041 00058 class DT_DLL_VL DtExerciseConn : public DtBaseExerciseConn 00059 { 00060 00061 public: 00062 00063 typedef DtVrlFederateAmbassador* (*DtFedAmbCreator)(); 00064 typedef DtFomMapper* (*DtFomMapperCreator)(void* usr); 00065 typedef void (*DtFomMapperDeletor)(DtFomMapper*); 00066 00069 typedef DtVrlRtiAmbassador* (*DtRtiAmbCreator)(const std::vector<std::wstring>&); 00070 00071 #if DtHLA_1516 00072 typedef DtTime (*DtLogicalTimeToVrlTimeConverter) (const RTI::LogicalTime &theLogicalTime); 00073 typedef std::auto_ptr<RTI::LogicalTime>(*DtVrlTimeToLogicalTimeConverter) (const DtTime &time); 00074 #else 00075 typedef DtTime (*DtFedTimeToVrlTimeConverter) (const RTI::FedTime &theFedTIme); 00076 typedef RTI::FedTime* (*DtVrlTimeToFedTimeConverter) (const DtTime &time); 00077 #endif 00078 00088 enum InitializationStatus { 00089 DtINIT_SUCCESS = 0, 00090 DtCOULD_NOT_CREATE_RTIAMB = 1, 00091 DtCOULD_NOT_CREATE_FEDEX = 2, 00092 DtCOULD_NOT_JOIN_FEDEX = 3, 00093 DtCOULD_NOT_OPEN_FED = 4, 00094 DtCOULD_NOT_PARSE_FED = 5, 00095 DtCOULD_NOT_FIND_FOMMAPPER = 6, 00096 DtERROR_OPENING_FOMMAPPER_LIB = 7, 00097 DtCOULD_NOT_CONNECT_RTIAMB = 8 00098 00099 }; 00100 00101 public: 00102 00105 DtExerciseConn(const DtExerciseConnInitializer& init, InitializationStatus* status = 0); 00106 00118 DtExerciseConn(const char* execName, 00119 const char* federateType, 00120 DtFomMapper* mapper = DtRprFomMapper::create(0), 00121 const char* fedFileName = 0, 00122 InitializationStatus* status = 0 00123 ); 00124 00132 DtExerciseConn(const char* execName, 00133 const char* federateType, 00134 const char* dsoName, 00135 const char* fedFileName = 0, 00136 void* fomMapInitData = 0, 00137 InitializationStatus* status = 0 00138 ); 00139 00140 #if DtHLA_1516_EVOLVED 00141 00142 00147 00158 DtExerciseConn(const char* execName, 00159 const char* federateName, 00160 const char* federateType, 00161 const DtString& fedFile, 00162 DtFomMapper* mapper = DtRprFomMapper::create(0), 00163 const DtString mimModule = "", 00164 const std::vector<DtString>& fomModules = std::vector<DtString>(), 00165 InitializationStatus* status = 0 ); 00166 00167 00172 00179 DtExerciseConn(const char* execName, 00180 const char* federateName, 00181 const char* federateType, 00182 const DtString& fedFile, 00183 const char* dsoName, 00184 void* fomMapInitData = 0, 00185 const DtString mimModule = "", 00186 const std::vector<DtString>& fomModules = std::vector<DtString>(), 00187 InitializationStatus* status = 0 ); 00188 #endif 00189 00191 virtual ~DtExerciseConn(); 00192 00193 private: 00194 00196 DtExerciseConn(const DtExerciseConn& orig); 00197 00199 DtExerciseConn& operator=(const DtExerciseConn& orig); 00200 00201 public: 00202 00212 virtual void setReflecting(); 00213 00215 virtual bool reflecting() const; 00216 00228 virtual void setReflectRemoteUpdatesIntoPubFlag(bool onff); 00229 00231 virtual bool reflectRemoteUpdatesIntoPubFlag() const; 00232 00237 virtual void setReflectingThroughRti(); 00238 00240 virtual bool reflectingThroughRti() const; 00241 00251 virtual void ignoreAdvisories(); 00252 00254 virtual bool usingAdvisories() const; 00255 00256 void setRemoveObjectOnAttOutOfScope(bool remove); 00257 00258 00259 #if DtHLA_1516_EVOLVED 00260 00261 void listFederationExecutions() const; 00262 #endif 00263 00267 virtual void send(const DtStateMsg& msg); 00268 00274 virtual void send(const DtInteraction& msg); 00275 00279 #if DtHLA_1516 00280 virtual void send(const DtInteraction& msg, 00281 const RTI::RegionHandleSet* region); 00282 #else 00283 virtual void send(const DtInteraction& msg, 00284 const RTI::Region* region); 00285 #endif 00286 00291 virtual void sendStamped(const DtStateMsg& msg); 00292 00297 virtual void sendStamped(const DtInteraction& msg); 00298 00302 virtual void sendStampedWithRegion(const DtInteraction& msg, 00303 DtDDMRegionSP region); 00304 00309 #if DtHLA_1516 00310 virtual void sendStamped(const DtInteraction& msg, 00311 const RTI::RegionHandleSet* region); 00312 #else 00313 virtual void sendStamped(const DtInteraction& msg, 00314 const RTI::Region* region); 00315 #endif 00316 00319 virtual DtTime currentTimeForStamping(); 00320 00335 virtual int drainInput(DtTime maxTime = -1, DtTime minTime = 0.0); 00336 00338 virtual void setObjectIdForEventId(const DtGlobalObjectDesignator& id); 00339 00341 virtual const DtEventID& nextEventId(); 00342 00345 virtual DtVrlRtiAmbassador* rtiAmb(); 00346 00349 virtual DtVrlFederateAmbassador* fedAmb(); 00350 00352 virtual RTI::FederateHandle fedHandle() const; 00353 00355 virtual const DtString& fedType() const; 00356 00357 #if DtHLA_1516_EVOLVED 00358 00359 00360 virtual const DtString& fedName() const; 00361 #endif 00362 00364 virtual const DtString& execName() const; 00365 00367 virtual bool isUsingMakRti() const; 00368 00372 virtual DtString rtiName() const; 00373 00377 virtual DtString rtiVersion() const; 00378 00381 virtual DtString rtiError() const; 00382 00384 virtual DtFom* fom(); 00385 00387 virtual DtInteractionFactory* interactionFactory(); 00388 00390 virtual DtHlaObjectFactory* objectFactory(); 00391 00393 virtual DtFomMapper* fomMapper(); 00394 00396 virtual DtHlaObjectManager* hlaObjectManager(); 00397 00399 virtual void setTimeStampType(DtTimeStampType relOrAbs); 00400 00402 virtual DtTimeStampType timeStampType() const; 00403 00408 virtual void addInteractionCallback(RTI::InteractionClassHandle h, 00409 DtReceiveInteractionCb cb, 00410 void* usr, 00411 DtDDMRegionSP region = DtDDMRegionSP()); 00412 00417 virtual void addInteractionCallbackByName(const char* className, 00418 DtReceiveInteractionCb cb, 00419 void* usr, 00420 DtDDMRegionSP region = DtDDMRegionSP()); 00421 00426 virtual void removeInteractionCallback(RTI::InteractionClassHandle h, 00427 DtReceiveInteractionCb cb, 00428 void* usr, 00429 DtDDMRegionSP region = DtDDMRegionSP()); 00430 00435 virtual void removeInteractionCallbackByName(const char* className, 00436 DtReceiveInteractionCb cb, 00437 void* usr, DtDDMRegionSP region = DtDDMRegionSP()); 00438 00441 virtual void addDiscoverObjectCallback(RTI::ObjectClassHandle h, 00442 DtDiscoverObjectCb cb, 00443 void* usr); 00444 00448 virtual void removeDiscoverObjectCallback(RTI::ObjectClassHandle h, 00449 DtDiscoverObjectCb cb, 00450 void* usr); 00451 00454 virtual void addRemoveObjectCallback( 00455 #if DtHLA_1516 00456 RTI::ObjectInstanceHandle id, 00457 #else 00458 RTI::ObjectHandle id, 00459 #endif 00460 DtRemoveObjectCb cb, 00461 void* usr); 00462 00466 virtual void removeRemoveObjectCallback( 00467 #if DtHLA_1516 00468 RTI::ObjectInstanceHandle id, 00469 #else 00470 RTI::ObjectHandle id, 00471 #endif 00472 DtRemoveObjectCb cb, 00473 void* usr); 00474 00478 virtual void setDestroyFedExecFlag(bool flag); 00479 00481 virtual bool destroyFedExecFlag(); 00482 00486 virtual void setReplyingToSynchronizationPoints(bool yesNo); 00487 00489 virtual bool replyingToSynchronizationPoints(); 00490 00493 virtual void replyToSynchronizationPoint(const char* label); 00494 00499 virtual void setAutoSubscribeFlag(bool flag); 00500 00502 virtual bool autoSubscribeFlag() const; 00503 00506 virtual void setSendFedTime(bool flag); 00507 00509 virtual bool sendFedTime() const; 00510 00518 virtual void setUseGeographicDdm(bool flag); 00519 00522 virtual bool useGeographicDdm() const; 00523 00524 virtual void setDeleteOnOutOfScope(bool yesNo); 00525 00526 virtual bool deleteOnOutOfScope() const; 00527 00528 #if DtHLA_1516 00529 00530 virtual RTI::LogicalTimeFactory *logicalTimeFactory() const; 00531 00532 #endif 00533 public: 00534 00537 virtual void registerSynchronizationPoint(const DtString& label); 00538 00540 virtual void registerSynchronizationPoint( 00541 const DtString& label, 00542 #if DtHLA_1516 00543 const RTI::VariableLengthData& tag); 00544 #else 00545 const DtString& tag); 00546 #endif 00547 00550 virtual void addSynchPointRegistrationSucceededCb(const DtString& label, 00551 DtSynchPointCb func, void* usr); 00552 00554 virtual void addSynchPointRegistrationSucceededCb(DtSynchPointCb func, 00555 void* usr); 00556 00559 virtual void removeSynchPointRegistrationSucceededCb(const DtString& label, 00560 DtSynchPointCb func, void* usr); 00561 00563 virtual void removeSynchPointRegistrationSucceededCb(DtSynchPointCb func, 00564 void* usr); 00565 00567 virtual void addSynchPointRegistrationFailedCb(const DtString& label, 00568 DtSynchPointCb func, void* usr); 00569 00571 virtual void addSynchPointRegistrationFailedCb(DtSynchPointCb func, 00572 void* usr); 00573 00575 virtual void removeSynchPointRegistrationFailedCb(const DtString& label, 00576 DtSynchPointCb func, void* usr); 00577 00579 virtual void removeSynchPointRegistrationFailedCb(DtSynchPointCb func, 00580 void* usr); 00581 00583 virtual void addFederationSynchedCb(const DtString& label, 00584 DtSynchPointCb func, void* usr); 00585 00587 virtual void addFederationSynchedCb(DtSynchPointCb func, 00588 void* usr); 00589 00591 virtual void removeFederationSynchedCb(const DtString& label, 00592 DtSynchPointCb func, void* usr); 00593 00595 virtual void removeFederationSynchedCb(DtSynchPointCb func, 00596 void* usr); 00597 00598 #if DtHLA_1516_EVOLVED 00599 00600 virtual void addConnectionLostCb(DtConnectionLostCb func, 00601 void* usr); 00603 virtual void removeConnectionLostCb(DtConnectionLostCb func, void *usr); 00604 #endif 00605 00606 00610 virtual void addAnnounceSynchPointCb(const DtString& label, 00611 DtAnnounceSynchPointCb func, void* usr); 00612 00616 virtual void addAnnounceSynchPointCb(DtAnnounceSynchPointCb func, 00617 void* usr); 00618 00620 virtual void removeAnnounceSynchPointCb(const DtString& label, 00621 DtAnnounceSynchPointCb func, void* usr); 00622 00624 virtual void removeAnnounceSynchPointCb(DtAnnounceSynchPointCb func, 00625 void* usr); 00626 00629 virtual void setDdmPlayBoxLowerBound(const DtGeodeticCoord& bound); 00630 00633 virtual void setDdmPlayBoxUpperBound(const DtGeodeticCoord& bound); 00634 00637 virtual const DtGeodeticCoord& ddmPlayBoxLowerBound() const; 00638 00641 virtual const DtGeodeticCoord& ddmPlayBoxUpperBound() const; 00642 00651 virtual void setObjectTagModifier(const DtString& className, 00652 DtObjectTagModifierSP modifier, bool applyToSubClasses = true); 00653 00662 virtual void setInteractionTagModifier(const DtString& className, 00663 DtInteractionTagModifierSP modifier, bool applyToSubClasses = true); 00664 00665 00666 #if DtHLA_1516 00667 00668 00669 00670 static void setLogicalTimeFactoryFactoryParameter(std::wstring); 00671 00673 static std::wstring logicalTimeFactoryFactoryParameter(); 00674 #endif 00675 00676 00677 00678 static void setFedAmbCreator(DtFedAmbCreator creator); 00679 00681 static DtFedAmbCreator fedAmbCreator(); 00682 00686 static void setRtiAmbCreator(DtRtiAmbCreator creator); 00687 00689 static DtRtiAmbCreator rtiAmbCreator(); 00690 00695 static void overrideRidParameters(const std::map<DtString, DtString>& ridParams); 00696 00705 static void setFomMapperCreator(DtFomMapperCreator creator, 00706 void* usr = 0); 00707 00709 static DtFomMapperCreator fomMapperCreator(); 00710 00718 #if DtHLA_1516 00719 static void setLogicalTimeToVrlTimeConverter(DtLogicalTimeToVrlTimeConverter func); 00720 static DtLogicalTimeToVrlTimeConverter logicalTimeToVrlTimeConverter(); 00721 #else 00722 static void setFedTimeToVrlTimeConverter(DtFedTimeToVrlTimeConverter func); 00723 static DtFedTimeToVrlTimeConverter fedTimeToVrlTimeConverter(); 00724 #endif 00725 00732 #if DtHLA_1516 00733 static void setVrlTimeToLogicalTimeConverter(DtVrlTimeToLogicalTimeConverter func); 00734 static DtVrlTimeToLogicalTimeConverter vrlTimeToLogicalTimeConverter(); 00735 #else 00736 static void setVrlTimeToFedTimeConverter(DtVrlTimeToFedTimeConverter func); 00737 static DtVrlTimeToFedTimeConverter vrlTimeToFedTimeConverter(); 00738 #endif 00739 00746 #if DtHLA_1516 00747 static DtTime defaultDtLogicalTimeToVrlTimeConverter( const RTI::LogicalTime &time); 00748 #else 00749 static DtTime defaultDtFedTimeToVrlTimeConverter( const RTI::FedTime &time); 00750 #endif 00751 00753 #if DtHLA_1516 00754 static std::auto_ptr<RTI::LogicalTime> defaultVrlTimeToLogicalTimeConverter( 00755 const DtTime &time); 00756 #else 00757 static RTI::FedTime* defaultVrlTimeToFedTimeConverter(const DtTime &time); 00758 #endif 00759 00760 00762 static DtString vrlinkVersion(); 00763 00764 protected: 00765 00766 00768 void initializeConnection(InitializationStatus* result); 00769 00772 void initializeFomMapper(const char* dsoName, void* fomMapInitData, 00773 InitializationStatus* result); 00774 00778 void getFuncsFromSharedLib(DtDynamicLibrary& dso, 00779 DtFomMapperCreator* creator, 00780 DtFomMapperDeletor* deletor); 00781 00782 00785 void handleFedFile(const DtString& fedFileName); 00786 00791 int initFom(InitializationStatus* result); 00792 00796 int createRtiAmb(InitializationStatus* result); 00797 00803 int connectRtiAmb(InitializationStatus* result); 00804 00809 int createFedEx(InitializationStatus* result); 00810 00813 int createFedAmb(InitializationStatus* result); 00814 00818 int joinFedEx(InitializationStatus* result); 00819 00823 bool fedFileExists(const DtFilename &name) const; 00824 00826 void setFedFile(const DtString& fedFile); 00827 00828 #if DtHLA_1516_EVOLVED 00829 00830 00831 void setFomModules(const std::vector<DtString>& modules); 00832 00834 void resignAndDisconnect(); 00835 #endif 00836 00837 protected: 00838 00840 static void replyToSyncPointCallback(void* usr); 00841 00842 protected: 00843 00844 DtString myExecName; 00845 00846 DtString myFedType; 00847 #if DtHLA_1516_EVOLVED 00848 00849 00850 00851 00852 DtString myFedName; 00853 #endif 00854 #if DtHLA_1516 00855 std::auto_ptr<RTI::LogicalTimeFactory> myLogicalTimeFactory; 00856 #endif 00857 DtVrlRtiAmbassador* myRtiAmb; 00858 RTI::FederateHandle myFedHandle; 00859 DtVrlFederateAmbassador* myFedAmb; 00860 00861 DtFom* myFom; 00862 00863 DtHlaObjectManager* myHlaObjectManager; 00864 DtInteractionManager* myInteractionManager; 00865 00866 DtFomMapper* myFomMapper; 00867 DtDynamicLibrary *myFomMapperDso; 00868 DtFomMapperCreator myDsoCreator; 00869 DtFomMapperDeletor myDsoDeletor; 00870 00871 DtEventID myCurrentEventId; 00872 DtTimeStampType myRelOrAbs; 00873 00874 bool myDestroyFedExFlag; 00875 bool myUseFomMapperDeletor; 00876 00877 bool myReflecting; 00878 bool myReflectRemoteUpdatesIntoPubFlag; 00879 bool myReflectingThroughRti; 00880 bool myReplyingToSynchronizationPoints; 00881 bool myUsingAdvisories; 00882 bool myAutoSubscribeFlag; 00883 bool mySendFedTimeFlag; 00884 00885 bool myUseGeographicDdm; 00886 bool myDeleteOnOutOfScope; 00887 #if DtHLA_1516_EVOLVED 00888 00889 bool myIsConnected; 00890 #endif 00891 00893 DtString myRtiError; 00894 00896 DtString myFedFile; 00897 00898 #if DtHLA_1516_EVOLVED 00899 std::vector<std::wstring> myFomModules; 00900 std::wstring myMimFomModule; 00901 00902 std::wstring myLocalSettingsDesignator; 00903 #elif DtHLA_1516 00904 std::vector<std::wstring> myRtiArguments; 00905 #endif 00906 00907 #if DtHLA_1516 00908 RTI::VariableLengthData myTag; 00909 #else 00910 DtString myTag; 00911 #endif 00912 00916 DtGeodeticCoord myDdmPlayBoxLowerBound; 00917 00921 DtGeodeticCoord myDdmPlayBoxUpperBound; 00922 00923 protected: 00924 00925 static std::wstring myLogicalTimeFactFactParam; 00926 static DtFedAmbCreator theFedAmbCreator; 00927 static DtRtiAmbCreator theRtiAmbCreator; 00928 static DtFomMapperCreator theFomMapperCreator; 00929 static void* theFomMapInitData; 00930 #if DtHLA_1516 00931 static DtVrlTimeToLogicalTimeConverter theVrlTimeToLogicalTimeConverter; 00932 static DtLogicalTimeToVrlTimeConverter theLogicalTimeToVrlTimeConverter; 00933 #else 00934 static DtVrlTimeToFedTimeConverter theVrlTimeToFedTimeConverter; 00935 static DtFedTimeToVrlTimeConverter theFedTimeToVrlTimeConverter; 00936 #endif 00937 00938 00939 00940 }; 00941 00942 inline DtVrlRtiAmbassador* DtExerciseConn::rtiAmb() 00943 { 00944 return myRtiAmb; 00945 } 00946 00947 inline DtVrlFederateAmbassador* DtExerciseConn::fedAmb() 00948 { 00949 return myFedAmb; 00950 } 00951 00952 inline DtHlaObjectManager* DtExerciseConn::hlaObjectManager() 00953 { 00954 return myHlaObjectManager; 00955 } 00956 00957 inline DtFom* DtExerciseConn::fom() 00958 { 00959 return myFom; 00960 } 00961 00962 inline RTI::FederateHandle DtExerciseConn::fedHandle() const 00963 { 00964 return myFedHandle; 00965 } 00966 00967 #if DtHLA_1516_EVOLVED 00968 inline const DtString& DtExerciseConn::fedName() const 00969 { 00970 return myFedName; 00971 } 00972 #endif 00973 00974 inline const DtString& DtExerciseConn::fedType() const 00975 { 00976 return myFedType; 00977 } 00978 00979 inline const DtString& DtExerciseConn::execName() const 00980 { 00981 return myExecName; 00982 } 00983 00984 00985 inline void DtExerciseConn::setSendFedTime(bool flag) 00986 { 00987 mySendFedTimeFlag = flag; 00988 } 00989 00990 inline bool DtExerciseConn::sendFedTime() const 00991 { 00992 return mySendFedTimeFlag; 00993 } 00994 00995 inline void DtExerciseConn::setUseGeographicDdm(bool flag) 00996 { 00997 myUseGeographicDdm = flag; 00998 } 00999 01000 inline bool DtExerciseConn::useGeographicDdm() const 01001 { 01002 return myUseGeographicDdm; 01003 } 01004 01005 inline void DtExerciseConn::setDeleteOnOutOfScope(bool yesNo) 01006 { 01007 myDeleteOnOutOfScope = yesNo; 01008 } 01009 01010 inline bool DtExerciseConn::deleteOnOutOfScope() const 01011 { 01012 return myDeleteOnOutOfScope; 01013 } 01014 01015 #endif 01016 #endif 01017