![]() |
VR-Link API Documentation for DIS
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 00006 00009 00010 #pragma once 00011 00012 #if DtHLA_1516 00013 00014 00015 #include <vlutil/vlMachineTypes.h> 00016 #include <vlutil/vlString.h> 00017 #include "hStateEncoder.h" 00018 #include "hStateDecoder.h" 00019 #include "rtiNamespace.h" 00020 #include "region.h" 00021 #include "userTagModifiers.h" 00022 #include <map> 00023 00024 class DtExerciseConn; 00025 class DtVrlFederateAmbassador; 00026 class DtVrlRtiAmbassador; 00027 00040 class DT_DLL_VL DtObjClassDesc 00041 { 00042 public: 00043 00046 DtObjClassDesc(const char* className, 00047 DtObjClassDesc* base, 00048 RTI::ObjectClassHandle handle, 00049 DtExerciseConn* exConn); 00050 00052 virtual ~DtObjClassDesc(); 00053 00055 virtual void addAttr(const char* attrName, bool withSpace = false); 00056 00058 virtual RTI::ObjectClassHandle handle() const; 00059 00061 virtual RTI::AttributeHandle attributeHandleByName(const char *attrName) const; 00062 00064 virtual DtString attributeNameByHandle(const RTI::AttributeHandle& hand) const; 00065 00067 virtual const char* name() const; 00068 00070 virtual const DtObjClassDesc* baseClass() const; 00071 00073 virtual DtObjClassDesc* baseClass(); 00074 00077 virtual int isOfClass(RTI::ObjectClassHandle hand) const; 00078 00081 virtual int numAttributes() const; 00082 00084 virtual bool hasAttribute(const char* attrName) const; 00085 00088 virtual const RTI::AttributeHandleSet& attrHandleSet() const; 00089 00091 virtual const RTI::AttributeHandleSet& ownAttrHandles() const; 00092 00099 virtual bool classNeededByFederation(); 00100 00105 virtual void publish(); 00106 virtual void publish(const RTI::AttributeHandleSet& hSet); 00107 00109 virtual void unpublish(); 00110 00115 00117 virtual void subscribe(std::wstring const& updateRateDesignator = L"", bool active = true ); 00118 virtual void subscribe(const DtDDMRegionSet& region, 00119 std::wstring const& updateRateDesignator = L"", bool active = true ); 00120 virtual void subscribe(const RTI::AttributeHandleSet& hSet, 00121 std::wstring const& updateRateDesignator = L"", 00122 bool active = true ); 00124 virtual void subscribe(const RTI::AttributeHandleSet& hSet, DtDDMRegionSP region, 00125 std::wstring const& updateRateDesignator = L"", bool active = true); 00126 00127 00128 virtual void passiveSubscribe(); 00129 00131 virtual void unsubscribe(); 00132 virtual void unsubscribe(const DtDDMRegionSet& regionSet); 00133 00136 virtual void requestUpdates(); 00137 virtual void requestUpdates(const DtDDMRegionSet& region); 00138 virtual void requestUpdates(const RTI::AttributeHandleSet& hSet); 00139 virtual void requestUpdates(const RTI::AttributeHandleSet& hSet, 00140 DtDDMRegionSP region); 00141 00145 virtual const RTI::AttributeHandleSet& publishedAttrs() const; 00146 00149 virtual bool everPublished() const; 00150 00154 virtual const RTI::AttributeHandleSet& subscribedAttrs() const; 00155 00156 virtual const RTI::AttributeHandleSet& attributesWithSpace() const; 00157 virtual const RTI::AttributeHandleSet& attributesWithoutSpace() const; 00158 00159 virtual const RTI::AttributeHandleSet& subscribedAttrsWithSpace() const; 00160 virtual const RTI::AttributeHandleSet& subscribedAttrsWithoutSpace() const; 00161 00162 00165 virtual bool everSubscribed() const; 00166 00168 virtual DtVrlRtiAmbassador* rtiAmb(); 00169 00171 virtual DtVrlFederateAmbassador* fedAmb(); 00172 00174 virtual RTI::AttributeHandle privilegeHandle() const; 00175 00176 virtual void setUserTagModifier(DtObjectTagModifierSP modifier); 00177 virtual DtObjectTagModifierSP userTagModifier(); 00178 00179 00186 virtual void setSubscribeToUnspecifiedAttributesFlag(bool subscribe); 00187 virtual bool subscribeToUnspecifiedAttributesFlag(); 00188 00194 virtual void setUnknownAttributeEncoder( 00195 DtHlaStateEncoder::DtAttributeEncoder encoder); 00196 00199 virtual void setUnknownAttributeDecoder( 00200 DtHlaStateDecoder::DtAttributeDecoder decoder); 00201 00203 virtual DtHlaStateEncoder::DtAttributeEncoder unknownAttributeEncoder(); 00204 00206 virtual DtHlaStateDecoder::DtAttributeDecoder unknownAttributeDecoder(); 00207 00208 00209 public: 00215 static void setSubscriptionTimeDelay(double delay); 00216 00217 protected: 00218 00220 static void startRegCb(RTI::ObjectClassHandle h, 00221 void* usr); 00222 00224 static void stopRegCb(RTI::ObjectClassHandle h, 00225 void* usr); 00226 00227 static void ddmDisabled(); 00228 00229 protected: 00230 00232 virtual void processStartReg(RTI::ObjectClassHandle h); 00233 00235 virtual void processStopReg(RTI::ObjectClassHandle h); 00236 00238 virtual DtObjClassDesc* self() const; 00239 00242 virtual void synchSubscribedAttributes(); 00243 00246 virtual void fillInAttributeHandleSetRegionHandleSetPairVector( 00247 const RTI::AttributeHandleSet& hSet, DtDDMRegionSP region, 00248 RTI::AttributeHandleSetRegionHandleSetPairVector& pairVector); 00249 00250 protected: 00251 DtString myName; 00252 RTI::ObjectClassHandle myHandle; 00253 RTI::AttributeHandleSet* myAttrs; 00254 RTI::AttributeHandleSet* myOwnAttrs; 00255 RTI::AttributeHandleSet* mySubAttrs; 00256 RTI::AttributeHandleSet* myPubAttrs; 00257 00259 RTI::AttributeHandleSet* myAttrsWithSpace; 00260 00262 RTI::AttributeHandleSet* myAttrsWithoutSpace; 00263 00264 RTI::AttributeHandleSet* mySubAttrsWithSpace; 00265 RTI::AttributeHandleSet* mySubAttrsWithoutSpace; 00266 00267 bool myClassNeeded; 00268 DtObjClassDesc* myBase; 00269 DtExerciseConn* myExConn; 00270 bool myPublished; 00271 bool myEverPublished; 00272 bool myEverSubscribed; 00273 int myNumSubscribeRequests; 00274 bool mySubscribeToUnspecifiedAttributesFlag; 00275 00277 RTI::AttributeHandle myPrivHandle; 00278 RTI::AttributeHandle myMinAttrHand; 00279 RTI::AttributeHandle myMaxAttrHand; 00280 00281 typedef std::map<RTI::AttributeHandle, DtString> StringToAttributeHandleMap; 00282 StringToAttributeHandleMap myStringToHandleMap; 00283 00284 DtObjectTagModifierSP myTagModifier; 00285 00286 typedef std::vector<RTI::AttributeHandleSetRegionHandleSetPair> 00287 RegionHandleVector; 00288 RegionHandleVector mySubscribedRegions; 00289 00290 DtHlaStateEncoder::DtAttributeEncoder myUnknownAttributeEncoder; 00291 DtHlaStateDecoder::DtAttributeDecoder myUnknownAttributeDecoder; 00292 00293 protected: 00294 00295 static bool theDdmEnabled; 00296 static double theSubscriptionTimeDelay; 00297 }; 00298 00299 inline RTI::ObjectClassHandle DtObjClassDesc::handle() const 00300 { 00301 return myHandle; 00302 } 00303 00304 inline const RTI::AttributeHandleSet& DtObjClassDesc::attrHandleSet() const 00305 { 00306 return *myAttrs; 00307 } 00308 00309 inline const RTI::AttributeHandleSet& DtObjClassDesc::ownAttrHandles() const 00310 { 00311 return *myOwnAttrs; 00312 } 00313 00314 inline const char* DtObjClassDesc::name() const 00315 { 00316 return myName.c_str(); 00317 } 00318 00319 inline int DtObjClassDesc::numAttributes() const 00320 { 00321 return (int)myAttrs->size(); 00322 } 00323 00324 inline const DtObjClassDesc* DtObjClassDesc::baseClass() const 00325 { 00326 return myBase; 00327 } 00328 00329 inline DtObjClassDesc* DtObjClassDesc::baseClass() 00330 { 00331 return myBase; 00332 } 00333 00334 inline DtObjClassDesc* DtObjClassDesc::self() const 00335 { 00336 return (DtObjClassDesc*) this; 00337 } 00338 00339 inline RTI::AttributeHandle DtObjClassDesc::privilegeHandle() const 00340 { 00341 return myPrivHandle; 00342 } 00343 00344 inline void DtObjClassDesc::setSubscriptionTimeDelay(double delay) 00345 { 00346 theSubscriptionTimeDelay = delay; 00347 } 00348 00349 #endif 00350 00351