VR-Link API Documentation for DIS
hRefObjList.h
Go to the documentation of this file.
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 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)