![]() |
MAK RTIspy API Documentation for HLA Evolved
|
00001 /********************************************************************* 00002 ** Copyright (c) 1998 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: objMgr.h,v $ $Revision: 1.142 $ $State: Exp $ 00007 *********************************************************************/ 00008 00009 #ifndef objMgr_H_ 00010 #define objMgr_H_ 00011 00014 00015 #include "rtiMsConfig.h" 00016 #include "connection.h" 00017 #include "objClassInfo.h" 00018 #include "rtiObject.h" 00019 #include <vlutil/vlHashlist.h> 00020 #include <vlutil/vlFedTarget.h> 00021 #include "connectMgr.h" 00022 #include "RIDparams.h" 00023 #include "addrMap.h" 00024 #include "reqObjMsg.h" 00025 #include "ownerMsg.h" 00026 #include <set> 00027 #include <list> 00028 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00029 #include <RTI/Enums.h> 00030 #else 00031 #ifdef DtIFSPEC13DLC 00032 #include "RTI13.h" 00033 #define RTI rti13 00034 #else 00035 #include "RTI.hh" 00036 #endif 00037 #endif 00038 00040 #define DtHlaNamePrefix "HLA_" 00041 00042 class DtUpdateMsg; 00043 class DtReserveNameMsg; 00044 class DtNameReservedMsg; 00045 class DtRegObjMsg; 00046 class DtDiscObjMsg; 00047 class DtReqDiscObjMsg; 00048 class DtDeleteRoMsg; 00049 class DtDeleteTsoMsg; 00050 class DtLocDelMsg; 00051 class DtPubObjMsg; 00052 class DtUnpubObjMsg; 00053 class DtSubObjMsg; 00054 class DtUnsubObjMsg; 00055 class DtRequestMsg; 00056 class DtOwnershipMsg; 00057 class DtResignMsg; 00058 class DtRegion13; 00059 class DtRegionEntryListWithAttributes; 00060 class DtRtiSaveFile; 00061 class DtMomTallyList; 00062 class DtObjectMgr; 00063 class DtFomClassMgr; 00064 class DtTimeMgr; 00065 00066 #ifdef DtIFSPEC1516E 00067 class DtQueryTransportMsg; 00068 class DtQueryInterTransportMsg; 00069 class DtReserveMultiNameMsg; 00070 class DtMultiNameReservedMsg; 00071 class DtReleaseMultiNameMsg; 00072 #endif 00073 00075 enum DtDivestCondition 00076 { 00077 DtDivestUnconditional, 00078 DtDivestNegotiated, 00079 DtDivestOnlyIfWanted 00080 }; 00081 00087 class DT_DLL_LRC DtObjectMgr 00088 { 00089 public: 00090 00092 typedef DtObjectMgr* (*DtObjectMgrCreator)(DtFederateMgr* fedMgr); 00093 00095 typedef std::map<DtObjectInstanceHandle, DtAttributeHandleSet> 00096 DtPendingRequestAttrMap; 00097 00098 protected: 00099 typedef std::set< DtObjectClassHandle > DtObjectClassHandleSet; 00100 typedef std::set< DtObjectInstanceHandle > DtObjectInstanceHandleSet; 00101 typedef std::list< std::pair< DtObjectClassHandle, DtAttributeHandleSet > > DtObjClassAttrSetPairList; 00102 typedef std::list< std::pair< DtObjectInstanceHandle, DtAttributeHandleSet > > DtObjInstAttrSetPairList; 00103 #ifdef DtTIME 00104 #ifdef DtIFSPEC1516 00105 typedef std::map<DtObjectInstanceHandle, rti1516::LogicalTime const *> DtObjectHandleTimeMap; 00106 typedef std::map<DtRtiObject*, rti1516::LogicalTime const *> DtObjectPtrTimeMap; 00107 #elif defined(DtIFSPEC1516E) 00108 typedef std::map<DtObjectInstanceHandle, rti1516e::LogicalTime const *> DtObjectHandleTimeMap; 00109 typedef std::map<DtRtiObject*, rti1516e::LogicalTime const *> DtObjectPtrTimeMap; 00110 #else 00111 typedef std::map<DtObjectInstanceHandle, RTI::FedTime const *> DtObjectHandleTimeMap; 00112 typedef std::map<DtRtiObject*, RTI::FedTime const *> DtObjectPtrTimeMap; 00113 #endif 00114 #endif 00115 00116 protected: 00117 00119 DtObjectMgr(DtFederateMgr* fedMgr); 00120 00121 public: 00122 00124 virtual ~DtObjectMgr(); 00125 00126 private: 00127 00129 DtObjectMgr(DtObjectMgr const& ); 00130 00132 DtObjectMgr& operator= (DtObjectMgr const& ); 00133 00134 public: 00135 00137 virtual void postJoinInit(); 00138 00140 virtual bool isPostJoined() const; 00141 00143 virtual DtFederateMgr* federateMgr(); 00144 virtual DtFederateMgr* federateMgr() const; 00145 00147 virtual DtConnectionMgr* connectMgr(); 00148 virtual DtConnectionMgr* connectMgr() const; 00149 00151 00152 virtual DtRIDParameters* params(); 00153 virtual DtRIDParameters* params() const; 00155 00157 00158 virtual DtFomClassMgr* fom(); 00159 virtual DtFomClassMgr* fom() const; 00161 00162 #ifdef DtTIME 00163 00164 virtual DtTimeMgr* timeMgr(); 00165 virtual DtTimeMgr* timeMgr() const; 00166 #endif 00167 00169 virtual bool useHlaNamePrefix(); 00170 00172 virtual DtObjectInstanceHandle objectHandle(const char* name); 00173 00176 virtual const char* objectName(DtObjectInstanceHandle handle); 00177 00179 virtual DtObjectClassHandle objectClass(DtObjectInstanceHandle handle); 00180 00182 virtual int subscribed(DtObjectClassHandle handle); 00183 00185 virtual int published(DtObjectClassHandle handle); 00186 00188 virtual void publish( 00189 DtObjectClassHandle theObject, 00190 const DtAttributeHandleSet& attributeList); 00191 00193 virtual void unpublishClass( 00194 DtObjectClassHandle theObject); 00195 00197 virtual void unpublishAttributes( 00198 DtObjectClassHandle theClass, 00199 DtAttributeHandleSet const & attributeList); 00200 00203 virtual void unpublishAttributes( 00204 DtObjectClassInfo& classDesc, 00205 DtAttributeHandleSet const & attributeList, 00206 bool implicitlyUnpublishPrivilegeToDelete); 00207 00209 virtual void subscribe( 00210 DtObjectClassHandle theClass, 00211 const DtAttributeHandleSet& attributeList, 00212 bool active); 00213 00214 #ifdef DtIFSPEC1516E 00215 00216 virtual void subscribe( 00217 DtObjectClassHandle theClass, 00218 const DtAttributeHandleSet& attributeList, 00219 bool active, 00220 MAKRti::DtString updateRateDesignator); 00221 #endif 00222 00224 virtual void unsubscribeClass( 00225 DtObjectClassHandle theClass); 00226 00228 virtual void unsubscribeAttributes( 00229 DtObjectClassHandle theClass, 00230 DtAttributeHandleSet const & attributeList); 00231 00233 virtual void unsubscribeAttributes( 00234 DtObjectClassInfo& classDesc, 00235 DtAttributeHandleSet const & attributeList); 00236 00237 #ifdef DtIFSPEC1516E 00238 00239 virtual void reserveMultipleObjectInstanceName( 00240 std::set<std::wstring> const & theObjectInstanceNames); 00241 #endif 00242 00243 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00244 00245 virtual void reserveObjectInstanceName ( 00246 std::string const & theObjectInstanceName); 00247 00249 virtual DtObjectInstanceHandle registerObj( 00250 DtObjectClassHandle theClass, 00251 std::string const & theObjectInstanceName); 00252 00253 #else 00254 00255 virtual DtObjectInstanceHandle registerObj( 00256 DtObjectClassHandle theClass, 00257 const char* name); 00258 #endif 00259 00260 #ifdef DtIFSPEC1516E 00261 00262 virtual void releaseObjectInstanceName( 00263 std::string const & theObjectInstanceName); 00264 virtual void releaseMultipleObjectInstanceNames( 00265 std::set< std::wstring > const & theObjectInstanceNames ); 00266 virtual void queryAttributeTransportationType( 00267 DtObjectInstanceHandle theObject, 00268 DtAttributeHandle theAttribute); 00269 virtual void queryInteractionTransportationType( 00270 DtFederateHandle theFederate, 00271 DtInteractionClassHandle theInteraction); 00272 virtual void releaseDenied( DtObjectInstanceHandle objectHandle, 00273 const DtAttributeHandleSet & attrs ); 00274 virtual double getUpdateRateForAttribute( DtObjectInstanceHandle objHandle, 00275 DtAttributeHandle attrHandle ); 00276 #endif 00277 00279 virtual DtObjectInstanceHandle registerObj( 00280 DtObjectClassHandle theClass); 00281 00282 #ifdef DtIFSPEC1516E 00283 bool holdsPrivilegeToDelete( const DtObjectInstanceHandle & id ); 00284 #endif 00285 00286 #ifdef DtIFSPEC1516 00287 00288 00289 virtual unsigned long deleteObj( 00290 DtObjectInstanceHandle objectID, 00291 rti1516::LogicalTime const * theTime, 00292 rti1516::VariableLengthData const & theTag); 00293 #elif defined(DtIFSPEC1516E) 00294 00295 00296 virtual unsigned long deleteObj( 00297 DtObjectInstanceHandle objectID, 00298 rti1516e::LogicalTime const * theTime, 00299 rti1516e::VariableLengthData const & theTag); 00300 #else 00301 00302 00303 virtual unsigned long deleteObj( 00304 DtObjectInstanceHandle objectID, 00305 RTI::FedTime const * theTime, 00306 char const * theTag); 00307 #endif 00308 00310 virtual void localDeleteObj(DtObjectInstanceHandle obj); 00311 00313 #ifdef DtIFSPEC1516 00314 virtual void requestObjectUpdate ( 00315 DtObjectInstanceHandle theObject, 00316 const DtAttributeHandleSet& theAttributes, 00317 rti1516::VariableLengthData const & tag=DtRtiMsg::theDefaultTag); 00318 #elif defined(DtIFSPEC1516E) 00319 virtual void requestObjectUpdate ( 00320 DtObjectInstanceHandle theObject, 00321 const DtAttributeHandleSet& theAttributes, 00322 rti1516e::VariableLengthData const & tag=DtRtiMsg::theDefaultTag); 00323 #else 00324 virtual void requestObjectUpdate ( 00325 DtObjectInstanceHandle theObject, 00326 const DtAttributeHandleSet& theAttributes, 00327 char const * tag=DtRtiMsg::theDefaultTag); 00328 #endif 00329 00331 #ifdef DtIFSPEC1516 00332 virtual void requestClassUpdate ( 00333 DtObjectClassHandle theClass, 00334 const DtAttributeHandleSet& theAttributes, 00335 rti1516::VariableLengthData const & tag=DtRtiMsg::theDefaultTag, 00336 DtHandle regionSetHandle=DtDefaultRegionSetHandle); 00337 #elif defined(DtIFSPEC1516E) 00338 virtual void requestClassUpdate ( 00339 DtObjectClassHandle theClass, 00340 const DtAttributeHandleSet& theAttributes, 00341 rti1516e::VariableLengthData const & tag=DtRtiMsg::theDefaultTag, 00342 DtHandle regionSetHandle=DtDefaultRegionSetHandle); 00343 #else 00344 virtual void requestClassUpdate ( 00345 DtObjectClassHandle theClass, 00346 const DtAttributeHandleSet& theAttributes, 00347 char const * tag=DtRtiMsg::theDefaultTag, 00348 DtHandle regionSetHandle=DtDefaultRegionSetHandle); 00349 #endif 00350 00354 #ifdef DtIFSPEC1516 00355 virtual unsigned long sendUpdate( 00356 DtObjectInstanceHandle theObject, 00357 const DtAhvps& theAttrs, 00358 rti1516::LogicalTime const * theTime, 00359 rti1516::VariableLengthData const & tag); 00360 #elif defined(DtIFSPEC1516E) 00361 virtual unsigned long sendUpdate( 00362 DtObjectInstanceHandle theObject, 00363 const DtAhvps& theAttrs, 00364 rti1516e::LogicalTime const * theTime, 00365 rti1516e::VariableLengthData const & tag); 00366 #else 00367 virtual unsigned long sendUpdate( 00368 DtObjectInstanceHandle theObject, 00369 const DtAhvps& theAttrs, 00370 RTI::FedTime const * theTime, 00371 char const * tag); 00372 #endif 00373 00376 #ifdef DtIFSPEC1516 00377 virtual unsigned long sendUpdate( 00378 DtRtiObject* theObject, 00379 const DtAhvps& theAttrs, 00380 rti1516::LogicalTime const * theTime, 00381 rti1516::VariableLengthData const & tag); 00382 #elif defined(DtIFSPEC1516E) 00383 virtual unsigned long sendUpdate( 00384 DtRtiObject* theObject, 00385 const DtAhvps& theAttrs, 00386 rti1516e::LogicalTime const * theTime, 00387 rti1516e::VariableLengthData const & tag); 00388 #else 00389 virtual unsigned long sendUpdate( 00390 DtRtiObject* theObject, 00391 const DtAhvps& theAttrs, 00392 RTI::FedTime const * theTime, 00393 char const * tag); 00394 #endif 00395 00397 #ifdef DtIFSPEC1516 00398 virtual void acquireAttrs( 00399 DtObjectInstanceHandle objHand, 00400 const DtAttributeHandleSet& desiredAttributes, 00401 bool onlyIfAvail, 00402 rti1516::VariableLengthData const & tag=DtRtiMsg::theDefaultTag); 00403 #elif defined(DtIFSPEC1516E) 00404 virtual void acquireAttrs( 00405 DtObjectInstanceHandle objHand, 00406 const DtAttributeHandleSet& desiredAttributes, 00407 bool onlyIfAvail, 00408 rti1516e::VariableLengthData const & tag=DtRtiMsg::theDefaultTag); 00409 #else 00410 virtual void acquireAttrs( 00411 DtObjectInstanceHandle objHand, 00412 const DtAttributeHandleSet& desiredAttributes, 00413 bool onlyIfAvail, 00414 char const * tag=DtRtiMsg::theDefaultTag); 00415 #endif 00416 00418 virtual void cancelAcquire( 00419 DtObjectInstanceHandle objHand, 00420 const DtAttributeHandleSet& attrs); 00421 00422 #ifdef DtIFSPEC1516 00423 00424 virtual void divestOwnership( 00425 DtObjectInstanceHandle objHand, 00426 const DtAttributeHandleSet& attrs, 00427 DtDivestCondition condition, 00428 DtAttributeHandleSet& divestedSet, 00429 rti1516::VariableLengthData const & tag=DtRtiMsg::theDefaultTag); 00430 00432 virtual void confirmDivestiture ( 00433 DtObjectInstanceHandle objHand, 00434 const DtAttributeHandleSet& attrs, 00435 rti1516::VariableLengthData const & theUserSuppliedTag); 00436 00437 #elif defined(DtIFSPEC1516E) 00438 00439 virtual void divestOwnership( 00440 DtObjectInstanceHandle objHand, 00441 const DtAttributeHandleSet& attrs, 00442 DtDivestCondition condition, 00443 DtAttributeHandleSet& divestedSet, 00444 rti1516e::VariableLengthData const & tag=DtRtiMsg::theDefaultTag); 00445 00447 virtual void confirmDivestiture ( 00448 DtObjectInstanceHandle objHand, 00449 const DtAttributeHandleSet& attrs, 00450 rti1516e::VariableLengthData const & theUserSuppliedTag); 00451 00452 #else 00453 00454 virtual void divestOwnership( 00455 DtObjectInstanceHandle objHand, 00456 const DtAttributeHandleSet& attrs, 00457 DtDivestCondition condition, 00458 char const * tag=DtRtiMsg::theDefaultTag); 00459 #endif 00460 00462 virtual void cancelDivest( 00463 DtObjectInstanceHandle objHand, 00464 const DtAttributeHandleSet& attrs); 00465 00467 virtual DtAttributeHandleSet* releaseResponse( 00468 DtObjectInstanceHandle objHand, 00469 const DtAttributeHandleSet& attrs); 00470 00472 00473 00474 virtual void addAllObj(DtRtiObject* obj); 00475 virtual void removeAllObj(DtObjectInstanceHandle obj); 00476 virtual const MAKRti::DtList& allObjects() const; 00477 virtual DtRtiObject* allObj(DtObjectInstanceHandle id); 00478 virtual DtRtiObject* allObj(const char* name); 00480 00482 00483 00484 virtual void addKnownObj(DtRtiObject* obj); 00485 virtual void removeKnownObj(DtObjectInstanceHandle obj); 00486 virtual const MAKRti::DtList& knownObjects() const; 00487 virtual DtRtiObject* knownObj(DtObjectInstanceHandle id); 00488 virtual DtRtiObject* knownObj(const char* name); 00490 00492 00493 00494 virtual void addOwnedObj(DtRtiObject* obj); 00495 virtual void removeOwnedObj(DtObjectInstanceHandle obj); 00496 virtual const MAKRti::DtList& ownedObjects() const; 00497 virtual DtRtiObject* ownedObj(DtObjectInstanceHandle id); 00498 virtual DtRtiObject* ownedObj(const char* name); 00500 00502 00503 00504 virtual void addLrcManagedObj(DtRtiObject* obj); 00505 virtual void removeLrcManagedObj(DtObjectInstanceHandle obj); 00506 virtual const MAKRti::DtList& lrcManagedObjects() const; 00507 virtual DtRtiObject* lrcManagedObj(DtObjectInstanceHandle id); 00508 virtual DtRtiObject* lrcManagedObj(const char* name); 00510 00512 virtual void removeFromAllLists(DtRtiObject* object); 00513 00515 virtual void queryOwnership( 00516 DtObjectInstanceHandle obj, DtAttributeHandle attr); 00517 00519 virtual bool isAcquistionPending(); 00520 00522 virtual void autoProvideAttrValueUpdate(); 00523 00527 virtual void sendRegister(DtRtiObject* obj); 00528 00532 virtual void resendRegister(DtRtiObject* obj); 00533 00534 #ifdef DtIFSPEC1516 00535 00536 00537 virtual void sendRequestMsg( 00538 DtRequestType type, unsigned long idOrClass, 00539 const DtAttributeHandleSet& theSet, 00540 rti1516::VariableLengthData const & tag, 00541 bool anonymous, 00542 DtHandle regionSetHandle = DtRtiMsg::theDefaultRegionSetHandle); 00543 #elif defined(DtIFSPEC1516E) 00544 00545 00546 virtual void sendRequestMsg( 00547 DtRequestType type, unsigned long idOrClass, 00548 const DtAttributeHandleSet& theSet, 00549 rti1516e::VariableLengthData const & tag, 00550 bool anonymous, 00551 DtHandle regionSetHandle = DtRtiMsg::theDefaultRegionSetHandle); 00552 #endif 00553 00555 virtual void addPendingStartUpdates( 00556 DtObjectInstanceHandle obj, 00557 const DtAttributeHandleSet& attributeList); 00558 00560 virtual void addPendingStopUpdates( 00561 DtObjectClassHandle theClass, 00562 const DtAttributeHandleSet& attributeList); 00563 00565 virtual void addPendingStartReg(DtObjectClassHandle theClass); 00566 00568 virtual void addPendingStopReg(DtObjectClassHandle theClass); 00569 00571 virtual void addPendingRegister(DtObjectClassHandle theClass); 00572 00574 virtual void addPendingSubscription(DtObjectClassHandle theClass); 00575 00577 virtual void addPendingRegisterForObject(DtObjectInstanceHandle objHandle); 00578 00580 virtual void addPendingRemoval(DtObjectInstanceHandle id); 00581 00583 virtual void addPendingRequestAttrs(DtObjectInstanceHandle objectHandle, 00584 DtAttributeHandleSet attributes); 00585 00587 virtual void addPendingDivestNotification(DtObjectInstanceHandle objectHandle, 00588 DtAttributeHandleSet attributes); 00589 00591 virtual void addPendingDiscovery(DtObjectInstanceHandle objectHandle, 00592 DtObjectClassHandle classHandle, DtFederateHandle federate, 00593 bool isNonDiscovery); 00594 00596 virtual void processResign(const DtResignMsg& msg); 00597 00599 00600 00601 #ifdef DtIFSPEC1516 00602 void testResign(rti1516::ResignAction const & theAction); 00603 void prepareToResign(rti1516::ResignAction const & theAction); 00604 #elif defined(DtIFSPEC1516E) 00605 void testResign(rti1516e::ResignAction const & theAction); 00606 void prepareToResign(rti1516e::ResignAction const & theAction); 00607 #else 00608 void testResign(RTI::ResignAction const & theAction); 00609 void prepareToResign(RTI::ResignAction const & theAction); 00610 #endif 00611 00612 00614 virtual void preTick(); 00615 00617 virtual void postTick(); 00618 00621 00622 00623 virtual void setRestoreInProgress(bool isRestore); 00624 virtual bool restoreInProgress() const; 00626 00628 00629 00630 virtual void enableClassRelevanceSwitch(); 00631 virtual void disableClassRelevanceSwitch(); 00633 00635 virtual void setClassRelevanceSwitch(bool enableSwitch); 00636 virtual bool classRelevanceSwitch(); 00637 00639 00640 00641 virtual void enableAttributeRelevanceSwitch(); 00642 virtual void disableAttributeRelevanceSwitch(); 00644 00646 virtual void setAttributeRelevanceSwitch(bool enableSwitch); 00647 virtual bool attributeRelevanceSwitch(); 00648 00650 00651 00652 virtual void enableAttributeScopeSwitch(); 00653 virtual void disableAttributeScopeSwitch(); 00655 00657 virtual void setAttributeScopeSwitch(bool enableSwitch); 00658 virtual bool attributeScopeSwitch(); 00659 00661 virtual void turnUpdatesOn(DtRtiObject const& object, DtAttributeHandleSet const& oldOnSet); 00662 00664 virtual void turnUpdatesOff(DtRtiObject const& object, DtAttributeHandleSet const& oldOnSet); 00665 00668 virtual DtObjectInstanceHandle uniqueHandle(); 00669 00672 virtual void getUniqueName(DtObjectInstanceHandle handle, 00673 MAKRti::DtString& objectName); 00674 00677 virtual bool objectWasCreatedByFederate( DtRtiObject const& obj, DtFederateHandle const& fedHandle ); 00678 00683 virtual DtRtiObject* processNewObj(DtObjectInstanceHandle objHand, 00684 DtObjectClassHandle realClass, const char* name, 00685 const DtAttributeHandleSet& inSet, 00686 DtHandle regSetHandle, 00687 DtFederateHandle sourceFederate); 00688 00690 virtual DtObjectClassInfo* firstSubscribedClass( 00691 DtObjectClassInfo* classDesc, 00692 DtHandle regSetHandle); 00693 00694 #ifdef DtMOM 00695 00696 00697 virtual void getObjectsOwned(DtMomTallyList& list); 00698 virtual void getObjectsReflected(DtMomTallyList& list); 00699 virtual void getObjectsUpdated(DtMomTallyList& list); 00701 #endif 00702 00704 virtual int numObjectsOwned(); 00705 00707 virtual void setAttributeTransportType (DtObjectInstanceHandle theObject, 00708 const DtAttributeHandleSet& theAttributes, 00709 MAKRti::DtTransportType theType); 00710 00712 virtual void setAttributeOrderType (DtObjectInstanceHandle theObject, 00713 const DtAttributeHandleSet& theAttributes, 00714 MAKRti::DtOrderType theType); 00715 00716 00717 #ifdef DDM 00718 00719 00720 00721 00722 00725 virtual void registerAssociateRegionForUpdates(DtRtiObject& object, 00726 DtAttributeHandleSet const& attributes, DtRegion& region) {}; 00727 00728 #ifdef DtIFSPEC1516 00729 00730 virtual DtObjectInstanceHandle registerObjectInstanceWithRegions ( 00731 DtObjectClassHandle theClass, 00732 rti1516::AttributeHandleSetRegionHandleSetPairVector const & 00733 theAttributeRegionPairs, 00734 const char * theObjectInstanceName=NULL) { return 0;} 00735 00737 virtual void associateRegionsForUpdates ( 00738 DtObjectInstanceHandle theObject, 00739 rti1516::AttributeHandleSetRegionHandleSetPairVector const & 00740 theAttributeRegionPairs) {} 00741 00743 virtual void unassociateRegionsForUpdates ( 00744 DtObjectInstanceHandle theObject, 00745 rti1516::AttributeHandleSetRegionHandleSetPairVector const & 00746 theAttributeRegionPairs) {} 00747 00749 virtual void subscribeObjectClassAttributesWithRegions ( 00750 DtObjectClassHandle theClass, 00751 rti1516::AttributeHandleSetRegionHandleSetPairVector const & 00752 theAttributeRegionPairs, 00753 bool active) {} 00754 00756 virtual void unsubscribeObjectClassAttributesWithRegions ( 00757 DtObjectClassHandle theClass, 00758 rti1516::AttributeHandleSetRegionHandleSetPairVector const & 00759 theAttributeHandleSetRegionHandleSetPairVector) {} 00760 00762 virtual void requestAttributeValueUpdateWithRegions ( 00763 DtObjectClassHandle theClass, 00764 rti1516::AttributeHandleSetRegionHandleSetPairVector const & 00765 theAttributeRegionPairs, 00766 rti1516::VariableLengthData const & theUserSuppliedTag) {} 00767 00768 #elif defined(DtIFSPEC1516E) 00769 00770 virtual DtObjectInstanceHandle registerObjectInstanceWithRegions ( 00771 DtObjectClassHandle theClass, 00772 rti1516e::AttributeHandleSetRegionHandleSetPairVector const & 00773 theAttributeRegionPairs, 00774 const char * theObjectInstanceName=NULL) { return 0;} 00775 00777 virtual void associateRegionsForUpdates ( 00778 DtObjectInstanceHandle theObject, 00779 rti1516e::AttributeHandleSetRegionHandleSetPairVector const & 00780 theAttributeRegionPairs) {} 00781 00783 virtual void unassociateRegionsForUpdates ( 00784 DtObjectInstanceHandle theObject, 00785 rti1516e::AttributeHandleSetRegionHandleSetPairVector const & 00786 theAttributeRegionPairs) {} 00787 00789 virtual void subscribeObjectClassAttributesWithRegions ( 00790 DtObjectClassHandle theClass, 00791 rti1516e::AttributeHandleSetRegionHandleSetPairVector const & 00792 theAttributeRegionPairs, 00793 bool active, 00794 MAKRti::DtString updateRateDesignator ) {} 00795 00797 virtual void unsubscribeObjectClassAttributesWithRegions ( 00798 DtObjectClassHandle theClass, 00799 rti1516e::AttributeHandleSetRegionHandleSetPairVector const & 00800 theAttributeHandleSetRegionHandleSetPairVector) {} 00801 00803 virtual void requestAttributeValueUpdateWithRegions ( 00804 DtObjectClassHandle theClass, 00805 rti1516e::AttributeHandleSetRegionHandleSetPairVector const & 00806 theAttributeRegionPairs, 00807 rti1516e::VariableLengthData const & theUserSuppliedTag) {} 00808 00809 #else 00810 00811 virtual DtObjectInstanceHandle registerObjectInstanceWithRegion( 00812 DtObjectClassHandle objectClass, 00813 DtAttributeHandle attributes[], 00814 DtRegion13 *regions[], 00815 unsigned long numberOfHandles, 00816 const char *objectName=NULL) { return 0; } 00817 00819 virtual void associateRegionForUpdates( 00820 DtRegion& theRegion, 00821 DtObjectInstanceHandle theObject, 00822 const DtAttributeHandleSet& theAttributes) {} 00823 00825 virtual void unassociateRegionForUpdates( 00826 DtRegion& theRegion, DtObjectInstanceHandle theObject) {} 00827 00829 virtual void subscribeObjectClassAttributesWithRegion( 00830 DtObjectClassHandle theClass, 00831 DtRegion &theRegion, 00832 const DtAttributeHandleSet &attributeList, 00833 bool active) {} 00834 00836 virtual void unsubscribeObjectClassWithRegion( 00837 DtObjectClassHandle theClass, DtRegion &theRegion) {} 00838 00840 virtual void requestClassAttributeValueUpdateWithRegion ( 00841 DtObjectClassHandle theClass, 00842 const DtAttributeHandleSet &theAttributes, 00843 const DtRegion &theRegion) {} 00844 00845 #endif //! DtIFSPEC1516 00846 00848 00849 #endif //! DDM 00850 00851 #ifdef DtTIME 00852 00853 00854 00855 virtual void checkPendingTsoRemoveObject(); 00856 00859 virtual bool retractTsoRemoveObject(DtMessageRetractionHandle const& retractionHandle); 00860 #endif 00861 00863 virtual bool save(DtRtiSaveFile& file); 00864 00866 virtual void prepareToRestore(); 00867 00869 virtual bool restore( DtRtiSaveFile& file ); 00870 00873 virtual void sendNotDiscoveredMsgForSmartForwarding( 00874 DtObjectInstanceHandle handle, 00875 const DtObjectClassInfo& classInfo, 00876 DtFederateHandle federate, 00877 const DtAttributeHandleSet* attributes = 0); 00878 virtual void sendNotDiscoveredMsgForSmartForwarding( 00879 DtObjectInstanceHandle handle, 00880 const DtObjectClassInfo& classInfo, 00881 DtFederateHandle federate, 00882 const DtAhvps* attributes); 00883 00884 public: 00885 00889 static DtObjectMgr* create(DtFederateMgr* fedMgr); 00890 00893 static void setCreatorFunction(DtObjectMgrCreator creator); 00894 00899 static void setInternalCreatorFunction(DtObjectMgrCreator fn); 00900 00902 virtual void ignoreNextUpdate(DtObjectInstanceHandle hdl); 00903 00904 protected: 00905 00907 #ifdef DtIFSPEC1516 00908 virtual void provideAttrValueUpdate(const DtRtiObject* obj, 00909 const DtAttributeHandleSet& attrHandles, 00910 rti1516::VariableLengthData const & tag); 00911 #elif defined(DtIFSPEC1516E) 00912 virtual void provideAttrValueUpdate(const DtRtiObject* obj, 00913 const DtAttributeHandleSet& attrHandles, 00914 rti1516e::VariableLengthData const & tag); 00915 #else 00916 virtual void provideAttrValueUpdate(const DtRtiObject* obj, 00917 const DtAttributeHandleSet& attrHandles, 00918 char const * tag); 00919 #endif 00920 00923 virtual void remoteSubscribe( 00924 DtObjectClassInfo& classDesc, 00925 const DtAttributeHandleSet& attrs, 00926 DtFederateHandle fedHandle, 00927 bool isReplacement); 00928 00930 virtual void remotePassiveSubscribe( 00931 DtObjectClassInfo& classDesc, 00932 const DtAttributeHandleSet& attrs, 00933 DtFederateHandle fedHandle, 00934 bool isReplacement); 00935 00938 virtual void remoteUnsubscribe( 00939 DtObjectClassHandle classHandle, 00940 const DtAttributeHandleSet& attrs, 00941 DtFederateHandle fedHandle); 00942 00945 virtual void setDiscoveredClass(DtRtiObject& object, 00946 DtFederateHandle federateHandle, DtObjectClassHandle classHandle); 00947 00949 00950 virtual void processUpdate(const DtUpdateMsg& msg); 00951 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00952 virtual void processReserveName(DtReserveNameMsg const& msg); 00953 virtual void processNameReserved(DtNameReservedMsg const& msg); 00954 #ifdef DtIFSPEC1516E 00955 virtual void processMultiNameReserved( DtMultiNameReservedMsg const& msg ); 00956 #endif 00957 #endif 00958 virtual void processRegister(const DtRegObjMsg& msg); 00959 virtual void processDiscover(const DtDiscObjMsg& msg); 00960 virtual void processRequestDiscover(const DtReqDiscObjMsg& msg); 00961 virtual void processDelete(const DtDeleteRoMsg& msg); 00962 #ifdef DtTIME 00963 virtual void processDeleteTso(const DtDeleteTsoMsg& msg); 00964 #endif 00965 virtual void processLocDelete(const DtLocDelMsg& msg); 00966 virtual void processPub(const DtPubObjMsg& msg); 00967 virtual void processUnpub(const DtUnpubObjMsg& msg); 00968 virtual void processSub(const DtSubObjMsg& msg); 00969 virtual void processUnsub(const DtUnsubObjMsg& msg); 00970 virtual void processRequest(const DtRequestMsg& msg); 00971 virtual void processOwnership(const DtOwnershipMsg& msg); 00972 #ifdef DtIFSPEC1516E 00973 virtual void processQueryTransport(const DtQueryTransportMsg& msg); 00974 virtual void processQueryInterTransport(const DtQueryInterTransportMsg& msg); 00975 #endif 00976 00977 00979 #ifdef DtIFSPEC1516 00980 virtual void processAcquire( 00981 DtObjectInstanceHandle objHand, const DtAttributeHandleSet& attrs, 00982 DtFederateHandle fed, bool onlyIfAvail, 00983 rti1516::VariableLengthData const & tag); 00984 #elif defined(DtIFSPEC1516E) 00985 virtual void processAcquire( 00986 DtObjectInstanceHandle objHand, const DtAttributeHandleSet& attrs, 00987 DtFederateHandle fed, bool onlyIfAvail, 00988 rti1516e::VariableLengthData const & tag); 00989 #else 00990 virtual void processAcquire( 00991 DtObjectInstanceHandle objHand, const DtAttributeHandleSet& attrs, 00992 DtFederateHandle fed, bool onlyIfAvail, 00993 char const * tag); 00994 #endif 00995 00997 virtual void processCancelAcquire( 00998 DtObjectInstanceHandle objHand, 00999 const DtAttributeHandleSet& attrs, 01000 DtFederateHandle fed); 01001 01003 virtual void processConfirmCancelAcquire( 01004 DtObjectInstanceHandle objHand, 01005 const DtAttributeHandleSet& attrs); 01006 01008 #ifdef DtIFSPEC1516 01009 virtual void processDivest(DtObjectInstanceHandle objHand, 01010 const DtAttributeHandleSet& attrs, DtFederateHandle fed, 01011 bool negotiated, 01012 rti1516::VariableLengthData const & tag=DtRtiMsg::theDefaultTag); 01013 #elif defined(DtIFSPEC1516E) 01014 virtual void processDivest(DtObjectInstanceHandle objHand, 01015 const DtAttributeHandleSet& attrs, DtFederateHandle fed, 01016 bool negotiated, 01017 rti1516e::VariableLengthData const & tag=DtRtiMsg::theDefaultTag); 01018 #else 01019 virtual void processDivest(DtObjectInstanceHandle objHand, 01020 const DtAttributeHandleSet& attrs, DtFederateHandle fed, 01021 bool negotiated, 01022 char const * tag=DtRtiMsg::theDefaultTag); 01023 #endif 01024 01027 virtual void notifyDivestedAttributes(DtObjectClassHandle objectClass, 01028 DtAttributeHandleSet const& attrs); 01029 01031 virtual void processQueryOwner(DtObjectInstanceHandle objHand, 01032 DtAttributeHandle attr, DtFederateHandle requestor); 01033 01035 #ifdef DtIFSPEC1516 01036 virtual void processNotifyAcquire( 01037 DtObjectInstanceHandle objHand, 01038 const DtAttributeHandleSet& attrs, 01039 rti1516::VariableLengthData const & tag=DtRtiMsg::theDefaultTag, 01040 bool forceAcquire=false); 01041 #elif defined(DtIFSPEC1516E) 01042 virtual void processNotifyAcquire( 01043 DtObjectInstanceHandle objHand, 01044 const DtAttributeHandleSet& attrs, 01045 rti1516e::VariableLengthData const & tag=DtRtiMsg::theDefaultTag, 01046 bool forceAcquire=false); 01047 #else 01048 virtual void processNotifyAcquire( 01049 DtObjectInstanceHandle objHand, 01050 const DtAttributeHandleSet& attrs, 01051 char const * tag=DtRtiMsg::theDefaultTag, 01052 bool forceAcquire=false); 01053 #endif 01054 01056 #ifdef DtIFSPEC1516 01057 virtual void processGiveToLrc(DtObjectInstanceHandle objHand, 01058 const DtAttributeHandleSet& attrs, 01059 rti1516::VariableLengthData const & tag, 01060 DtHandle hand); 01061 #elif defined(DtIFSPEC1516E) 01062 virtual void processGiveToLrc(DtObjectInstanceHandle objHand, 01063 const DtAttributeHandleSet& attrs, 01064 rti1516e::VariableLengthData const & tag, 01065 DtHandle hand); 01066 #else 01067 virtual void processGiveToLrc(DtObjectInstanceHandle objHand, 01068 const DtAttributeHandleSet& attrs, 01069 char const * tag, 01070 DtHandle hand); 01071 #endif 01072 01074 virtual void resetOwner(DtFederateHandle fedHandle, DtObjectInstanceHandle objHandle); 01075 01077 01078 virtual void sendPublishMsg(DtObjectClassHandle handle, 01079 const DtAttributeHandleSet& theSet); 01080 virtual void sendUnpublishMsg(DtObjectInstanceHandle handle, 01081 const DtAttributeHandleSet& theSet); 01082 virtual void sendUnsubscribeMsg(DtObjectClassHandle handle, 01083 const DtAttributeHandleSet& theSet); 01084 virtual void sendSubscribeMsg(DtObjectClassHandle theObj, 01085 bool isPassive, bool replacement, 01086 const DtAttributeHandleSet& theSet); 01087 virtual void sendRegisterMsg(DtRtiObject* object); 01088 virtual void sendLocalDeleteMsg(DtObjectInstanceHandle handle); 01089 virtual void sendDiscoverMsg(DtObjectInstanceHandle objHandle, 01090 DtObjectClassHandle classHandle, DtFederateHandle owner); 01091 virtual void sendRequestDiscoverMsg(DtObjectInstanceHandle objHandle, 01092 DtObjectClassHandle classHandle); 01093 virtual void sendRemoveDiscoverMsg(DtObjectInstanceHandle objHandle, 01094 DtObjectClassHandle classHandle=0); 01095 01096 #ifdef DtIFSPEC1516 01097 virtual void sendBestEffortUpdateMsg( 01098 DtRtiObject* obj, const DtAhvps& theAttrs, DtOrderHandle orderType, 01099 rti1516::LogicalTime const * theTime, 01100 rti1516::VariableLengthData const & tag, 01101 unsigned long serialNumber, const MAKRti::DtInetAddr& destAddr, 01102 unsigned int offset=0); 01103 01104 virtual void sendReliableUpdateMsg( 01105 DtRtiObject* obj, const DtAhvps& theAttrs, 01106 DtOrderHandle orderType, 01107 rti1516::LogicalTime const * theTime, 01108 rti1516::VariableLengthData const & tag, 01109 unsigned long serialNumber); 01110 01111 virtual void sendReserveNameMsg(std::string const & theObjectInstanceName); 01112 01113 virtual unsigned long sendDeleteMsg(DtObjectInstanceHandle handle, 01114 DtOrderHandle orderType, 01115 rti1516::LogicalTime const * theTime, 01116 rti1516::VariableLengthData const & tag); 01117 01118 virtual void sendOwnershipMsg( 01119 DtOwnerMsgKind kind, DtObjectInstanceHandle objHand, 01120 const DtAttributeHandleSet& attrs, 01121 DtFederateHandle targetFed = 0, 01122 rti1516::VariableLengthData const & tag = DtRtiMsg::theDefaultTag); 01123 01124 virtual void sendOwnershipMsg( 01125 DtOwnerMsgKind kind, DtObjectInstanceHandle objHand, 01126 const DtAttributeHandle attr, 01127 DtFederateHandle targetFed = 0, 01128 rti1516::VariableLengthData const & tag = DtRtiMsg::theDefaultTag); 01129 01130 #elif defined(DtIFSPEC1516E) 01131 virtual void sendBestEffortUpdateMsg( 01132 DtRtiObject* obj, const DtAhvps& theAttrs, DtOrderHandle orderType, 01133 rti1516e::LogicalTime const * theTime, 01134 rti1516e::VariableLengthData const & tag, 01135 unsigned long serialNumber, const MAKRti::DtInetAddr& destAddr, 01136 unsigned int offset=0); 01137 01138 virtual void sendReliableUpdateMsg( 01139 DtRtiObject* obj, const DtAhvps& theAttrs, 01140 DtOrderHandle orderType, 01141 rti1516e::LogicalTime const * theTime, 01142 rti1516e::VariableLengthData const & tag, 01143 unsigned long serialNumber); 01144 01145 virtual void sendReserveNameMsg(std::string const & theObjectInstanceName); 01146 01147 virtual unsigned long sendDeleteMsg(DtObjectInstanceHandle handle, 01148 DtOrderHandle orderType, 01149 rti1516e::LogicalTime const * theTime, 01150 rti1516e::VariableLengthData const & tag); 01151 01152 virtual void sendOwnershipMsg( 01153 DtOwnerMsgKind kind, DtObjectInstanceHandle objHand, 01154 const DtAttributeHandleSet& attrs, 01155 DtFederateHandle targetFed = 0, 01156 rti1516e::VariableLengthData const & tag = DtRtiMsg::theDefaultTag); 01157 01158 virtual void sendOwnershipMsg( 01159 DtOwnerMsgKind kind, DtObjectInstanceHandle objHand, 01160 const DtAttributeHandle attr, 01161 DtFederateHandle targetFed = 0, 01162 rti1516e::VariableLengthData const & tag = DtRtiMsg::theDefaultTag); 01163 01164 virtual void sendAttrQueryFoundMsg( 01165 DtFederateHandle targetFed, 01166 DtObjectInstanceHandle objHand, 01167 const DtAttributeHandle attr, 01168 DtTransportType transType ); 01169 01170 virtual void sendInterQueryFoundMsg( 01171 DtFederateHandle targetFed, 01172 DtObjectInstanceHandle objHand, 01173 const DtInteractionClassHandle handle, 01174 DtTransportType transType ); 01175 01176 void sendInterQueryMsg( 01177 DtFederateHandle targetFed, 01178 DtInteractionClassHandle handle, 01179 DtFederateHandle sendingFed ); 01180 #else 01181 virtual void sendBestEffortUpdateMsg( 01182 DtRtiObject* obj, const DtAhvps& theAttrs, DtOrderHandle orderType, 01183 RTI::FedTime const * theTime, 01184 char const * tag, 01185 unsigned long serialNumber, const MAKRti::DtInetAddr& destAddr, 01186 unsigned int offset=0); 01187 01188 virtual void sendReliableUpdateMsg( 01189 DtRtiObject* obj, const DtAhvps& theAttrs, 01190 DtOrderHandle orderType, 01191 RTI::FedTime const * theTime, 01192 char const * tag, 01193 unsigned long serialNumber); 01194 01195 virtual void sendRequestMsg( 01196 DtRequestType type, unsigned long idOrClass, 01197 const DtAttributeHandleSet& theSet, 01198 char const * tag, 01199 bool anonymous, 01200 DtHandle regionSetHandle = DtRtiMsg::theDefaultRegionSetHandle); 01201 01202 virtual unsigned long sendDeleteMsg(DtObjectInstanceHandle handle, 01203 DtOrderHandle orderType, 01204 RTI::FedTime const * theTime, 01205 char const * tag); 01206 01207 virtual void sendOwnershipMsg( 01208 DtOwnerMsgKind kind, DtObjectInstanceHandle objHand, 01209 const DtAttributeHandleSet& attrs, 01210 DtFederateHandle targetFed = 0, 01211 char const * tag = DtRtiMsg::theDefaultTag); 01212 01213 virtual void sendOwnershipMsg( 01214 DtOwnerMsgKind kind, DtObjectInstanceHandle objHand, 01215 const DtAttributeHandle attr, 01216 DtFederateHandle targetFed = 0, 01217 char const * tag = DtRtiMsg::theDefaultTag); 01218 #endif 01219 01220 01222 virtual void sendPendingStartUpdates(); 01223 01225 virtual void sendPendingStopUpdates(); 01226 01228 virtual void sendPendingStartReg(); 01229 01231 virtual void sendPendingStopReg(); 01232 01234 virtual void sendPendingRegister(); 01235 01237 virtual void sendPendingSubscription(); 01238 01240 virtual void sendPendingRemovals(); 01241 01243 virtual void sendPendingRequestAttributes(); 01244 01246 virtual void sendPendingDiscoveries(); 01247 01249 virtual void invokePendingDivestNotification(); 01250 01252 virtual void purgeDeletedObjects(); 01253 01254 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 01255 01256 void resetNameReservation(std::string objectName); 01257 #endif 01258 01261 virtual void throwIfAcquisitionPending( 01262 DtObjectClassHandle classHand, 01263 const DtAttributeHandleSet& attrs); 01264 01265 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 01266 01267 01268 virtual void confirmAllInstancesPendingDivestitures( 01269 DtObjectClassHandle classHand, 01270 const DtAttributeHandleSet& attrs ); 01271 01274 virtual void confirmPendingDivestitures( 01275 DtObjectInstanceHandle objHand, 01276 const DtAttributeHandleSet& attrs, 01277 DtAttributeHandleSet& divestedSet ); 01278 01281 virtual void cancelPendingConfirms( 01282 const DtRtiObject* obj, 01283 const DtAttributeHandleSet& attrs ); 01284 #endif 01285 01288 virtual void divestAllInstances( 01289 DtObjectClassHandle classHand, 01290 const DtAttributeHandleSet& attrs); 01291 01294 virtual void divestAllInstances(); 01295 01298 virtual void releaseAllAttributes(DtRtiObject* object); 01299 01302 virtual void releaseOwnership( 01303 DtRtiObject* obj, 01304 const DtAttributeHandleSet& attrs); 01305 01307 virtual void sendUpdateMessage( DtUpdateMsg* update, 01308 DtObjectClassInfo* classDesc, DtUpdateType updateType, 01309 MAKRti::DtTransportType trans, unsigned int numberAttrs, 01310 MAKRti::DtInetAddr destAddr = DtInetAddr::inaddrAny(), 01311 unsigned int offset = 0); 01312 01313 #ifdef DtMOM 01314 01315 01316 virtual void incrementUpdateTally(DtHandle objectClass); 01317 virtual void incrementSentAttributesTally(DtHandle objectClass, 01318 MAKRti::DtTransportType transport, unsigned int numberAttrs); 01319 virtual void incrementReceivedTally(DtHandle objectClass, 01320 MAKRti::DtTransportType transport, unsigned int numberAttrs); 01322 #endif 01323 01325 virtual void deleteAllOwnedObjects(); 01326 01328 virtual void deleteObj(DtRtiObject* obj, bool isLocalDelete=false); 01329 01330 #ifdef DtIFSPEC1516 01331 01332 01333 virtual void retainTsoDeletedObj(DtRtiObject* obj, 01334 rti1516::LogicalTime const & time); 01335 01339 virtual void retainTsoRemovedObj(DtRtiObject* obj, 01340 rti1516::LogicalTime const & time); 01341 #elif defined(DtIFSPEC1516E) 01342 01343 01344 virtual void retainTsoDeletedObj(DtRtiObject* obj, 01345 rti1516e::LogicalTime const & time); 01346 01350 virtual void retainTsoRemovedObj(DtRtiObject* obj, 01351 rti1516e::LogicalTime const & time); 01352 #else 01353 01354 01355 virtual void retainTsoDeletedObj(DtRtiObject* obj, RTI::FedTime const & time); 01356 01360 virtual void retainTsoRemovedObj(DtRtiObject* obj, 01361 RTI::FedTime const & time); 01362 #endif 01363 01367 virtual bool removedObjectIsRetained(DtObjectInstanceHandle objectHandle); 01368 01370 virtual void removeObjectAssociations(DtRtiObject& object); 01371 01375 virtual void collectRemoteSubscriptions(DtRtiObject& object); 01376 01378 virtual DtFederateHandle federateHandleFromObjectID(DtObjectInstanceHandle id) const; 01379 01382 virtual unsigned long nextOffsetId(); 01383 01386 virtual DtObjectInstanceHandle findReusableHandle(); 01387 01389 virtual DtRtiObject* registerObj( 01390 DtObjectClassHandle theClass, 01391 DtObjectInstanceHandle objHandle, 01392 const char* name); 01393 01398 virtual DtRtiObject* processNewObj(DtObjectInstanceHandle objHand, 01399 DtObjectClassInfo* actualClass, 01400 DtObjectClassInfo* subscribedClass, 01401 const char* name, 01402 const DtAhvps& inSet, 01403 DtHandle regSetHandle, 01404 DtFederateHandle sourceFederate); 01405 01409 virtual DtRtiObject* discoverObject(DtObjectInstanceHandle objHandle, 01410 const char* objName, 01411 DtObjectClassInfo* actualClass, 01412 DtObjectClassInfo* discoveredClass, 01413 const DtAttributeHandleSet& attrSet, 01414 DtFederateHandle federateHandle, 01415 bool federateOwnsPrivilegeToDelete); 01416 01417 #ifdef DDM 01418 01419 01420 01421 01422 01424 #ifdef DtIFSPEC1516 01425 virtual void calculateRegionSet( 01426 unsigned long channel, rti1516::RegionHandleSet & regionHandles) {} 01427 #elif defined(DtIFSPEC1516E) 01428 virtual void calculateRegionSet( 01429 unsigned long channel, rti1516e::RegionHandleSet & regionHandles) {} 01430 #else 01431 virtual void calculateRegionSet( 01432 unsigned long channel, const DtAhvps& reflectSet) {} 01433 #endif 01434 01439 virtual void checkForRegionalSubscribe(DtObjectClassInfo& info) {} 01440 01444 virtual void acquireAssociateRegionForUpdates( 01445 DtObjectInstanceHandle theObject, 01446 const DtAttributeHandleSet& theAttributes) {} 01447 01449 virtual void unassociateRegionForDivested( 01450 DtRtiObject& obj, const DtAttributeHandleSet& set, bool atomic){} 01451 01453 01454 #endif 01455 01457 #ifdef DtIFSPEC1516 01458 virtual void invokeReflect(DtFederateHandle federateHandle, 01459 rti1516::ObjectInstanceHandle objectHandle, 01460 rti1516::AttributeHandleValueMap const& reflectedValues, 01461 rti1516::TransportationType transportType, 01462 rti1516::OrderType sentOrder, 01463 rti1516::OrderType receivedOrder, 01464 rti1516::VariableLengthData const & theTag, 01465 rti1516::LogicalTime const * time=0, 01466 unsigned long serialNumber=0, 01467 rti1516::RegionHandleSet const* regionHandles=0); 01468 #elif defined(DtIFSPEC1516E) 01469 virtual void invokeReflect(DtFederateHandle federateHandle, 01470 rti1516e::ObjectInstanceHandle objectHandle, 01471 rti1516e::AttributeHandleValueMap const& reflectedValues, 01472 rti1516e::TransportationType transportType, 01473 rti1516e::OrderType sentOrder, 01474 rti1516e::OrderType receivedOrder, 01475 rti1516e::VariableLengthData const & theTag, 01476 rti1516e::LogicalTime const * time=0, 01477 unsigned long serialNumber=0, 01478 rti1516e::RegionHandleSet const* regionHandles=0); 01479 #else 01480 virtual void invokeReflect(DtFederateHandle federateHandle, 01481 DtObjectInstanceHandle objectHandle, 01482 DtAhvps const& reflectedValues, 01483 DtTransportHandle transportType, 01484 DtOrderHandle sentOrder, 01485 char const * tag = 0, 01486 RTI::FedTime const * time=0, 01487 unsigned long serialNumber=0); 01488 #endif 01489 01492 virtual bool acceptObjectChannel(unsigned long channel); 01493 01496 virtual bool acceptRequestChannel(unsigned long channel); 01497 01499 01500 01501 01502 01503 01504 virtual void addClassMulticast(DtObjectClassInfo* classDesc, float rate=-1.0); 01505 virtual void removeClassMulticast(DtObjectClassInfo* classDesc, float rate=-1.0); 01507 01509 virtual bool saveObjectList( DtRtiSaveFile& file ); 01510 01512 virtual bool restoreObjectList(DtRtiSaveFile& file); 01513 01515 virtual void destroyObjectLists(); 01516 01518 virtual unsigned long savePacketLength(); 01519 01520 protected: 01521 01523 01524 static void processUpdate(const DtUpdateMsg& msg, void* usr); 01525 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 01526 static void processReserveName(DtReserveNameMsg const& msg, void* usr); 01527 static void processNameReserved(DtNameReservedMsg const& msg, void* usr); 01528 #ifdef DtIFSPEC1516E 01529 static void processMultiNameReserved( DtMultiNameReservedMsg const& msg, void* usr ); 01530 #endif 01531 #endif 01532 static void processRegister(const DtRegObjMsg& msg, void* usr); 01533 static void processDiscover(const DtDiscObjMsg& msg, void* usr); 01534 static void processRequestDiscover(const DtReqDiscObjMsg& msg, void* usr); 01535 static void processDelete(const DtDeleteRoMsg& msg, void* usr); 01536 #ifdef DtTIME 01537 static void processDeleteTso(const DtDeleteTsoMsg& msg, void* usr); 01538 #endif 01539 static void processLocDelete(const DtLocDelMsg& msg, void* usr); 01540 static void processPub(const DtPubObjMsg& msg, void* usr); 01541 static void processUnpub(const DtUnpubObjMsg& msg, void* usr); 01542 static void processSub(const DtSubObjMsg& msg, void* usr); 01543 static void processUnsub(const DtUnsubObjMsg& msg, void* usr); 01544 static void processRequest(const DtRequestMsg& msg, void* usr); 01545 static void processOwnership(const DtOwnershipMsg& msg, void* usr); 01546 #ifdef DtIFSPEC1516E 01547 static void processQueryTransport(const DtQueryTransportMsg& msg, void* usr); 01548 static void processQueryInterTransport(const DtQueryInterTransportMsg& msg, void* usr); 01549 #endif 01550 01551 01552 protected: 01553 01555 DtFederateMgr* myFederateMgr; 01556 01557 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 01558 01559 std::set<std::string> myReservedNames; 01561 std::set<std::string> myUsedNames; 01563 std::set<std::string> myFailedNames; 01564 #endif 01565 01567 MAKRti::DtString myHlaNamePrefix; 01568 01570 MAKRti::DtHashList myObjects; 01571 01573 MAKRti::DtHashList myObjectsByName; 01574 01576 MAKRti::DtHashList myKnownObjs; 01577 01579 MAKRti::DtHashList myKnownObjsByName; 01580 01582 MAKRti::DtHashList myOwnedObjs; 01583 01585 MAKRti::DtHashList myOwnedObjsByName; 01586 01588 MAKRti::DtHashList myLrcManagedObjs; 01589 01591 MAKRti::DtHashList myLrcManagedObjsByName; 01592 01594 DtAddrMap myAddrMap; 01595 01598 std::map<DtObjectInstanceHandle, MAKRti::DtTime> myDeletedObjects; 01599 01600 #ifdef DtTIME 01601 01602 01603 DtRtiMsgQueue* myTsoRemoveQueue; 01604 DtObjectHandleTimeMap myTsoDeletedObjects; 01605 DtObjectPtrTimeMap myTsoDeletedObjectCache; 01606 DtObjectPtrTimeMap myTsoRemovedObjectCache; 01608 #endif 01609 01611 01612 DtObjectClassHandleSet myRetransmitSubClass; 01613 DtObjectInstanceHandleSet myLocalDeletedObjects; 01614 DtObjInstAttrSetPairList myPendingStartUpdatesList; 01615 DtObjClassAttrSetPairList myPendingStopUpdatesList; 01616 DtObjectClassHandleSet myPendingStartRegList; 01617 DtObjectClassHandleSet myPendingStopRegList; 01618 DtObjectClassHandleSet myPendingRegisterList; 01619 DtObjectInstanceHandleSet myPendingInstRegisterList; 01620 MAKRti::DtList myPendingRemovals; 01621 DtPendingRequestAttrMap myPendingRequestAttrs; 01622 DtPendingRequestAttrMap myPendingDivestNotifications; 01624 01626 DtHandle myFreeObjHandle; 01627 01629 01630 bool myClassRelevanceSwitch; 01631 bool myAttributeRelevanceSwitch; 01632 bool myAttributeScopeSwitch; 01634 01636 bool myIsJoined; 01637 01639 bool myRestoreInProgress; 01640 01642 bool myReuseIds; 01643 01645 MAKRti::DtClock myClock; 01646 01648 typedef std::set<DtObjectInstanceHandle> DtObjHandleSet; 01649 typedef std::map<DtObjectClassHandle, DtObjHandleSet> DtClassToPendingObjDiscMap; 01650 typedef std::map<DtFederateHandle, DtClassToPendingObjDiscMap> DtFederateToPendingObjDiscMap; 01651 DtFederateToPendingObjDiscMap myPendingDiscoveries; 01652 DtFederateToPendingObjDiscMap myPendingNonDiscoveries; 01653 01655 DtTime myNextPendingDiscTime; 01656 01658 DtObjHandleSet myIgnoreObjects; 01659 01660 protected: 01661 01663 static DtObjectMgrCreator theCreator; 01664 01666 static DtObjectMgrCreator theInternalCreator; 01667 }; 01668 01669 #endif 01670 01671 01672