VR-Link API Documentation for HLA 1516
hExerciseConn.h
Go to the documentation of this file.
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 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)