![]() |
VR-Link API Documentation for HLA 1.3
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 00006 00007 #ifndef DtHlaObjectManager_H_ 00008 #define DtHlaObjectManager_H_ 00009 00010 #if DtHLA 00011 00012 #include "callbacks.h" 00013 #include "objIdHashLst.h" 00014 #include "hlaObjFact.h" 00015 #include "region.h" 00016 00020 00025 00026 class DT_DLL_VL DtHlaObjectManager 00027 { 00028 public: 00029 00031 DtHlaObjectManager(DtHlaObjectFactory* factory, 00032 DtExerciseConn* conn); 00033 00035 virtual ~DtHlaObjectManager(); 00036 00038 virtual const DtList& allHlaObjects() const; 00039 00041 virtual const DtList& registeredObjects() const; 00042 00044 virtual const DtList& discoveredObjects() const; 00045 00047 virtual DtHlaObject* hlaObject( 00048 #if DtHLA_1516 00049 RTI::ObjectInstanceHandle id 00050 #else 00051 RTI::ObjectHandle id 00052 #endif 00053 ) const; 00054 00056 virtual DtHlaObject* hlaObject(const char* name) const; 00057 00060 virtual void addDiscoverObjectCallback( 00061 RTI::ObjectClassHandle handle, DtDiscoverObjectCb cb, void* usr); 00062 virtual void removeDiscoverObjectCallback( 00063 RTI::ObjectClassHandle handle, DtDiscoverObjectCb cb, void* usr); 00064 00068 virtual void addRemoveObjectCallback( 00069 #if DtHLA_1516 00070 RTI::ObjectInstanceHandle id, 00071 #else 00072 RTI::ObjectHandle id, 00073 #endif 00074 DtRemoveObjectCb cb, void* usr); 00075 virtual void removeRemoveObjectCallback( 00076 #if DtHLA_1516 00077 RTI::ObjectInstanceHandle id, 00078 #else 00079 RTI::ObjectHandle id, 00080 #endif 00081 DtRemoveObjectCb cb, void* usr); 00082 00086 virtual const DtHlaObject* processDiscoverObject( 00087 #if DtHLA_1516 00088 RTI::ObjectInstanceHandle id, 00089 RTI::ObjectClassHandle handle, 00090 const std::wstring &name); 00091 #else 00092 RTI::ObjectHandle id, 00093 RTI::ObjectClassHandle handle, 00094 const char* name); 00095 #endif 00096 00097 #if DtHLA_1516_EVOLVED 00098 00099 00100 00101 00102 00103 virtual const DtHlaObject* processDiscoverObject( 00104 RTI::ObjectInstanceHandle id, 00105 RTI::ObjectClassHandle handle, 00106 const std::wstring &name, 00107 RTI::FederateHandle registeringFederate ); 00108 #endif 00109 00114 virtual const DtHlaObject* processDiscoverObject(DtHlaObject* hlaObj); 00115 00118 virtual void processRemoveObject( 00119 #if DtHLA_1516 00120 RTI::ObjectInstanceHandle id 00121 #else 00122 RTI::ObjectHandle id 00123 #endif 00124 ); 00125 00129 virtual void processRemoveObject(DtHlaObject* obj); 00130 00132 virtual void processReflectAttributeValues(const DtStateMsg &msg); 00133 00135 virtual void processProvideUpdate( 00136 #if DtHLA_1516 00137 RTI::ObjectInstanceHandle id, 00138 #else 00139 RTI::ObjectHandle id, 00140 #endif 00141 const RTI::AttributeHandleSet& theAttributes); 00142 00147 virtual void processLocalUpdateRequest( 00148 RTI::ObjectClassHandle hand, 00149 const RTI::AttributeHandleSet& set); 00150 00153 virtual void localSubscriptionChanged(RTI::ObjectClassHandle handle); 00154 00157 virtual void publicationChanged(RTI::ObjectClassHandle handle); 00158 00160 virtual void processAttributeAcquisition( 00161 #if DtHLA_1516 00162 RTI::ObjectInstanceHandle id, 00163 #else 00164 RTI::ObjectHandle id, 00165 #endif 00166 const RTI::AttributeHandleSet& attrs); 00167 00169 virtual void processAttributeDivestiture( 00170 #if DtHLA_1516 00171 RTI::ObjectInstanceHandle id, 00172 #else 00173 RTI::ObjectHandle id, 00174 #endif 00175 const RTI::AttributeHandleSet& attrs); 00176 00178 virtual void processRequestAssumption( 00179 #if DtHLA_1516 00180 RTI::ObjectInstanceHandle id, 00181 const RTI::AttributeHandleSet& attrs, 00182 const RTI::VariableLengthData &tag); 00183 #else 00184 RTI::ObjectHandle id, 00185 const RTI::AttributeHandleSet& attrs, 00186 const char* tag); 00187 #endif 00188 00190 virtual void processRequestRelease( 00191 #if DtHLA_1516 00192 RTI::ObjectInstanceHandle id, 00193 const RTI::AttributeHandleSet& attrs, 00194 const RTI::VariableLengthData &tag); 00195 #else 00196 RTI::ObjectHandle id, 00197 const RTI::AttributeHandleSet& attrs, 00198 const char* tag); 00199 #endif 00200 00202 virtual void processConfirmAcquisitionCancellation( 00203 #if DtHLA_1516 00204 RTI::ObjectInstanceHandle id, 00205 #else 00206 RTI::ObjectHandle id, 00207 #endif 00208 const RTI::AttributeHandleSet& attrs); 00209 00212 virtual DtHlaObject* registerHlaObject( RTI::ObjectClassHandle classHand, 00213 const char* name, const DtDDMRegionSet* regionSet = 0); 00214 00215 virtual void registerHlaObjectWithRegion( 00216 RTI::ObjectClassHandle classHand, 00217 const char* name, const DtDDMRegionSet& regionSet, 00218 #if DtHLA_1516 00219 RTI::ObjectInstanceHandle& id); 00220 #else 00221 RTI::ObjectHandle& id); 00222 #endif 00223 00227 virtual void deleteHlaObject( 00228 #if DtHLA_1516 00229 RTI::ObjectInstanceHandle objHand); 00230 #else 00231 RTI::ObjectHandle objHand); 00232 #endif 00233 00246 #if !DtHLA_1516 00247 00248 virtual void setRegionsForRegister(int numAttrs, 00249 RTI::AttributeHandle* attrs, RTI::Region** regions); 00250 virtual void setNoRegionsForRegister(); 00251 #endif 00252 00253 #if DtHLA_1516 00254 00255 00256 00257 virtual void reserveName(const std::wstring &theName, bool pushRti); 00258 00261 virtual bool isNameReserved(const std::wstring &theName)const; 00262 00263 #if DtHLA_1516_EVOLVED 00264 00265 virtual void releaseObjectInstanceName( const std::wstring& name); 00266 00271 virtual void reserveNames ( 00272 std::set<std::wstring> const& objectNames, bool pushRti); 00273 00274 #endif 00275 #endif 00276 00277 public: 00278 #if DtHLA_1516 00279 00280 00281 static double requestNameTickMinTime(); 00282 static void setRequestNameTickMinTime(double time); 00283 00284 static double requestNameTickMaxTime(); 00285 static void setRequestNameTickMaxTime(double time); 00286 00288 static int numberOfRequestNameTries(); 00289 static void setNumberOfRequestNameTries(int tries); 00290 #endif 00291 00292 protected: 00293 00294 #if DtHLA_1516 00295 00296 00297 static void nameReservationSuceededCb(const std::wstring &theName, void *theUserData); 00298 static void nameReservationFailedCb(const std::wstring &theName, void *theUserData); 00299 00300 #if DtHLA_1516_EVOLVED 00301 static void nameSetReservationSucceededCb(const std::set<std::wstring>& nameSet, 00302 void* userData ); 00303 static void nameSetReservationFailedCb(const std::set<std::wstring>& nameSet, 00304 void* userData ); 00305 #endif 00306 #endif 00307 00308 protected: 00309 00313 00315 DtHlaObjectManager(const DtHlaObjectManager& orig); 00316 00318 DtHlaObjectManager& operator=( const DtHlaObjectManager& orig); 00319 00322 virtual void objectProcessRemoveObject(DtHlaObject* hlaObj); 00323 00326 virtual void objectProcessReflect(DtHlaObject* hlaObj, 00327 const DtStateMsg &msg); 00328 00332 virtual DtHlaObject* addKnownObject( 00333 #if DtHLA_1516 00334 RTI::ObjectInstanceHandle id, 00335 RTI::ObjectClassHandle hand, 00336 const std::wstring &name, 00337 bool reflecting); 00338 #else 00339 RTI::ObjectHandle id, 00340 RTI::ObjectClassHandle hand, 00341 const char* name, 00342 bool reflecting); 00343 #endif 00344 00347 virtual void removeKnownObject( 00348 DtHlaObject* hlaObj); 00349 00351 virtual void removeAllObjects(); 00352 00355 virtual DtList* discoverCbList(RTI::ObjectClassHandle handle); 00356 00357 00358 #if DtHLA_1516 00359 00360 00361 virtual void reservedNameSuceeded(const std::wstring &theName); 00362 00364 virtual void reservedNameFailed(const std::wstring &theName); 00365 00366 #if DtHLA_1516_EVOLVED 00367 00368 00369 virtual void reservedNameSuceeded(const std::set<std::wstring>& theNames); 00370 00372 virtual void reservedNameFailed(const std::set<std::wstring>& theNames); 00373 #endif 00374 00375 #endif 00376 00377 protected: 00378 #if DtHLA_1516 00379 static double theRequestNameTickMinTime; 00380 static double theRequestNameTickMaxTime; 00381 static int theNumberOfRequestNameTries; 00382 #endif 00383 00384 protected: 00385 00388 DtHashlist myDiscoverCbLists; 00389 00390 DtHlaObjectFactory* myFactory; 00391 00393 DtObjectIdHashlist myObjectList; 00394 00396 DtHashlist myObjectListByName; 00397 00399 DtObjectIdHashlist myRegObjectList; 00400 00403 DtObjectIdHashlist myDiscObjectList; 00404 00405 DtExerciseConn* myExConn; 00406 00407 #if DtHLA_1516 00408 00409 std::set<std::wstring> myReservedObjectInstanceNameSet; 00410 00413 bool myPendingNameReservationPassedFlag; 00414 bool myPendingNameReservationFailedFlag; 00415 std::wstring myPendingNameReservationName; 00416 std::set<std::wstring> myPendingNameReservationNameSet; 00417 00418 #if DtHLA_1516_EVOLVED 00419 std::map<DtObjectId, RTI::FederateHandle> myRegisteringFederateMap; 00420 #endif 00421 #endif 00422 00423 #if !DtHLA_1516 00424 00425 RTI::AttributeHandle* myAttrsForDDMRegister; 00426 RTI::Region** myRegionsForDDMRegister; 00427 #endif 00428 int myNumAttrsForDDMRegister; 00429 }; 00430 00431 inline const DtList& DtHlaObjectManager::allHlaObjects() const 00432 { 00433 return *(myObjectList.list()); 00434 } 00435 00436 inline const DtList& DtHlaObjectManager::registeredObjects() const 00437 { 00438 return *(myRegObjectList.list()); 00439 } 00440 00441 inline const DtList& DtHlaObjectManager::discoveredObjects() const 00442 { 00443 return *(myDiscObjectList.list()); 00444 } 00445 00446 #endif 00447 #endif 00448