![]() |
VR-Link API Documentation for HLA 1.3
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 #ifndef hlaObj_H_ 00006 #define hlaObj_H_ 00007 00008 #if DtHLA 00009 00010 00011 #include <vlutil/vlMachineTypes.h> 00012 #include "remObjCbInfo.h" 00013 #include "objRefCbInfo.h" 00014 #include "objClassDesc.h" 00015 00019 00020 class DT_DLL_VL DtExerciseConn; 00021 class DT_DLL_VL DtStateMsg; 00022 class DT_DLL_VL DtVrlRtiAmbassador; 00023 class DT_DLL_VL DtOwnershipHandler; 00024 00025 00026 00037 class DT_DLL_VL DtHlaObject 00038 { 00039 public: 00044 DtHlaObject( DtExerciseConn* conn, 00045 #if DtHLA_1516 00046 RTI::ObjectInstanceHandle id, 00047 #else 00048 RTI::ObjectHandle id, 00049 #endif 00050 const char* name, 00051 DtObjClassDesc& classDesc, 00052 bool reflecting = false); 00053 00058 DtHlaObject( DtExerciseConn* conn, 00059 const char* name, 00060 DtObjClassDesc& classDesc, 00061 bool reflecting = false); 00062 00065 virtual ~DtHlaObject(); 00066 00067 protected: 00068 00070 DtHlaObject(); 00071 00073 DtHlaObject( const DtHlaObject& src ); 00074 00076 DtHlaObject& operator=( const DtHlaObject& src ); 00077 00078 public: 00080 #if DtHLA_1516 00081 virtual inline const RTI::ObjectInstanceHandle& objectId() const; 00082 #else 00083 virtual inline const RTI::ObjectHandle& objectId() const; 00084 #endif 00085 00087 virtual inline const RTI::AttributeHandleSet& attrHandleSet(); 00088 00091 virtual inline const RTI::AttributeHandleSet& requestedAttributes(); 00092 00094 virtual inline RTI::ObjectClassHandle objectClassHandle() const; 00095 00097 virtual inline const char* name() const; 00098 00101 inline int numAttributes() const; 00102 00104 virtual inline DtExerciseConn* exerciseConn() const; 00105 00107 virtual inline DtObjClassDesc& classDesc() const; 00108 00112 00116 virtual void setupUpdating(); 00117 00122 virtual void update(); 00123 00134 virtual void generateUpdate( 00135 const RTI::AttributeHandleSet& eligibileAttrs, 00136 const RTI::AttributeHandleSet& requiredAttrs, 00137 DtStateMsg* msg ); 00138 00141 virtual void cleanupFromUpdating(); 00142 00146 virtual void processProvideUpdate( 00147 const RTI::AttributeHandleSet& set ); 00148 00149 00152 virtual void clearRequestedAttributes(); 00153 00156 virtual inline const RTI::AttributeHandleSet& ownedAttributes(); 00157 00164 virtual void forceUpdate(); 00165 virtual void forceUpdate( const RTI::AttributeHandleSet& set ); 00166 00168 virtual void clearForcedAttributes(); 00169 00174 virtual const RTI::AttributeHandleSet& attributesNeededByFederation(); 00175 00178 virtual const RTI::AttributeHandleSet& eligibleAttributes(); 00179 00182 virtual const RTI::AttributeHandleSet& requiredAttributes(); 00183 00187 bool classNeededByFederation(); 00188 00192 void setupClassForUpdating(); 00193 00197 00199 virtual void setupReflecting(); 00200 00204 virtual void callReflect( const DtStateMsg& msg ); 00205 00211 virtual void callReflectLocal( const DtStateMsg& msg ); 00212 00216 virtual void reflectLocal( const DtStateMsg& msg ) = 0; 00217 00220 virtual void cleanupFromReflecting(); 00221 00224 virtual void requestUpdate( RTI::AttributeHandleSet* attrs = 0 ); 00225 00227 virtual void addRemoveObjectCb( DtRemoveObjectCb cb, void* usr ); 00228 00231 virtual void removeRemoveObjectCb( DtRemoveObjectCb cb, void* usr ); 00232 00234 virtual void addPostReflectCb( DtObjectReflectAttributeValuesCb cb, 00235 void* usr ); 00236 00238 virtual void removePostReflectCb( DtObjectReflectAttributeValuesCb cb, 00239 void* usr ); 00240 00243 virtual void processRemoveObject(); 00244 00246 00250 virtual DtOwnershipHandler* setOwnershipHandler( DtOwnershipHandler* handler ); 00251 00255 virtual void unconditionalDivest( const RTI::AttributeHandleSet& attrs ); 00256 00262 virtual void negotiatedDivest( const RTI::AttributeHandleSet& attrs ); 00263 00266 virtual void cancelNegotiatedDivest( const RTI::AttributeHandleSet& attrs ); 00267 00273 virtual void acquireAttributes( const RTI::AttributeHandleSet& attrs, 00274 bool ifAvailable = false ); 00275 00280 virtual void cancelAcquireAttributes( const RTI::AttributeHandleSet& attrs ); 00281 00284 virtual inline DtTime lastSimTimeUpdateReceived() const; 00285 00286 virtual inline DtTime lastReceivedTimeStamp() const; 00287 00288 protected: 00290 virtual inline void setLastSimTimeUpdateReceived( DtTime tm ); 00291 00292 virtual inline void setLastReceivedTimeStamp( DtTime tm ); 00293 00294 public: 00298 virtual void printMsg( const DtStateMsg& msg, 00299 bool fullReport = false ) const; 00300 00304 virtual void localSubscriptionChanged(); 00305 00308 virtual void publicationChanged(); 00309 00310 00311 #if DtHLA_1516_EVOLVED 00312 00313 00314 virtual const DtString& lastProducingFederate() const; 00315 #endif 00316 00317 #if DtHLA_1516 00318 00319 virtual const std::set<DtDDMRegion>& lastRegionInformation() const; 00320 #endif 00321 00322 00323 protected: 00324 00325 friend class DtHlaObjectManager; 00326 00330 virtual void reflect( const DtStateMsg& msg ) = 0; 00331 00334 void wipeRemoveList(); 00335 00337 virtual void clearRemoveList(); 00338 00341 void wipeReflectList(); 00342 00344 virtual void applyPostReflectCallbacks( const DtStateMsg& msg ); 00345 00347 virtual void loseOwnership( const RTI::AttributeHandleSet& attrs) ; 00348 00350 virtual void gainOwnership( const RTI::AttributeHandleSet& attrs ); 00351 00353 virtual void processUpdatesOff( const RTI::AttributeHandleSet& set ); 00354 00357 void processUpdatesOn( const RTI::AttributeHandleSet& set ); 00358 00362 #if !DtHLA_1516 00363 virtual bool known() const; 00364 #endif 00365 00367 virtual void processRequestAssumption( 00368 const RTI::AttributeHandleSet& attrs, 00369 #if DtHLA_1516 00370 const RTI::VariableLengthData &tag 00371 #else 00372 const char* tag 00373 #endif 00374 ); 00375 00377 virtual void processRequestRelease( 00378 const RTI::AttributeHandleSet& attrs, 00379 #if DtHLA_1516 00380 const RTI::VariableLengthData &tag 00381 #else 00382 const char* tag 00383 #endif 00384 ); 00385 00388 void dumpRtiException(const char *functionName, 00389 const RTI::Exception *exc) const; 00390 00393 virtual void processAttributeAcquisition( 00394 const RTI::AttributeHandleSet& attrs ); 00395 00398 virtual void processAttributeDivestiture( 00399 const RTI::AttributeHandleSet& attrs ); 00400 00402 virtual void processConfirmAcquisitionCancellation( 00403 const RTI::AttributeHandleSet& attrs ); 00404 00405 00409 virtual void computeEligible(); 00410 00414 virtual void justRegistered(); 00415 00416 00417 #if DtHLA_1516_EVOLVED 00418 00419 00420 virtual void setLastProducingFederate(const DtString& fedName); 00421 #endif 00422 00423 #if DtHLA_1516 00424 00425 virtual void setRegionInformation(const std::set<DtDDMRegion>& regions); 00426 #endif 00427 00428 00429 00430 public: 00432 static void ownerAcquisitionIfAvailableCb( void* usr ); 00433 static void ownerAcquisitionCb( void* usr ); 00434 static void negotiatedDivestitureCb( void* usr ); 00435 static void unconditionalDivestitureCb( void* usr ); 00436 00437 protected: 00440 static void reflectAttributeValuesCb( const DtStateMsg& stateMsg, 00441 void* hlaObj ); 00442 00444 static void updatesOnCb( 00445 #if DtHLA_1516 00446 RTI::ObjectInstanceHandle handle, 00447 #else 00448 RTI::ObjectHandle handle, 00449 #endif 00450 const RTI::AttributeHandleSet& attributeSet, 00451 void* usr ); 00452 00454 static void updatesOffCb( 00455 #if DtHLA_1516 00456 RTI::ObjectInstanceHandle handle, 00457 #else 00458 RTI::ObjectHandle handle, 00459 #endif 00460 const RTI::AttributeHandleSet& attributeSet, 00461 void* usr ); 00462 00463 00464 protected: 00465 00466 char* myName; 00467 00468 DtExerciseConn* myExConn; 00469 bool myReflecting; 00470 bool myUpdating; 00471 DtList myRemoveCbList; 00472 DtList myReflectCbList; 00473 DtListItem* myRemoveCbListNextPtr; 00474 DtListItem* myReflectCbListNextPtr; 00475 DtTime myLastSimTimeUpdateReceived; 00476 DtTime myLastReceivedTimeStamp; 00477 DtObjClassDesc &myClassDesc; 00478 00479 #if DtHLA_1516_EVOLVED 00480 DtString myLastProducingFederate; 00481 #endif 00482 00483 #if DtHLA_1516 00484 00485 std::set<DtDDMRegion> myLastRegionInformation; 00486 #endif 00487 00488 00489 #if DtHLA_1516 00490 RTI::ObjectInstanceHandle myObjectId; 00491 #else 00492 RTI::ObjectHandle myObjectId; 00493 #endif 00494 00495 00496 00497 00498 00499 RTI::AttributeHandleSet* myEligibleAttrs; 00500 00503 RTI::AttributeHandleSet* myNeededAttrs; 00504 00507 RTI::AttributeHandleSet* myOwnedAttributes; 00508 00510 RTI::AttributeHandleSet* myRequestedAttributes; 00511 00513 RTI::AttributeHandleSet* myForcedAttributes; 00514 00516 RTI::AttributeHandleSet* myRequiredAttributes; 00517 00518 DtOwnershipHandler* myOwnershipHandler; 00519 }; 00520 00521 #if DtHLA_1516 00522 inline const RTI::ObjectInstanceHandle& DtHlaObject::objectId() const 00523 #else 00524 inline const RTI::ObjectHandle& DtHlaObject::objectId() const 00525 #endif 00526 { 00527 return myObjectId; 00528 } 00529 00530 inline const RTI::AttributeHandleSet& DtHlaObject::attrHandleSet() 00531 { 00532 return myClassDesc.attrHandleSet(); 00533 } 00534 00535 inline const RTI::AttributeHandleSet& DtHlaObject::requestedAttributes() 00536 { 00537 return *myRequestedAttributes; 00538 } 00539 inline RTI::ObjectClassHandle DtHlaObject::objectClassHandle() const 00540 { 00541 return myClassDesc.handle(); 00542 } 00543 00544 inline const char* DtHlaObject::name() const 00545 { 00546 return myName; 00547 } 00548 00549 inline int DtHlaObject::numAttributes() const 00550 { 00551 return myClassDesc.numAttributes() ; 00552 } 00553 00554 inline DtExerciseConn* DtHlaObject::exerciseConn() const 00555 { 00556 return myExConn; 00557 } 00558 00559 inline DtObjClassDesc& DtHlaObject::classDesc() const 00560 { 00561 return myClassDesc; 00562 } 00563 00564 inline const RTI::AttributeHandleSet& DtHlaObject::ownedAttributes() 00565 { 00566 return *myOwnedAttributes; 00567 } 00568 00569 inline DtTime DtHlaObject::lastSimTimeUpdateReceived() const 00570 { 00571 return myLastSimTimeUpdateReceived; 00572 } 00573 00574 inline void DtHlaObject::setLastSimTimeUpdateReceived( DtTime a_tm ) 00575 { 00576 myLastSimTimeUpdateReceived = a_tm; 00577 } 00578 00579 inline DtTime DtHlaObject::lastReceivedTimeStamp() const 00580 { 00581 return myLastReceivedTimeStamp; 00582 } 00583 00584 inline void DtHlaObject::setLastReceivedTimeStamp( DtTime a_tm ) 00585 { 00586 myLastReceivedTimeStamp = a_tm; 00587 } 00588 00589 00590 #endif //! DtHLA 00591 00592 #endif //! DtHlaObject_H_ 00593