![]() |
VR-Link API Documentation for HLA 1.3
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 00006 00009 00010 #pragma once 00011 00012 #if DtHLA && !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 00087 virtual int minAttrHandle() const; 00088 virtual int maxAttrHandle() const; 00089 00092 virtual const RTI::AttributeHandleSet& attrHandleSet() const; 00093 00095 virtual const RTI::AttributeHandleSet& ownAttrHandles() const; 00096 00103 virtual bool classNeededByFederation(); 00104 00109 virtual void publish(); 00110 virtual void publish(const RTI::AttributeHandleSet& hSet); 00111 00113 virtual void unpublish(); 00114 00118 virtual void subscribe(const RTI::AttributeHandleSet& hSet, bool active = true); 00119 00123 virtual void subscribe(const RTI::AttributeHandleSet& hSet, DtDDMRegionSP region, 00124 bool active = true); 00125 00126 virtual void subscribe(); 00127 virtual void subscribe(const DtDDMRegionSet& regionSet); 00128 00129 virtual void passiveSubscribe(); 00130 00132 virtual void unsubscribe(); 00133 virtual void unsubscribe(const DtDDMRegionSet& regionSet); 00134 00137 virtual void requestUpdates(); 00138 virtual void requestUpdates(const DtDDMRegionSet& region); 00139 virtual void requestUpdates(const RTI::AttributeHandleSet& hSet); 00140 virtual void requestUpdates(const RTI::AttributeHandleSet& hSet, 00141 DtDDMRegionSP region); 00142 00146 virtual const RTI::AttributeHandleSet& publishedAttrs() const; 00147 00150 virtual bool everPublished() const; 00151 00155 virtual const RTI::AttributeHandleSet& subscribedAttrs() const; 00156 00157 virtual const RTI::AttributeHandleSet& attributesWithSpace() const; 00158 virtual const RTI::AttributeHandleSet& attributesWithoutSpace() const; 00159 00160 virtual const RTI::AttributeHandleSet& subscribedAttrsWithSpace() const; 00161 virtual const RTI::AttributeHandleSet& subscribedAttrsWithoutSpace() const; 00162 00163 00166 virtual bool everSubscribed() const; 00167 00169 virtual DtVrlRtiAmbassador* rtiAmb(); 00170 00172 virtual DtVrlFederateAmbassador* fedAmb(); 00173 00175 virtual RTI::AttributeHandle privilegeHandle() const; 00176 00177 virtual void setUserTagModifier(DtObjectTagModifierSP modifier); 00178 virtual DtObjectTagModifierSP userTagModifier(); 00179 00180 00187 virtual void setSubscribeToUnspecifiedAttributesFlag(bool subscribe); 00188 virtual bool subscribeToUnspecifiedAttributesFlag(); 00189 00195 virtual void setUnknownAttributeEncoder( 00196 DtHlaStateEncoder::DtAttributeEncoder encoder); 00197 00200 virtual void setUnknownAttributeDecoder( 00201 DtHlaStateDecoder::DtAttributeDecoder decoder); 00202 00204 virtual DtHlaStateEncoder::DtAttributeEncoder unknownAttributeEncoder(); 00205 00207 virtual DtHlaStateDecoder::DtAttributeDecoder unknownAttributeDecoder(); 00208 00209 public: 00212 static void setMaxAttributes(int num); 00213 static int maxAttributes(); 00214 00220 static void setSubscriptionTimeDelay(double delay); 00221 00222 protected: 00223 00225 static void startRegCb(RTI::ObjectClassHandle h, 00226 void* usr); 00227 00229 static void stopRegCb(RTI::ObjectClassHandle h, 00230 void* usr); 00231 00232 protected: 00233 00235 virtual void processStartReg(RTI::ObjectClassHandle h); 00236 00238 virtual void processStopReg(RTI::ObjectClassHandle h); 00239 00241 virtual DtObjClassDesc* self() const; 00242 00245 virtual void synchSubscribedAttributes(); 00246 00247 protected: 00248 DtString myName; 00249 RTI::ObjectClassHandle myHandle; 00250 RTI::AttributeHandleSet* myAttrs; 00251 RTI::AttributeHandleSet* myOwnAttrs; 00252 RTI::AttributeHandleSet* mySubAttrs; 00253 RTI::AttributeHandleSet* myPubAttrs; 00254 00256 RTI::AttributeHandleSet* myAttrsWithSpace; 00257 00259 RTI::AttributeHandleSet* myAttrsWithoutSpace; 00260 00261 RTI::AttributeHandleSet* mySubAttrsWithSpace; 00262 RTI::AttributeHandleSet* mySubAttrsWithoutSpace; 00263 00264 bool myClassNeeded; 00265 DtObjClassDesc* myBase; 00266 DtExerciseConn* myExConn; 00267 bool myPublished; 00268 bool myEverPublished; 00269 bool myEverSubscribed; 00270 int myNumSubscribeRequests; 00271 bool mySubscribeToUnspecifiedAttributesFlag; 00272 00274 RTI::AttributeHandle myPrivHandle; 00275 RTI::AttributeHandle myMinAttrHand; 00276 RTI::AttributeHandle myMaxAttrHand; 00277 00278 typedef std::map<RTI::AttributeHandle, DtString> StringToAttributeHandleMap; 00279 StringToAttributeHandleMap myStringToHandleMap; 00280 00281 DtObjectTagModifierSP myTagModifier; 00282 std::vector<DtDDMRegionSP> mySubscribedRegions; 00283 DtHlaStateEncoder::DtAttributeEncoder myUnknownAttributeEncoder; 00284 DtHlaStateDecoder::DtAttributeDecoder myUnknownAttributeDecoder; 00285 protected: 00286 static int theMaxAttrs; 00287 static double theSubscriptionTimeDelay; 00288 00289 }; 00290 00291 inline RTI::ObjectClassHandle DtObjClassDesc::handle() const 00292 { 00293 return myHandle; 00294 } 00295 00296 inline const RTI::AttributeHandleSet& DtObjClassDesc::attrHandleSet() const 00297 { 00298 return *myAttrs; 00299 } 00300 00301 inline const RTI::AttributeHandleSet& DtObjClassDesc::ownAttrHandles() const 00302 { 00303 return *myOwnAttrs; 00304 } 00305 00306 inline int DtObjClassDesc::maxAttributes() 00307 { 00308 return theMaxAttrs; 00309 } 00310 00311 inline void DtObjClassDesc::setMaxAttributes(int num) 00312 { 00313 theMaxAttrs = num; 00314 } 00315 00316 inline const char* DtObjClassDesc::name() const 00317 { 00318 return myName.c_str(); 00319 } 00320 00321 inline int DtObjClassDesc::numAttributes() const 00322 { 00323 return myAttrs->size(); 00324 } 00325 00326 inline const DtObjClassDesc* DtObjClassDesc::baseClass() const 00327 { 00328 return myBase; 00329 } 00330 00331 inline DtObjClassDesc* DtObjClassDesc::baseClass() 00332 { 00333 return myBase; 00334 } 00335 00336 inline DtObjClassDesc* DtObjClassDesc::self() const 00337 { 00338 return (DtObjClassDesc*) this; 00339 } 00340 00341 inline RTI::AttributeHandle DtObjClassDesc::privilegeHandle() const 00342 { 00343 return myPrivHandle; 00344 } 00345 00346 inline void DtObjClassDesc::setSubscriptionTimeDelay(double delay) 00347 { 00348 theSubscriptionTimeDelay = delay; 00349 } 00350 00351 #endif 00352 00353