9 #ifndef exerciseConnHLA_H_
10 #define exerciseConnHLA_H_
29 class DtInteractionFactory;
30 class DtHlaObjectFactory;
31 class DtInteractionManager;
32 class DtHlaObjectManager;
34 class DtVrlFederateAmbassador;
63 typedef DtVrlFederateAmbassador* (*DtFedAmbCreator)();
64 typedef DtFomMapper* (*DtFomMapperCreator)(
void* usr);
65 typedef void (*DtFomMapperDeletor)(DtFomMapper*);
67 typedef void (*DtRtiErrorCb)(
const char* label,
void* usr);
71 typedef DtVrlRtiAmbassador* (*DtRtiAmbCreator)(
const std::vector<std::wstring>&);
74 typedef DtTime (*DtLogicalTimeToVrlTimeConverter) (
const RTI::LogicalTime &theLogicalTime);
75 typedef std::auto_ptr<RTI::LogicalTime>(*DtVrlTimeToLogicalTimeConverter) (
const DtTime &time);
77 typedef DtTime (*DtFedTimeToVrlTimeConverter) (
const RTI::FedTime &theFedTIme);
78 typedef RTI::FedTime* (*DtVrlTimeToFedTimeConverter) (
const DtTime &time);
90 enum InitializationStatus {
92 DtCOULD_NOT_CREATE_RTIAMB = 1,
93 DtCOULD_NOT_CREATE_FEDEX = 2,
94 DtCOULD_NOT_JOIN_FEDEX = 3,
95 DtCOULD_NOT_OPEN_FED = 4,
96 DtCOULD_NOT_PARSE_FED = 5,
97 DtCOULD_NOT_FIND_FOMMAPPER = 6,
98 DtERROR_OPENING_FOMMAPPER_LIB = 7,
99 DtCOULD_NOT_CONNECT_RTIAMB = 8
121 const char* federateType,
122 DtFomMapper* mapper = DtRprFomMapper::create(0),
123 const char* fedFileName = 0,
124 InitializationStatus* status = 0
135 const char* federateType,
137 const char* fedFileName = 0,
138 void* fomMapInitData = 0,
139 InitializationStatus* status = 0
142 #if DtHLA_1516_EVOLVED
161 const char* federateName,
162 const char* federateType,
164 DtFomMapper* mapper = DtRprFomMapper::create(0),
166 const std::vector<DtString>& fomModules = std::vector<DtString>(),
167 InitializationStatus* status = 0 );
182 const char* federateName,
183 const char* federateType,
186 void* fomMapInitData = 0,
188 const std::vector<DtString>& fomModules = std::vector<DtString>(),
189 InitializationStatus* status = 0 );
214 virtual void setReflecting();
217 virtual bool reflecting()
const;
223 virtual void setDefaultOwnershipHandler(DtOwnershipHandler* ownershipHandler);
224 virtual DtOwnershipHandler* defaultOwnershipHandler();
238 virtual void setReflectRemoteUpdatesIntoPubFlag(
bool onff);
241 virtual bool reflectRemoteUpdatesIntoPubFlag()
const;
247 virtual void setReflectingThroughRti();
250 virtual bool reflectingThroughRti()
const;
261 virtual void ignoreAdvisories();
264 virtual bool usingAdvisories()
const;
266 virtual void setRemoveObjectOnAttOutOfScope(
bool remove);
274 virtual bool enabledGenericAttributes()
const;
276 #if DtHLA_1516_EVOLVED
278 void listFederationExecutions();
298 const RTI::RegionHandleSet* region);
301 const RTI::Region* region);
320 DtDDMRegionSP region);
328 const RTI::RegionHandleSet* region);
331 const RTI::Region* region);
336 virtual DtTime currentTimeForStamping();
352 virtual int drainInput(
DtTime maxTime = -1,
DtTime minTime = 0.0);
362 virtual DtVrlRtiAmbassador* rtiAmb();
366 virtual DtVrlFederateAmbassador* fedAmb();
369 virtual RTI::FederateHandle fedHandle()
const;
372 virtual const DtString& fedType()
const;
374 #if DtHLA_1516_EVOLVED
377 virtual const DtString& fedName()
const;
381 virtual const DtString& execName()
const;
384 virtual bool isUsingMakRti()
const;
394 virtual DtString rtiVersion()
const;
401 virtual DtFom* fom();
404 virtual DtInteractionFactory* interactionFactory();
407 virtual DtHlaObjectFactory* objectFactory();
410 virtual DtFomMapper* fomMapper();
413 virtual DtHlaObjectManager* hlaObjectManager();
425 virtual void addInteractionCallback(RTI::InteractionClassHandle h,
426 DtReceiveInteractionCb cb,
428 DtDDMRegionSP region = DtDDMRegionSP());
434 virtual void addInteractionCallbackByName(
const char* className,
435 DtReceiveInteractionCb cb,
437 DtDDMRegionSP region = DtDDMRegionSP());
443 virtual void removeInteractionCallback(RTI::InteractionClassHandle h,
444 DtReceiveInteractionCb cb,
446 DtDDMRegionSP region = DtDDMRegionSP());
452 virtual void removeInteractionCallbackByName(
const char* className,
453 DtReceiveInteractionCb cb,
454 void* usr, DtDDMRegionSP region = DtDDMRegionSP());
458 virtual void addDiscoverObjectCallback(RTI::ObjectClassHandle h,
459 DtDiscoverObjectCb cb,
465 virtual void removeDiscoverObjectCallback(RTI::ObjectClassHandle h,
466 DtDiscoverObjectCb cb,
471 virtual void addRemoveObjectCallback(
473 RTI::ObjectInstanceHandle
id,
475 RTI::ObjectHandle
id,
483 virtual void removeRemoveObjectCallback(
485 RTI::ObjectInstanceHandle
id,
487 RTI::ObjectHandle
id,
495 virtual void setDestroyFedExecFlag(
bool flag);
498 virtual bool destroyFedExecFlag();
503 virtual void setReplyingToSynchronizationPoints(
bool yesNo);
506 virtual bool replyingToSynchronizationPoints();
510 virtual void replyToSynchronizationPoint(
const char* label);
516 virtual void setAutoSubscribeFlag(
bool flag);
519 virtual bool autoSubscribeFlag()
const;
523 virtual void setSendFedTime(
bool flag);
526 virtual bool sendFedTime()
const;
535 virtual void setUseGeographicDdm(
bool flag);
539 virtual bool useGeographicDdm()
const;
541 virtual void setDeleteOnOutOfScope(
bool yesNo);
543 virtual bool deleteOnOutOfScope()
const;
547 virtual RTI::LogicalTimeFactory *logicalTimeFactory()
const;
553 virtual void registerSynchronizationPoint(
const DtString& label);
556 virtual void registerSynchronizationPoint(
559 const RTI::VariableLengthData& tag);
565 virtual void addFederateSaveCb(
const DtString& label,
566 DtFederateSaveCb func,
void* usr);
567 virtual void addFederateSaveCb(DtFederateSaveCb func,
void* usr);
570 virtual void addFederateRestoreCb(
const DtString& label,
571 DtFederateSaveCb func,
void* usr);
572 virtual void addFederateRestoreCb(DtFederateSaveCb func,
void* usr);
575 virtual void removeFederateSaveCb(
const DtString& label,
576 DtFederateSaveCb func,
void* usr);
577 virtual void removeFederateSaveCb(DtFederateSaveCb func,
void* usr);
580 virtual void removeFederateRestoreCb(
const DtString& label,
581 DtFederateSaveCb func,
void* usr);
582 virtual void removeFederateRestoreCb(DtFederateSaveCb func,
void* usr);
586 virtual void addSynchPointRegistrationSucceededCb(
const DtString& label,
587 DtSynchPointCb func,
void* usr);
590 virtual void addSynchPointRegistrationSucceededCb(DtSynchPointCb func,
595 virtual void removeSynchPointRegistrationSucceededCb(
const DtString& label,
596 DtSynchPointCb func,
void* usr);
599 virtual void removeSynchPointRegistrationSucceededCb(DtSynchPointCb func,
603 virtual void addSynchPointRegistrationFailedCb(
const DtString& label,
604 DtSynchPointCb func,
void* usr);
607 virtual void addSynchPointRegistrationFailedCb(DtSynchPointCb func,
611 virtual void removeSynchPointRegistrationFailedCb(
const DtString& label,
612 DtSynchPointCb func,
void* usr);
615 virtual void removeSynchPointRegistrationFailedCb(DtSynchPointCb func,
619 virtual void addFederationSynchedCb(
const DtString& label,
620 DtSynchPointCb func,
void* usr);
623 virtual void addFederationSynchedCb(DtSynchPointCb func,
627 virtual void removeFederationSynchedCb(
const DtString& label,
628 DtSynchPointCb func,
void* usr);
631 virtual void removeFederationSynchedCb(DtSynchPointCb func,
639 virtual void addRtiErrorCb(
const DtString& label, DtRtiErrorCb func,
641 virtual void removeRtiErrorCb(
const DtString& label, DtRtiErrorCb func,
643 virtual void addRtiErrorCb(DtRtiErrorCb func,
void* usr);
644 virtual void removeRtiErrorCb(DtRtiErrorCb func,
void* usr);
647 #if DtHLA_1516_EVOLVED
649 virtual void addConnectionLostCb(DtConnectionLostCb func,
652 virtual void removeConnectionLostCb(DtConnectionLostCb func,
void *usr);
658 virtual void addAnnounceSynchPointCb(
const DtString& label,
659 DtAnnounceSynchPointCb func,
void* usr);
664 virtual void addAnnounceSynchPointCb(DtAnnounceSynchPointCb func,
668 virtual void removeAnnounceSynchPointCb(
const DtString& label,
669 DtAnnounceSynchPointCb func,
void* usr);
672 virtual void removeAnnounceSynchPointCb(DtAnnounceSynchPointCb func,
699 virtual void setObjectTagModifier(
const DtString& className,
700 DtObjectTagModifierSP modifier,
bool applyToSubClasses =
true);
710 virtual void setInteractionTagModifier(
const DtString& className,
711 DtInteractionTagModifierSP modifier,
bool applyToSubClasses =
true);
725 virtual void setGetValueMethod( DtExerciseConnInitializer::DtGetValueMethod getValueMethodChoice );
726 virtual DtExerciseConnInitializer::DtGetValueMethod getValueMethod( )
const;
735 static void setLogicalTimeFactoryFactoryParameter(std::wstring);
738 static std::wstring logicalTimeFactoryFactoryParameter();
743 static void setFedAmbCreator(DtFedAmbCreator creator);
746 static DtFedAmbCreator fedAmbCreator();
751 static void setRtiAmbCreator(DtRtiAmbCreator creator);
754 static DtRtiAmbCreator rtiAmbCreator();
760 static void overrideRidParameters(
const std::map<DtString, DtString>& ridParams);
770 static void setFomMapperCreator(DtFomMapperCreator creator,
774 static DtFomMapperCreator fomMapperCreator();
784 static void setLogicalTimeToVrlTimeConverter(DtLogicalTimeToVrlTimeConverter func);
785 static DtLogicalTimeToVrlTimeConverter logicalTimeToVrlTimeConverter();
787 static void setFedTimeToVrlTimeConverter(DtFedTimeToVrlTimeConverter func);
788 static DtFedTimeToVrlTimeConverter fedTimeToVrlTimeConverter();
798 static void setVrlTimeToLogicalTimeConverter(DtVrlTimeToLogicalTimeConverter func);
799 static DtVrlTimeToLogicalTimeConverter vrlTimeToLogicalTimeConverter();
801 static void setVrlTimeToFedTimeConverter(DtVrlTimeToFedTimeConverter func);
802 static DtVrlTimeToFedTimeConverter vrlTimeToFedTimeConverter();
812 static DtTime defaultDtLogicalTimeToVrlTimeConverter(
const RTI::LogicalTime &time);
814 static DtTime defaultDtFedTimeToVrlTimeConverter(
const RTI::FedTime &time);
819 static std::auto_ptr<RTI::LogicalTime> defaultVrlTimeToLogicalTimeConverter(
822 static RTI::FedTime* defaultVrlTimeToFedTimeConverter(
const DtTime &time);
832 virtual bool callRtiErrorCallback(
DtString &label);
837 bool checkRtiVersionForPointerAlignment();
840 void initializeConnection(InitializationStatus* result);
844 void initializeFomMapper(
const char* dsoName,
void* fomMapInitData,
845 InitializationStatus* result);
851 DtFomMapperCreator* creator,
852 DtFomMapperDeletor* deletor);
857 void handleFedFile(
const DtString& fedFileName);
863 int initFom(InitializationStatus* result);
868 int createRtiAmb(InitializationStatus* result);
875 int connectRtiAmb(InitializationStatus* result);
881 int createFedEx(InitializationStatus* result);
885 int createFedAmb(InitializationStatus* result);
890 int joinFedEx(InitializationStatus* result);
895 bool fedFileExists(
const DtFilename &name)
const;
897 #if DtHLA_1516_EVOLVED
900 void setFomModules(
const std::vector<DtString>& modules);
903 void resignAndDisconnect();
910 virtual void rtiSend(
DtInteraction& msg, RTI::InteractionClassHandle handle,
911 const RTI::RegionHandleSet* region);
913 virtual void rtiSend(
DtInteraction& msg, RTI::InteractionClassHandle handle,
914 const RTI::Region* region);
919 virtual void selfReflectInteraction(
DtInteraction& msg, RTI::InteractionClassHandle handle,
920 const RTI::RegionHandleSet* region);
922 virtual void selfReflectInteraction(
DtInteraction& msg, RTI::InteractionClassHandle handle,
923 const RTI::Region* region);
929 static void replyToSyncPointCallback(
void* usr);
936 #if DtHLA_1516_EVOLVED
944 std::auto_ptr<RTI::LogicalTimeFactory> myLogicalTimeFactory;
946 DtVrlRtiAmbassador* myRtiAmb;
947 RTI::FederateHandle myFedHandle;
948 DtVrlFederateAmbassador* myFedAmb;
952 DtHlaObjectManager* myHlaObjectManager;
953 DtInteractionManager* myInteractionManager;
954 DtOwnershipHandler* myOwnershipHandler;
956 DtFomMapper* myFomMapper;
958 DtFomMapperCreator myDsoCreator;
959 DtFomMapperDeletor myDsoDeletor;
964 bool myDestroyFedExFlag;
965 bool myUseFomMapperDeletor;
967 bool myGenericAttributes;
969 bool myReflectRemoteUpdatesIntoPubFlag;
970 bool myReflectingThroughRti;
971 bool myReplyingToSynchronizationPoints;
972 bool myUsingAdvisories;
973 bool myAutoSubscribeFlag;
974 bool mySendFedTimeFlag;
975 DtExerciseConnInitializer::DtGetValueMethod myGetValueMethod;
976 bool myPauseOnSaveRestore;
978 bool myUseGeographicDdm;
979 bool myDeleteOnOutOfScope;
980 #if DtHLA_1516_EVOLVED
991 #if DtHLA_1516_EVOLVED
992 std::vector<std::wstring> myFomModules;
993 std::wstring myMimFomModule;
995 std::wstring myLocalSettingsDesignator;
997 std::vector<std::wstring> myRtiArguments;
1001 RTI::VariableLengthData myTag;
1018 struct DtGeneralRtiErrorCbInfo
1020 DtRtiErrorCb cbFunction;
1024 struct DtLabelledRtiErrorCbInfo
1027 DtRtiErrorCb cbFunction;
1031 static std::wstring myLogicalTimeFactFactParam;
1032 static DtFedAmbCreator theFedAmbCreator;
1033 static DtRtiAmbCreator theRtiAmbCreator;
1034 static DtFomMapperCreator theFomMapperCreator;
1035 static void* theFomMapInitData;
1037 static DtVrlTimeToLogicalTimeConverter theVrlTimeToLogicalTimeConverter;
1038 static DtLogicalTimeToVrlTimeConverter theLogicalTimeToVrlTimeConverter;
1040 static DtVrlTimeToFedTimeConverter theVrlTimeToFedTimeConverter;
1041 static DtFedTimeToVrlTimeConverter theFedTimeToVrlTimeConverter;
1044 std::list<DtGeneralRtiErrorCbInfo> myRtiErrorCbList;
1045 std::list<DtLabelledRtiErrorCbInfo> myLabRtiErrorCbList;
1050 inline DtVrlRtiAmbassador* DtExerciseConn::rtiAmb()
1055 inline DtVrlFederateAmbassador* DtExerciseConn::fedAmb()
1060 inline DtHlaObjectManager* DtExerciseConn::hlaObjectManager()
1062 return myHlaObjectManager;
1065 inline DtFom* DtExerciseConn::fom()
1070 inline RTI::FederateHandle DtExerciseConn::fedHandle()
const
1075 #if DtHLA_1516_EVOLVED
1076 inline const DtString& DtExerciseConn::fedName()
const
1082 inline const DtString& DtExerciseConn::fedType()
const
1087 inline const DtString& DtExerciseConn::execName()
const
1093 inline void DtExerciseConn::setSendFedTime(
bool flag)
1095 mySendFedTimeFlag = flag;
1098 inline bool DtExerciseConn::sendFedTime()
const
1100 return mySendFedTimeFlag;
1103 inline void DtExerciseConn::setUseGeographicDdm(
bool flag)
1105 myUseGeographicDdm = flag;
1108 inline bool DtExerciseConn::useGeographicDdm()
const
1110 return myUseGeographicDdm;
1113 inline void DtExerciseConn::setDeleteOnOutOfScope(
bool yesNo)
1115 myDeleteOnOutOfScope = yesNo;
1118 inline bool DtExerciseConn::deleteOnOutOfScope()
const
1120 return myDeleteOnOutOfScope;