21 #include <vlutil/vlFedTarget.h>
30 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
31 #include <RTI/Enums.h>
32 #include <RTI/Exception.h>
43 #define DtHlaNamePrefix "HLA_"
63 class DtRegionEntryListWithAttributes;
98 typedef std::map<DtObjectInstanceHandle, DtAttributeHandleSet>
110 typedef std::map<DtObjectInstanceHandle, rti1516::LogicalTime const *> DtObjectHandleTimeMap;
111 typedef std::map<DtRtiObject*, rti1516::LogicalTime const *> DtObjectPtrTimeMap;
112 #elif defined(DtIFSPEC1516E)
113 typedef std::map<DtObjectInstanceHandle, rti1516e::LogicalTime const *> DtObjectHandleTimeMap;
114 typedef std::map<DtRtiObject*, rti1516e::LogicalTime const *> DtObjectPtrTimeMap;
116 typedef std::map<DtObjectInstanceHandle, RTI::FedTime const *> DtObjectHandleTimeMap;
117 typedef std::map<DtRtiObject*, RTI::FedTime const *> DtObjectPtrTimeMap;
142 virtual void postJoinInit();
145 virtual bool isPostJoined()
const;
169 inline DtTimeMgr* timeMgr() {
return federateMgr()->timeMgr();}
170 inline DtTimeMgr* timeMgr()
const {
return federateMgr()->timeMgr();}
174 virtual bool useHlaNamePrefix();
193 virtual void publish(
198 virtual void unpublishClass(
202 virtual void unpublishAttributes(
208 virtual void unpublishAttributes(
211 bool implicitlyUnpublishPrivilegeToDelete);
214 virtual void subscribe(
221 virtual void subscribe(
225 MAKRti::DtString updateRateDesignator);
229 virtual void unsubscribeClass(
233 virtual void unsubscribeAttributes(
238 virtual void unsubscribeAttributes(
244 virtual void reserveMultipleObjectInstanceName(
245 std::set<std::wstring>
const & theObjectInstanceNames);
250 virtual void reserveObjectInstanceName(
251 std::string
const & theObjectInstanceName);
253 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
257 std::string
const & theObjectInstanceName);
268 virtual void releaseObjectInstanceName(
269 std::string
const & theObjectInstanceName)
270 throw (rti1516e::ObjectInstanceNameNotReserved);
271 virtual void releaseMultipleObjectInstanceNames(
272 std::set< std::wstring >
const & theObjectInstanceNames )
273 throw (rti1516e::ObjectInstanceNameNotReserved);
274 virtual void queryAttributeTransportationType(
277 virtual void queryInteractionTransportationType(
297 virtual unsigned long deleteObj(
299 rti1516::LogicalTime
const * theTime,
300 rti1516::VariableLengthData
const & theTag);
301 #elif defined(DtIFSPEC1516E)
304 virtual unsigned long deleteObj(
306 rti1516e::LogicalTime
const * theTime,
307 rti1516e::VariableLengthData
const & theTag);
311 virtual unsigned long deleteObj(
313 RTI::FedTime
const * theTime,
314 char const * theTag);
322 virtual void requestObjectUpdate (
326 #elif defined(DtIFSPEC1516E)
327 virtual void requestObjectUpdate (
332 virtual void requestObjectUpdate (
340 virtual void requestClassUpdate (
345 #elif defined(DtIFSPEC1516E)
346 virtual void requestClassUpdate (
352 virtual void requestClassUpdate (
363 virtual unsigned long sendUpdate(
365 const DtAhvps& theAttrs,
366 rti1516::LogicalTime
const * theTime,
367 rti1516::VariableLengthData
const & tag);
368 #elif defined(DtIFSPEC1516E)
369 virtual unsigned long sendUpdate(
371 const DtAhvps& theAttrs,
372 rti1516e::LogicalTime
const * theTime,
373 rti1516e::VariableLengthData
const & tag);
375 virtual unsigned long sendUpdate(
377 const DtAhvps& theAttrs,
378 RTI::FedTime
const * theTime,
385 virtual unsigned long sendUpdate(
387 const DtAhvps& theAttrs,
388 rti1516::LogicalTime
const * theTime,
389 rti1516::VariableLengthData
const & tag);
390 #elif defined(DtIFSPEC1516E)
391 virtual unsigned long sendUpdate(
393 const DtAhvps& theAttrs,
394 rti1516e::LogicalTime
const * theTime,
395 rti1516e::VariableLengthData
const & tag);
397 virtual unsigned long sendUpdate(
399 const DtAhvps& theAttrs,
400 RTI::FedTime
const * theTime,
406 virtual void acquireAttrs(
411 #elif defined(DtIFSPEC1516E)
412 virtual void acquireAttrs(
418 virtual void acquireAttrs(
426 virtual void cancelAcquire(
432 virtual void divestOwnership(
440 virtual void confirmDivestiture (
443 rti1516::VariableLengthData
const & theUserSuppliedTag);
445 #elif defined(DtIFSPEC1516E)
447 virtual void divestOwnership(
455 virtual void confirmDivestiture (
458 rti1516e::VariableLengthData
const & theUserSuppliedTag);
462 virtual void divestOwnership(
470 virtual void cancelDivest(
516 virtual DtRtiObject* lrcManagedObj(
const char* name);
520 virtual void removeFromAllLists(
DtRtiObject*
object);
523 virtual void queryOwnership(
527 virtual bool isAcquistionPending();
533 virtual int evaluateSubscription(
DtRtiMsg const& msg);
536 virtual void autoProvideAttrValueUpdate();
557 virtual void sendRequestMsg(
560 rti1516::VariableLengthData
const & tag,
564 #elif defined(DtIFSPEC1516E)
567 virtual void sendRequestMsg(
570 rti1516e::VariableLengthData
const & tag,
577 virtual void addPendingStartUpdates(
582 virtual void addPendingStopUpdates(
615 bool isNonDiscovery);
618 virtual void processResign(
const DtResignMsg& msg);
626 #elif defined(DtIFSPEC1516E)
636 virtual void preTick();
639 virtual void postTick();
645 virtual void setRestoreInProgress(
bool isRestore);
646 virtual bool restoreInProgress()
const;
652 virtual void enableClassRelevanceSwitch();
653 virtual void disableClassRelevanceSwitch();
657 virtual void setClassRelevanceSwitch(
bool enableSwitch);
658 virtual bool classRelevanceSwitch();
663 virtual void enableAttributeRelevanceSwitch();
664 virtual void disableAttributeRelevanceSwitch();
668 virtual void setAttributeRelevanceSwitch(
bool enableSwitch);
669 virtual bool attributeRelevanceSwitch();
674 virtual void enableAttributeScopeSwitch();
675 virtual void disableAttributeScopeSwitch();
679 virtual void setAttributeScopeSwitch(
bool enableSwitch);
680 virtual bool attributeScopeSwitch();
695 MAKRti::DtString& objectName);
719 virtual void getObjectsOwned(DtMomTallyList& list);
720 virtual void getObjectsReflected(DtMomTallyList& list);
721 virtual void getObjectsUpdated(DtMomTallyList& list);
726 virtual int numObjectsOwned();
731 MAKRti::DtTransportType theType);
736 MAKRti::DtOrderType theType);
747 virtual void registerAssociateRegionForUpdates(
DtRtiObject&
object,
754 rti1516::AttributeHandleSetRegionHandleSetPairVector
const &
755 theAttributeRegionPairs,
756 const char * theObjectInstanceName=
NULL) {
return 0;}
759 virtual void associateRegionsForUpdates (
761 rti1516::AttributeHandleSetRegionHandleSetPairVector
const &
762 theAttributeRegionPairs) {}
765 virtual void unassociateRegionsForUpdates (
767 rti1516::AttributeHandleSetRegionHandleSetPairVector
const &
768 theAttributeRegionPairs) {}
771 virtual void subscribeObjectClassAttributesWithRegions (
773 rti1516::AttributeHandleSetRegionHandleSetPairVector
const &
774 theAttributeRegionPairs,
778 virtual void unsubscribeObjectClassAttributesWithRegions (
780 rti1516::AttributeHandleSetRegionHandleSetPairVector
const &
781 theAttributeHandleSetRegionHandleSetPairVector) {}
784 virtual void requestAttributeValueUpdateWithRegions (
786 rti1516::AttributeHandleSetRegionHandleSetPairVector
const &
787 theAttributeRegionPairs,
788 rti1516::VariableLengthData
const & theUserSuppliedTag) {}
790 #elif defined(DtIFSPEC1516E)
794 rti1516e::AttributeHandleSetRegionHandleSetPairVector
const &
795 theAttributeRegionPairs,
796 const char * theObjectInstanceName=
NULL) {
return 0;}
799 virtual void associateRegionsForUpdates (
801 rti1516e::AttributeHandleSetRegionHandleSetPairVector
const &
802 theAttributeRegionPairs) {}
805 virtual void unassociateRegionsForUpdates (
807 rti1516e::AttributeHandleSetRegionHandleSetPairVector
const &
808 theAttributeRegionPairs) {}
811 virtual void subscribeObjectClassAttributesWithRegions (
813 rti1516e::AttributeHandleSetRegionHandleSetPairVector
const &
814 theAttributeRegionPairs,
816 MAKRti::DtString updateRateDesignator ) {}
819 virtual void unsubscribeObjectClassAttributesWithRegions (
821 rti1516e::AttributeHandleSetRegionHandleSetPairVector
const &
822 theAttributeHandleSetRegionHandleSetPairVector) {}
825 virtual void requestAttributeValueUpdateWithRegions (
827 rti1516e::AttributeHandleSetRegionHandleSetPairVector
const &
828 theAttributeRegionPairs,
829 rti1516e::VariableLengthData
const & theUserSuppliedTag) {}
836 DtRegion13 *regions[],
837 unsigned long numberOfHandles,
838 const char *objectName=
NULL) {
return 0; }
865 const DtRegion &theRegion) {}
877 virtual void checkPendingTsoRemoveObject();
888 virtual void prepareToRestore();
895 virtual void sendNotDiscoveredMsgForSmartForwarding(
900 virtual void sendNotDiscoveredMsgForSmartForwarding(
904 const DtAhvps* attributes);
915 static void setCreatorFunction(DtObjectMgrCreator creator);
921 static void setInternalCreatorFunction(DtObjectMgrCreator fn);
936 virtual void provideAttrValueUpdate(
const DtRtiObject* obj,
938 rti1516::VariableLengthData
const & tag);
939 #elif defined(DtIFSPEC1516E)
940 virtual void provideAttrValueUpdate(
const DtRtiObject* obj,
942 rti1516e::VariableLengthData
const & tag);
944 virtual void provideAttrValueUpdate(
const DtRtiObject* obj,
951 virtual void remoteSubscribe(
958 virtual void remotePassiveSubscribe(
966 virtual void remoteUnsubscribe(
973 virtual void setDiscoveredClass(
DtRtiObject&
object,
978 virtual void processUpdate(
const DtUpdateMsg& msg);
984 virtual void processRegister(
const DtRegObjMsg& msg);
990 virtual void processDeleteTso(
const DtDeleteTsoMsg& msg);
992 virtual void processLocDelete(
const DtLocDelMsg& msg);
1007 virtual void processAcquire(
1010 rti1516::VariableLengthData
const & tag);
1011 #elif defined(DtIFSPEC1516E)
1012 virtual void processAcquire(
1015 rti1516e::VariableLengthData
const & tag);
1017 virtual void processAcquire(
1024 virtual void processCancelAcquire(
1030 virtual void processConfirmCancelAcquire(
1040 #elif defined(DtIFSPEC1516E)
1063 virtual void processNotifyAcquire(
1067 bool forceAcquire=
false);
1068 #elif defined(DtIFSPEC1516E)
1069 virtual void processNotifyAcquire(
1073 bool forceAcquire=
false);
1075 virtual void processNotifyAcquire(
1079 bool forceAcquire=
false);
1083 virtual void processNotifyAcquireForDirectedMessaging(
1093 rti1516::VariableLengthData
const & tag,
1095 #elif defined(DtIFSPEC1516E)
1098 rti1516e::VariableLengthData
const & tag,
1119 bool isPassive,
bool replacement,
1122 bool isPassive,
bool replacement,
1137 virtual void sendReserveNameMsg(std::string
const & theObjectInstanceName);
1138 #if defined (DtIFSPEC1516) || defined(DtIFSPEC1516E)
1140 virtual void sendBestEffortUpdateMsg(
1142 RTI_IFSPEC::LogicalTime
const * theTime,
1143 RTI_IFSPEC::VariableLengthData
const & tag,
1144 unsigned long serialNumber,
const MAKRti::DtInetAddr& destAddr,
1145 unsigned int offset=0);
1147 virtual void sendReliableUpdateMsg(
1150 RTI_IFSPEC::LogicalTime
const * theTime,
1151 RTI_IFSPEC::VariableLengthData
const & tag,
1152 unsigned long serialNumber);
1157 RTI_IFSPEC::LogicalTime
const * theTime,
1158 RTI_IFSPEC::VariableLengthData
const & tag);
1160 virtual void sendOwnershipMsg(
1166 virtual void sendOwnershipMsg(
1173 #if defined(DtIFSPEC1516E)
1175 virtual void sendAttrQueryFoundMsg(
1179 DtTransportType transType );
1181 virtual void sendInterQueryFoundMsg(
1185 DtTransportType transType );
1187 void sendInterQueryMsg(
1192 #elif defined(DtIFSPEC13)
1193 virtual void sendBestEffortUpdateMsg(
1195 RTI::FedTime
const * theTime,
1197 unsigned long serialNumber,
const MAKRti::DtInetAddr& destAddr,
1198 unsigned int offset=0);
1200 virtual void sendReliableUpdateMsg(
1203 RTI::FedTime
const * theTime,
1205 unsigned long serialNumber);
1207 virtual void sendRequestMsg(
1217 RTI::FedTime
const * theTime,
1220 virtual void sendOwnershipMsg(
1226 virtual void sendOwnershipMsg(
1235 virtual void sendPendingStartUpdates();
1238 virtual void sendPendingStopUpdates();
1241 virtual void sendPendingStartReg();
1244 virtual void sendPendingStopReg();
1247 virtual void sendPendingRegister();
1250 virtual void sendPendingSubscription();
1253 virtual void sendPendingRemovals();
1256 virtual void sendPendingRequestAttributes();
1259 virtual void sendPendingDiscoveries();
1262 virtual void invokePendingDivestNotification();
1265 virtual void purgeDeletedObjects();
1267 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
1269 virtual void resetNameReservation(std::string objectName);
1272 virtual void resetNameUsed(std::string objectName);
1277 virtual void throwIfAcquisitionPending(
1281 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
1284 virtual void confirmAllInstancesPendingDivestitures(
1290 virtual void confirmPendingDivestitures(
1297 virtual void cancelPendingConfirms(
1304 virtual void divestAllInstances(
1310 virtual void divestAllInstances();
1314 virtual void releaseAllAttributes(
DtRtiObject*
object);
1318 virtual void releaseOwnership(
1323 virtual void sendUpdateMessage(
DtUpdateMsg* update,
1325 MAKRti::DtTransportType trans,
unsigned int numberAttrs,
1326 MAKRti::DtInetAddr destAddr = DtInetAddr::inaddrAny(),
1327 unsigned int offset = 0);
1332 virtual void incrementUpdateTally(
DtHandle objectClass);
1333 virtual void incrementSentAttributesTally(
DtHandle objectClass,
1334 MAKRti::DtTransportType transport,
unsigned int numberAttrs);
1335 virtual void incrementReceivedTally(
DtHandle objectClass,
1336 MAKRti::DtTransportType transport,
unsigned int numberAttrs);
1341 virtual void deleteAllOwnedObjects();
1344 virtual void deleteObj(
DtRtiObject* obj,
bool isLocalDelete=
false);
1349 virtual void retainTsoDeletedObj(
DtRtiObject* obj,
1350 rti1516::LogicalTime
const & time);
1355 virtual void retainTsoRemovedObj(
DtRtiObject* obj,
1356 rti1516::LogicalTime
const & time);
1357 #elif defined(DtIFSPEC1516E)
1360 virtual void retainTsoDeletedObj(
DtRtiObject* obj,
1361 rti1516e::LogicalTime
const & time);
1366 virtual void retainTsoRemovedObj(
DtRtiObject* obj,
1367 rti1516e::LogicalTime
const & time);
1371 virtual void retainTsoDeletedObj(
DtRtiObject* obj, RTI::FedTime
const & time);
1376 virtual void retainTsoRemovedObj(
DtRtiObject* obj,
1377 RTI::FedTime
const & time);
1386 virtual void removeObjectAssociations(
DtRtiObject&
object);
1391 virtual void collectRemoteSubscriptions(
DtRtiObject&
object);
1406 virtual unsigned long nextOffsetId();
1427 const DtAhvps& inSet,
1435 const char* objName,
1440 bool federateOwnsPrivilegeToDelete);
1450 virtual void calculateRegionSet(
1451 unsigned long channel, rti1516::RegionHandleSet & regionHandles) {}
1452 #elif defined(DtIFSPEC1516E)
1453 virtual void calculateRegionSet(
1454 unsigned long channel, rti1516e::RegionHandleSet & regionHandles) {}
1456 virtual void calculateRegionSet(
1457 unsigned long channel,
const DtAhvps& reflectSet) {}
1469 virtual void acquireAssociateRegionForUpdates(
1474 virtual void unassociateRegionForDivested(
1484 rti1516::ObjectInstanceHandle objectHandle,
1485 rti1516::AttributeHandleValueMap
const& reflectedValues,
1486 rti1516::TransportationType transportType,
1489 rti1516::VariableLengthData
const & theTag,
1490 rti1516::LogicalTime
const * time=0,
1491 unsigned long serialNumber=0,
1492 rti1516::RegionHandleSet
const* regionHandles=0);
1493 #elif defined(DtIFSPEC1516E)
1495 rti1516e::ObjectInstanceHandle objectHandle,
1496 rti1516e::AttributeHandleValueMap
const& reflectedValues,
1497 rti1516e::TransportationType transportType,
1500 rti1516e::VariableLengthData
const & theTag,
1501 rti1516e::LogicalTime
const * time=0,
1502 unsigned long serialNumber=0,
1503 rti1516e::RegionHandleSet
const* regionHandles=0);
1507 DtAhvps
const& reflectedValues,
1510 char const * tag = 0,
1511 RTI::FedTime
const * time=0,
1512 unsigned long serialNumber=0);
1517 virtual bool acceptObjectChannel(
unsigned long channel);
1521 virtual bool acceptRequestChannel(
unsigned long channel);
1530 virtual void removeClassMulticast(
DtObjectClassInfo* classDesc,
float rate=-1.0);
1540 virtual void destroyObjectLists();
1543 virtual unsigned long savePacketLength();
1553 static void processUpdate(
const DtUpdateMsg& msg,
void* usr);
1556 #ifdef DtIFSPEC1516E
1559 static void processRegister(
const DtRegObjMsg& msg,
void* usr);
1561 static void processDiscover(
const DtDiscObjMsg& msg,
void* usr);
1562 static void processRequestDiscover(
const DtReqDiscObjMsg& msg,
void* usr);
1563 static void processDelete(
const DtDeleteRoMsg& msg,
void* usr);
1565 static void processDeleteTso(
const DtDeleteTsoMsg& msg,
void* usr);
1567 static void processLocDelete(
const DtLocDelMsg& msg,
void* usr);
1568 static void processPub(
const DtPubObjMsg& msg,
void* usr);
1569 static void processUnpub(
const DtUnpubObjMsg& msg,
void* usr);
1570 static void processSub(
const DtSubObjMsg& msg,
void* usr);
1571 static void processUnsub(
const DtUnsubObjMsg& msg,
void* usr);
1572 static void processRequest(
const DtRequestMsg& msg,
void* usr);
1573 static void processOwnership(
const DtOwnershipMsg& msg,
void* usr);
1574 #ifdef DtIFSPEC1516E
1632 DtObjectHandleTimeMap myTsoDeletedObjects;
1633 DtObjectPtrTimeMap myTsoDeletedObjectCache;
1634 DtObjectPtrTimeMap myTsoRemovedObjectCache;