21 #include <vlutil/vlHashlist.h>
22 #include <vlutil/vlFedTarget.h>
31 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
32 #include <RTI/Enums.h>
33 #include <RTI/Exception.h>
44 #define DtHlaNamePrefix "HLA_"
47 class DtReserveNameMsg;
48 class DtNameReservedMsg;
64 class DtRegionEntryListWithAttributes;
102 typedef std::map<DtObjectInstanceHandle, DtAttributeHandleSet>
114 typedef std::map<DtObjectInstanceHandle, rti1516::LogicalTime const *> DtObjectHandleTimeMap;
115 typedef std::map<DtRtiObject*, rti1516::LogicalTime const *> DtObjectPtrTimeMap;
116 #elif defined(DtIFSPEC1516E)
117 typedef std::map<DtObjectInstanceHandle, rti1516e::LogicalTime const *> DtObjectHandleTimeMap;
118 typedef std::map<DtRtiObject*, rti1516e::LogicalTime const *> DtObjectPtrTimeMap;
120 typedef std::map<DtObjectInstanceHandle, RTI::FedTime const *> DtObjectHandleTimeMap;
121 typedef std::map<DtRtiObject*, RTI::FedTime const *> DtObjectPtrTimeMap;
146 virtual void postJoinInit();
149 virtual bool isPostJoined()
const;
173 inline DtTimeMgr* timeMgr() {
return federateMgr()->timeMgr();}
174 inline DtTimeMgr* timeMgr()
const {
return federateMgr()->timeMgr();}
178 virtual bool useHlaNamePrefix();
197 virtual void publish(
202 virtual void unpublishClass(
206 virtual void unpublishAttributes(
212 virtual void unpublishAttributes(
215 bool implicitlyUnpublishPrivilegeToDelete);
218 virtual void subscribe(
225 virtual void subscribe(
229 MAKRti::DtString updateRateDesignator);
233 virtual void unsubscribeClass(
237 virtual void unsubscribeAttributes(
242 virtual void unsubscribeAttributes(
248 virtual void reserveMultipleObjectInstanceName(
249 std::set<std::wstring>
const & theObjectInstanceNames);
252 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
254 virtual void reserveObjectInstanceName (
255 std::string
const & theObjectInstanceName);
260 std::string
const & theObjectInstanceName);
271 virtual void releaseObjectInstanceName(
272 std::string
const & theObjectInstanceName)
273 throw (rti1516e::ObjectInstanceNameNotReserved);
274 virtual void releaseMultipleObjectInstanceNames(
275 std::set< std::wstring >
const & theObjectInstanceNames )
276 throw (rti1516e::ObjectInstanceNameNotReserved);
277 virtual void queryAttributeTransportationType(
280 virtual void queryInteractionTransportationType(
300 virtual unsigned long deleteObj(
304 #elif defined(DtIFSPEC1516E)
307 virtual unsigned long deleteObj(
314 virtual unsigned long deleteObj(
317 char const * theTag);
325 virtual void requestObjectUpdate (
329 #elif defined(DtIFSPEC1516E)
330 virtual void requestObjectUpdate (
335 virtual void requestObjectUpdate (
343 virtual void requestClassUpdate (
348 #elif defined(DtIFSPEC1516E)
349 virtual void requestClassUpdate (
355 virtual void requestClassUpdate (
366 virtual unsigned long sendUpdate(
368 const DtAhvps& theAttrs,
371 #elif defined(DtIFSPEC1516E)
372 virtual unsigned long sendUpdate(
374 const DtAhvps& theAttrs,
378 virtual unsigned long sendUpdate(
380 const DtAhvps& theAttrs,
388 virtual unsigned long sendUpdate(
390 const DtAhvps& theAttrs,
393 #elif defined(DtIFSPEC1516E)
394 virtual unsigned long sendUpdate(
396 const DtAhvps& theAttrs,
400 virtual unsigned long sendUpdate(
402 const DtAhvps& theAttrs,
409 virtual void acquireAttrs(
414 #elif defined(DtIFSPEC1516E)
415 virtual void acquireAttrs(
421 virtual void acquireAttrs(
429 virtual void cancelAcquire(
435 virtual void divestOwnership(
443 virtual void confirmDivestiture (
448 #elif defined(DtIFSPEC1516E)
450 virtual void divestOwnership(
458 virtual void confirmDivestiture (
465 virtual void divestOwnership(
473 virtual void cancelDivest(
519 virtual DtRtiObject* lrcManagedObj(
const char* name);
523 virtual void removeFromAllLists(
DtRtiObject*
object);
526 virtual void queryOwnership(
530 virtual bool isAcquistionPending();
536 virtual int evaluateSubscription(
DtRtiMsg const& msg);
539 virtual void autoProvideAttrValueUpdate();
560 virtual void sendRequestMsg(
567 #elif defined(DtIFSPEC1516E)
570 virtual void sendRequestMsg(
580 virtual void addPendingStartUpdates(
585 virtual void addPendingStopUpdates(
618 bool isNonDiscovery);
621 virtual void processResign(
const DtResignMsg& msg);
629 #elif defined(DtIFSPEC1516E)
639 virtual void preTick();
642 virtual void postTick();
648 virtual void setRestoreInProgress(
bool isRestore);
649 virtual bool restoreInProgress()
const;
655 virtual void enableClassRelevanceSwitch();
656 virtual void disableClassRelevanceSwitch();
660 virtual void setClassRelevanceSwitch(
bool enableSwitch);
661 virtual bool classRelevanceSwitch();
666 virtual void enableAttributeRelevanceSwitch();
667 virtual void disableAttributeRelevanceSwitch();
671 virtual void setAttributeRelevanceSwitch(
bool enableSwitch);
672 virtual bool attributeRelevanceSwitch();
677 virtual void enableAttributeScopeSwitch();
678 virtual void disableAttributeScopeSwitch();
682 virtual void setAttributeScopeSwitch(
bool enableSwitch);
683 virtual bool attributeScopeSwitch();
698 MAKRti::DtString& objectName);
722 virtual void getObjectsOwned(DtMomTallyList& list);
723 virtual void getObjectsReflected(DtMomTallyList& list);
724 virtual void getObjectsUpdated(DtMomTallyList& list);
729 virtual int numObjectsOwned();
734 MAKRti::DtTransportType theType);
750 virtual void registerAssociateRegionForUpdates(
DtRtiObject&
object,
758 theAttributeRegionPairs,
759 const char * theObjectInstanceName=
NULL) {
return 0;}
762 virtual void associateRegionsForUpdates (
765 theAttributeRegionPairs) {}
768 virtual void unassociateRegionsForUpdates (
771 theAttributeRegionPairs) {}
774 virtual void subscribeObjectClassAttributesWithRegions (
777 theAttributeRegionPairs,
781 virtual void unsubscribeObjectClassAttributesWithRegions (
784 theAttributeHandleSetRegionHandleSetPairVector) {}
787 virtual void requestAttributeValueUpdateWithRegions (
790 theAttributeRegionPairs,
793 #elif defined(DtIFSPEC1516E)
798 theAttributeRegionPairs,
799 const char * theObjectInstanceName=
NULL) {
return 0;}
802 virtual void associateRegionsForUpdates (
805 theAttributeRegionPairs) {}
808 virtual void unassociateRegionsForUpdates (
811 theAttributeRegionPairs) {}
814 virtual void subscribeObjectClassAttributesWithRegions (
817 theAttributeRegionPairs,
819 MAKRti::DtString updateRateDesignator ) {}
822 virtual void unsubscribeObjectClassAttributesWithRegions (
825 theAttributeHandleSetRegionHandleSetPairVector) {}
828 virtual void requestAttributeValueUpdateWithRegions (
831 theAttributeRegionPairs,
839 DtRegion13 *regions[],
840 unsigned long numberOfHandles,
841 const char *objectName=
NULL) {
return 0; }
868 const DtRegion &theRegion) {}
880 virtual void checkPendingTsoRemoveObject();
891 virtual void prepareToRestore();
898 virtual void sendNotDiscoveredMsgForSmartForwarding(
903 virtual void sendNotDiscoveredMsgForSmartForwarding(
907 const DtAhvps* attributes);
918 static void setCreatorFunction(DtObjectMgrCreator creator);
924 static void setInternalCreatorFunction(DtObjectMgrCreator fn);
938 virtual void provideAttrValueUpdate(
const DtRtiObject* obj,
941 #elif defined(DtIFSPEC1516E)
942 virtual void provideAttrValueUpdate(
const DtRtiObject* obj,
946 virtual void provideAttrValueUpdate(
const DtRtiObject* obj,
953 virtual void remoteSubscribe(
960 virtual void remotePassiveSubscribe(
968 virtual void remoteUnsubscribe(
975 virtual void setDiscoveredClass(
DtRtiObject&
object,
980 virtual void processUpdate(
const DtUpdateMsg& msg);
981 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
982 virtual void processReserveName(DtReserveNameMsg
const& msg);
983 virtual void processNameReserved(DtNameReservedMsg
const& msg);
988 virtual void processRegister(
const DtRegObjMsg& msg);
994 virtual void processDeleteTso(
const DtDeleteTsoMsg& msg);
996 virtual void processLocDelete(
const DtLocDelMsg& msg);
1003 #ifdef DtIFSPEC1516E
1011 virtual void processAcquire(
1015 #elif defined(DtIFSPEC1516E)
1016 virtual void processAcquire(
1021 virtual void processAcquire(
1028 virtual void processCancelAcquire(
1034 virtual void processConfirmCancelAcquire(
1044 #elif defined(DtIFSPEC1516E)
1067 virtual void processNotifyAcquire(
1071 bool forceAcquire=
false);
1072 #elif defined(DtIFSPEC1516E)
1073 virtual void processNotifyAcquire(
1077 bool forceAcquire=
false);
1079 virtual void processNotifyAcquire(
1083 bool forceAcquire=
false);
1087 virtual void processNotifyAcquireForDirectedMessaging(
1099 #elif defined(DtIFSPEC1516E)
1123 bool isPassive,
bool replacement,
1126 bool isPassive,
bool replacement,
1141 #if defined (DtIFSPEC1516) || defined(DtIFSPEC1516E)
1143 virtual void sendBestEffortUpdateMsg(
1145 RTI_IFSPEC::LogicalTime
const * theTime,
1146 RTI_IFSPEC::VariableLengthData
const & tag,
1147 unsigned long serialNumber,
const MAKRti::DtInetAddr& destAddr,
1148 unsigned int offset=0);
1150 virtual void sendReliableUpdateMsg(
1153 RTI_IFSPEC::LogicalTime
const * theTime,
1154 RTI_IFSPEC::VariableLengthData
const & tag,
1155 unsigned long serialNumber);
1157 virtual void sendReserveNameMsg(std::string
const & theObjectInstanceName);
1161 RTI_IFSPEC::LogicalTime
const * theTime,
1162 RTI_IFSPEC::VariableLengthData
const & tag);
1164 virtual void sendOwnershipMsg(
1170 virtual void sendOwnershipMsg(
1177 #if defined(DtIFSPEC1516E)
1179 virtual void sendAttrQueryFoundMsg(
1183 DtTransportType transType );
1185 virtual void sendInterQueryFoundMsg(
1189 DtTransportType transType );
1191 void sendInterQueryMsg(
1196 #elif defined(DtIFSPEC13)
1197 virtual void sendBestEffortUpdateMsg(
1201 unsigned long serialNumber,
const MAKRti::DtInetAddr& destAddr,
1202 unsigned int offset=0);
1204 virtual void sendReliableUpdateMsg(
1209 unsigned long serialNumber);
1211 virtual void sendRequestMsg(
1224 virtual void sendOwnershipMsg(
1230 virtual void sendOwnershipMsg(
1239 virtual void sendPendingStartUpdates();
1242 virtual void sendPendingStopUpdates();
1245 virtual void sendPendingStartReg();
1248 virtual void sendPendingStopReg();
1251 virtual void sendPendingRegister();
1254 virtual void sendPendingSubscription();
1257 virtual void sendPendingRemovals();
1260 virtual void sendPendingRequestAttributes();
1263 virtual void sendPendingDiscoveries();
1266 virtual void invokePendingDivestNotification();
1269 virtual void purgeDeletedObjects();
1271 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
1273 virtual void resetNameReservation(std::string objectName);
1276 virtual void resetNameUsed(std::string objectName);
1281 virtual void throwIfAcquisitionPending(
1285 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
1288 virtual void confirmAllInstancesPendingDivestitures(
1294 virtual void confirmPendingDivestitures(
1301 virtual void cancelPendingConfirms(
1308 virtual void divestAllInstances(
1314 virtual void divestAllInstances();
1318 virtual void releaseAllAttributes(
DtRtiObject*
object);
1322 virtual void releaseOwnership(
1327 virtual void sendUpdateMessage(
DtUpdateMsg* update,
1329 MAKRti::DtTransportType trans,
unsigned int numberAttrs,
1330 MAKRti::DtInetAddr destAddr = DtInetAddr::inaddrAny(),
1331 unsigned int offset = 0);
1336 virtual void incrementUpdateTally(
DtHandle objectClass);
1337 virtual void incrementSentAttributesTally(
DtHandle objectClass,
1338 MAKRti::DtTransportType transport,
unsigned int numberAttrs);
1339 virtual void incrementReceivedTally(
DtHandle objectClass,
1340 MAKRti::DtTransportType transport,
unsigned int numberAttrs);
1345 virtual void deleteAllOwnedObjects();
1348 virtual void deleteObj(
DtRtiObject* obj,
bool isLocalDelete=
false);
1353 virtual void retainTsoDeletedObj(
DtRtiObject* obj,
1359 virtual void retainTsoRemovedObj(
DtRtiObject* obj,
1361 #elif defined(DtIFSPEC1516E)
1364 virtual void retainTsoDeletedObj(
DtRtiObject* obj,
1370 virtual void retainTsoRemovedObj(
DtRtiObject* obj,
1380 virtual void retainTsoRemovedObj(
DtRtiObject* obj,
1390 virtual void removeObjectAssociations(
DtRtiObject&
object);
1395 virtual void collectRemoteSubscriptions(
DtRtiObject&
object);
1402 virtual unsigned long nextOffsetId();
1422 const DtAhvps& inSet,
1430 const char* objName,
1435 bool federateOwnsPrivilegeToDelete);
1445 virtual void calculateRegionSet(
1447 #elif defined(DtIFSPEC1516E)
1448 virtual void calculateRegionSet(
1451 virtual void calculateRegionSet(
1452 unsigned long channel,
const DtAhvps& reflectSet) {}
1464 virtual void acquireAssociateRegionForUpdates(
1469 virtual void unassociateRegionForDivested(
1479 rti1516::ObjectInstanceHandle objectHandle,
1486 unsigned long serialNumber=0,
1488 #elif defined(DtIFSPEC1516E)
1490 rti1516e::ObjectInstanceHandle objectHandle,
1497 unsigned long serialNumber=0,
1502 DtAhvps
const& reflectedValues,
1505 char const * tag = 0,
1507 unsigned long serialNumber=0);
1512 virtual bool acceptObjectChannel(
unsigned long channel);
1516 virtual bool acceptRequestChannel(
unsigned long channel);
1525 virtual void removeClassMulticast(
DtObjectClassInfo* classDesc,
float rate=-1.0);
1535 virtual void destroyObjectLists();
1538 virtual unsigned long savePacketLength();
1548 static void processUpdate(
const DtUpdateMsg& msg,
void* usr);
1549 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
1550 static void processReserveName(DtReserveNameMsg
const& msg,
void* usr);
1551 static void processNameReserved(DtNameReservedMsg
const& msg,
void* usr);
1552 #ifdef DtIFSPEC1516E
1556 static void processRegister(
const DtRegObjMsg& msg,
void* usr);
1558 static void processDiscover(
const DtDiscObjMsg& msg,
void* usr);
1559 static void processRequestDiscover(
const DtReqDiscObjMsg& msg,
void* usr);
1560 static void processDelete(
const DtDeleteRoMsg& msg,
void* usr);
1562 static void processDeleteTso(
const DtDeleteTsoMsg& msg,
void* usr);
1564 static void processLocDelete(
const DtLocDelMsg& msg,
void* usr);
1565 static void processPub(
const DtPubObjMsg& msg,
void* usr);
1566 static void processUnpub(
const DtUnpubObjMsg& msg,
void* usr);
1567 static void processSub(
const DtSubObjMsg& msg,
void* usr);
1568 static void processUnsub(
const DtUnsubObjMsg& msg,
void* usr);
1569 static void processRequest(
const DtRequestMsg& msg,
void* usr);
1570 static void processOwnership(
const DtOwnershipMsg& msg,
void* usr);
1571 #ifdef DtIFSPEC1516E
1582 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
1584 std::set<std::string> myReservedNames;
1586 std::set<std::string> myUsedNames;
1588 std::set<std::string> myFailedNames;
1629 DtObjectHandleTimeMap myTsoDeletedObjects;
1630 DtObjectPtrTimeMap myTsoDeletedObjectCache;
1631 DtObjectPtrTimeMap myTsoRemovedObjectCache;