VR-Link API Documentation for DIS
hlaObj.h
Go to the documentation of this file.
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 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)