![]() |
VR-Link API Documentation for DIS
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 00006 00007 #ifndef hRefObjList_H_ 00008 #define hRefObjList_H_ 00009 00010 #if DtHLA 00011 00012 00013 #include "objIdHashLst.h" 00014 #include "refObjCbInfo.h" 00015 #include "globalObjDes.h" 00016 #include "region.h" 00017 00018 #include <vector> 00019 00024 00025 class DtExerciseConn; 00026 class DtHlaObject; 00027 class DtStateMsg; 00028 class DtReflectedObject; 00029 00030 typedef bool (*DtDiscoveryCondition)(DtReflectedObject* refObj, void* usr); 00031 00038 class DT_DLL_VL DtReflectedObjectList 00039 { 00040 public: 00041 00043 DtReflectedObjectList(DtExerciseConn* exConn, 00044 const DtDDMRegionSet* regionSetToUse = 0, 00045 const DtString& updateRateTag = DtString("") ); 00046 00048 virtual ~DtReflectedObjectList(); 00049 00050 private: 00051 00053 DtReflectedObjectList(const DtReflectedObjectList& orig); 00054 00056 DtReflectedObjectList& operator=(const DtReflectedObjectList& orig); 00057 00058 public: 00059 00061 virtual DtReflectedObject* lookupObj( 00062 #if DtHLA_1516 00063 RTI::ObjectInstanceHandle id); 00064 #else 00065 RTI::ObjectHandle id); 00066 #endif 00067 00069 virtual DtReflectedObject* lookupObj( 00070 const DtGlobalObjectDesignator& objName); 00071 00073 virtual DtReflectedObject* firstObj() const; 00074 virtual DtReflectedObject* lastObj() const; 00075 00077 virtual int count() const; 00078 00080 virtual DtExerciseConn *exerciseConn() const; 00081 00091 virtual void manageObjectClass(RTI::ObjectClassHandle handle); 00092 00101 virtual bool removeObject(const DtObjectId& id); 00102 00104 virtual void addObjectAdditionCallback( 00105 DtReflectedObjectCallbackFunction cb, void* userData); 00106 virtual void removeObjectAdditionCallback( 00107 DtReflectedObjectCallbackFunction cb, void* userData); 00108 00110 virtual void addObjectRemovalCallback( 00111 DtReflectedObjectCallbackFunction cb, void* userData); 00112 virtual void removeObjectRemovalCallback( 00113 DtReflectedObjectCallbackFunction cb, void* userData); 00114 00116 virtual void print(); 00117 00120 virtual void setTimeoutProcessing(bool onOff); 00121 00125 virtual void setWaitListRefreshEnabled(bool on); 00126 00128 virtual void setTimeoutInterval(DtTime time); 00129 virtual DtTime timeoutInterval(); 00130 00132 virtual void setWaitlistRefreshPeriod(DtTime time); 00133 virtual DtTime waitlistRefreshPeriod(); 00134 00137 virtual void setDiscoveryCondition(DtDiscoveryCondition fn, void* usr); 00138 00141 virtual void clearDiscoveryCondition(); 00142 00144 virtual const DtDDMRegionSet& subscribedRegions(); 00145 00146 00147 public: 00148 00152 static void setAutoSubscribeFlag(bool flag); 00153 static bool autoSubscribeFlag(); 00154 00158 static void setRequestClassUpdateFlag(bool onOff); 00159 static bool requestClassUpdateFlag(); 00160 00163 static void setRequestObjectUpdateFlag(bool onOff); 00164 static bool requestObjectUpdateFlag(); 00165 00167 static void findDiscoveredObjectsCb(void* usr); 00168 00169 00170 protected: 00171 00174 virtual void processDiscoverObject(DtHlaObject* obj); 00175 00178 virtual void processRemoveObject(DtHlaObject* obj); 00179 00182 virtual void processTimedOutObjectReflect(const DtStateMsg& msg, 00183 DtHlaObject* obj); 00184 00188 virtual void doTimeouts(); 00189 00192 virtual void doRequestWaitListUpdates(); 00193 00196 virtual DtReflectedObject* newReflectedObject(DtHlaObject* obj) const = 0; 00197 00200 virtual void removeAndDelete(DtReflectedObject* obj, 00201 char* msg = NULL); 00202 00208 virtual void objectAdded(DtReflectedObject* object); 00209 00212 virtual bool shouldBeTimedOut(DtReflectedObject* object); 00213 00217 virtual void timeOutObject(DtReflectedObject* object); 00218 00221 virtual void unTimeOutObject(DtHlaObject* obj); 00222 00225 virtual void addObjectClass(RTI::ObjectClassHandle handle); 00226 00229 virtual void addObjectClassByName(const char* className); 00230 00233 virtual void init(const DtList* handleList); 00234 00237 void emptyLists(); 00238 00241 void emptyCallbackLists(); 00242 00244 virtual void processObjectAdditionCallbacks( 00245 DtReflectedObject* object); 00246 virtual void processObjectRemovalCallbacks( 00247 DtReflectedObject* object); 00248 00253 virtual void findAlreadyDiscoveredObjects(); 00254 00255 virtual void checkDiscoveryCondition(DtReflectedObject* refObj); 00256 00259 virtual bool readyToAdd(DtReflectedObject* obj); 00260 00262 virtual void addToObjectList(DtReflectedObject* refObj); 00263 00265 virtual DtReflectedObject* lookupObjInWaitList( 00266 const DtGlobalObjectDesignator& name); 00267 00268 void unsubscribeRegions(); 00269 00270 #if DtHLA_1516_EVOLVED 00271 00272 00273 const DtString& updateRateSubscriptionName() const; 00274 #endif 00275 00276 protected: 00277 00280 static void discoverObjectCb(DtHlaObject* hlaObj, void* rel); 00281 00284 static void removeObjectCb(DtHlaObject* hlaObj, void* rel); 00285 00288 static void timedOutObjectReflectCb(const DtStateMsg& msg, 00289 DtHlaObject* obj, 00290 void* usr); 00291 00293 static void doTimeoutsPostDrainCb(void* usr); 00294 00296 static void doRequestWaitListUpdatesPostDrainCb(void* usr); 00297 00299 static void postUpdateCb(DtReflectedObject* obj, void* usr); 00300 00301 protected: 00302 00303 DtExerciseConn* myExConn; 00304 DtObjectIdHashList myObjectList; 00305 DtHashList myObjectListByName; 00306 DtObjectIdHashList myWaitList; 00307 DtList myTimedOutObjectList; 00308 std::vector<RTI::ObjectClassHandle> myHandleList; 00309 DtIntrusiveList myObjectAddedCallbacks; 00310 DtIntrusiveList myObjectRemovedCallbacks; 00311 DtTime myTimeoutInterval; 00312 bool myTimeoutProcessingFlag; 00313 bool myWaitListRequestUpdateFlag; 00314 DtDiscoveryCondition myDiscoveryCondition; 00315 void* myDiscoveryConditionParameter; 00316 DtTime myWaitlistTime; 00317 DtTime myWaitlistRefreshPeriod; 00318 DtDDMRegionSet mySubscribedRegions; 00319 DtString myUpdateRateTag; 00320 00321 protected: 00322 00323 static bool theAutoSubscribeFlag; 00324 static bool theRequestClassUpdateFlag; 00325 static bool theRequestObjectUpdateFlag; 00326 }; 00327 00328 inline DtReflectedObject* DtReflectedObjectList::firstObj() const 00329 { 00330 return myObjectList.list()->first() ? 00331 (DtReflectedObject* ) myObjectList.list()->first()->data() : NULL; 00332 } 00333 00334 inline DtReflectedObject* DtReflectedObjectList::lastObj() const 00335 { 00336 return myObjectList.list()->last() ? 00337 (DtReflectedObject* ) myObjectList.list()->last()->data() : NULL; 00338 } 00339 00340 inline void DtReflectedObjectList::setTimeoutInterval(DtTime time) 00341 { 00342 myTimeoutInterval = time; 00343 } 00344 00345 inline DtTime DtReflectedObjectList::timeoutInterval() 00346 { 00347 return myTimeoutInterval; 00348 } 00349 00350 inline void DtReflectedObjectList::setWaitlistRefreshPeriod(DtTime time) 00351 { 00352 myWaitlistRefreshPeriod = time; 00353 } 00354 00355 inline DtTime DtReflectedObjectList::waitlistRefreshPeriod() 00356 { 00357 return myWaitlistRefreshPeriod; 00358 } 00359 00360 inline DtExerciseConn* DtReflectedObjectList::exerciseConn() const 00361 { 00362 return myExConn; 00363 } 00364 00365 #endif //! DtHLA 00366 #endif //! DtReflectedObjectList_H_ 00367