VR-Link API Documentation for HLA 1.3
tEntityInterface.h
Go to the documentation of this file.
00001 //********************************************************************
00004 //********************************************************************
00005 //********************************************************************
00007 //********************************************************************
00008 #ifndef tEntityInterface_H_
00009 #define tEntityInterface_H_
00010 
00014 
00015 #if DtTENA
00016 
00017 #include "coLromMapExport.h"
00018 #include <vl/tObjectInterface.h>
00019 #include <vl/tReflectedEnt.h>
00020 #include <vl/entitySR.h>
00021 #include <TENA/Time/Pointer.h>
00022 #include <TENA/GeocentricSpatialReferenceFrame/Pointer.h>
00023 #include <TENA/UniqueID/Includes.h>
00024 #include <TENA/PlatformType/Includes.h>
00025 #include <TENA/Platform/Proxy.h>
00026 #include <TENA/Platform/ProxyPtr.h>
00027 #include <TENA/Platform/ServantPtr.h>
00028 #include <TENA/Platform/Servant.h>
00029 
00030 #include <TENA/PlatformDetails/Proxy.h>
00031 #include <TENA/PlatformDetails/ProxyPtr.h>
00032 #include <TENA/PlatformDetails/ServantPtr.h>
00033 #include <TENA/PlatformDetails/Servant.h>
00034 
00035 #include <TENA/GeocentricSpatialReferenceFrame/Pointer.h>
00036 #include <vlpi/entityType.h>
00037 #include <vl/globalObjDes.h>
00038 
00039 #include <map>
00040 #include <list>
00041 
00047 class DT_DLL_COMMONLROM DtEntityInterface: public DtObjectInterface
00048 {
00049 protected:
00050 
00054    class DtEntityServantObject : public DtTenaServantObject
00055    {
00056    public:
00058       DtEntityServantObject( TENA::Platform::ServantPtr sp,
00059          TENA::PlatformDetails::ServantPtr dp):
00060             myServantPtr(sp),
00061             myDetailsServantPtr(dp){}
00062 
00064       virtual ~DtEntityServantObject() {}
00065 
00067       virtual const TENA::Platform::ServantPtr servant() const { return myServantPtr;}
00068 
00070       virtual TENA::Platform::ServantPtr servant() { return myServantPtr;}
00071 
00073       virtual const TENA::PlatformDetails::ServantPtr detailsServant() const 
00074          { return myDetailsServantPtr; }
00075 
00077       virtual TENA::PlatformDetails::ServantPtr detailsServant() 
00078          { return myDetailsServantPtr;}
00079 
00080    protected:
00081        TENA::Platform::ServantPtr myServantPtr;
00082        TENA::PlatformDetails::ServantPtr myDetailsServantPtr;
00083    };
00084 
00085 
00086 public:
00087 
00089    DtEntityInterface(DtExerciseConn* exConn);
00090 
00092    virtual ~DtEntityInterface();
00093 
00094 private:
00095 
00097    DtEntityInterface(const DtEntityInterface &other);
00098 
00100    DtEntityInterface& operator=(const DtEntityInterface &other);
00101 
00102 public:
00103 
00107    virtual DtTenaServantObject* createServantObject(DtExerciseConn* exConn);
00108 
00110    virtual void processServantCleanup(DtTenaServantObject* servant);
00111 
00113    virtual void subscribe();
00114 
00119    virtual bool needUpdate(const DtStateRepository& stateRep, 
00120                            const DtStateRepository& asSeenByRemote,
00121                            bool useThresholding = true);
00122 
00123 
00125    virtual void decode(const DtTenaServantObject* servant,
00126                        DtStateRepository* stateRep)const;
00127 
00130    virtual void encode(DtTenaServantObject* servant, 
00131                        const DtStateRepository* stateRep,
00132                        TENA::Time::Pointer timeForStamping,
00133                        bool forceUpdate = false);
00134 
00136    virtual DtReflectedObject *createReflectedObject()const;
00137 
00139    virtual void processAddition(TENA::Platform::ProxyPtr const &proxy);
00140 
00142    virtual void processUpdate(TENA::Platform::ProxyPtr const &proxy);
00143 
00145    virtual void processRemoval(TENA::Platform::ProxyPtr const &proxy);
00146 
00148    virtual void processAddition(TENA::PlatformDetails::ProxyPtr const &proxy);
00149 
00151    virtual void processUpdate(TENA::PlatformDetails::ProxyPtr const &proxy);
00152 
00154    virtual void processRemoval(TENA::PlatformDetails::ProxyPtr const &proxy);
00155 
00156 protected:
00158    virtual void decode(const TENA::Platform::ImmutablePublicationStatePtr pubStatePtr,
00159                        DtStateRepository* stateRep)const;
00160 
00162    virtual void decodeDetails(const TENA::PlatformDetails::ImmutablePublicationStatePtr pubStatePtr,
00163       DtStateRepository* stateRep) const;
00164    
00166    virtual bool needDetailsUpdate(const DtEntityStateRepository& stateRep,
00167       const DtEntityStateRepository& asSeenByRemote);
00168 
00170    virtual void encodeDetails(DtTenaServantObject* servant,
00171       const DtEntityStateRepository* esr,
00172       TENA::Time::Pointer timeForStamping) const;
00173 
00178    virtual void checkForWaitingDetails(TENA::Platform::ProxyPtr const &proxy);
00179 
00180    virtual DtForceType tenaForceToVrlinkForce(TENA::Force tenaForce) const;
00181    virtual TENA::Force vrlinkForceToTenaForce(DtForceType vrlinkForce) const;
00182 protected:
00183 
00185    TENA::GeocentricSpatialReferenceFrame::Pointer myGeocSRF;
00186 
00187    TENA::Platform::SubscriptionInfoPtr mySubscriptionInfoPtr;
00188    TENA::PlatformDetails::SubscriptionInfoPtr myDetailsSubscriptionInfoPtr;
00189 
00190    typedef std::map<TENA::Platform::ProxyPtr, DtReflectedObject *> PlatProxyToRefObjMap;
00191    typedef std::map<TENA::PlatformDetails::ProxyPtr, DtReflectedObject*> DetailsProxyToRefObjMap;
00192    PlatProxyToRefObjMap myRefEntMap;
00193    DetailsProxyToRefObjMap myRefDetailsMap;
00194 
00195    PlatProxyToRefObjMap myEntityWaitList;
00196    std::list<TENA::PlatformDetails::ProxyPtr> myDetailsWaitList;
00197    bool myNeedPlatformUpdate;
00198    bool myNeedDetailsUpdate;
00199 };
00200 
00201 
00202 #endif
00203 #endif
00204 
00205 
00206 

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)