![]() |
VR-Link API Documentation for DIS
|
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