![]() |
VR-Link API Documentation for DIS
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 00006 00009 00010 #ifndef DtDisReflectedObjectList_H_ 00011 #define DtDisReflectedObjectList_H_ 00012 00013 #if DtDIS 00014 00015 00016 #include <vlutil/vlMachineTypes.h> 00017 #include <vlutil/vlTime.h> 00018 #include "refObjCbInfo.h" 00019 #include <vlutil/vlHashlist.h> 00020 00021 class DT_DLL_VL DtExerciseConn; 00022 class DT_DLL_VL DtHlaObject; 00023 class DT_DLL_VL DtStateMsg; 00024 class DT_DLL_VL DtReflectedObject; 00025 class DT_DLL_VL DtBaseHashKey; 00026 00027 typedef bool (*DtDiscoveryCondition)(DtReflectedObject* refObj, void* usr); 00028 00034 class DT_DLL_VL DtReflectedObjectList 00035 { 00036 00037 public: 00038 00040 DtReflectedObjectList(DtExerciseConn* exConn); 00041 00044 virtual ~DtReflectedObjectList(); 00045 00047 virtual DtReflectedObject* firstObj() const; 00048 virtual DtReflectedObject* lastObj() const; 00049 00051 virtual int count() const; 00052 00054 virtual DtReflectedObject* lookupObj(const DtBaseHashKey& key) const; 00055 00057 virtual DtExerciseConn* exerciseConn() const; 00058 00060 virtual void addObjectAdditionCallback( 00061 DtReflectedObjectCallbackFunction cb, void* userData); 00062 virtual void removeObjectAdditionCallback( 00063 DtReflectedObjectCallbackFunction cb, void* userData); 00064 00066 virtual void addObjectRemovalCallback( 00067 DtReflectedObjectCallbackFunction cb, void* userData); 00068 virtual void removeObjectRemovalCallback( 00069 DtReflectedObjectCallbackFunction cb, void* userData); 00070 00072 virtual void print() const; 00073 00076 virtual void setTimeoutProcessing(bool onOff); 00077 00079 virtual void setTimeoutInterval(DtTime time); 00080 virtual DtTime timeoutInterval(); 00081 00084 virtual void setDiscoveryCondition(DtDiscoveryCondition fn, void* usr); 00085 00088 virtual void clearDiscoveryCondition(); 00089 00090 protected: 00091 00093 DtReflectedObjectList(const DtReflectedObjectList& orig); 00094 00096 DtReflectedObjectList& operator=(const DtReflectedObjectList& orig); 00097 00098 protected: 00099 00101 virtual DtReflectedObject* newReflectedObj(const DtStateMsg& msg) = 0; 00102 00104 virtual DtReflectedObject* processStateMessage(const DtStateMsg& msg); 00105 00109 virtual void doTimeouts(); 00110 00113 virtual void removeAndDelete(DtReflectedObject* obj, 00114 char* msg = NULL); 00115 00120 virtual void objectAdded(DtReflectedObject* object); 00121 00124 virtual bool shouldBeTimedOut(DtReflectedObject* object); 00125 00129 void emptyLists(); 00130 void emptyCallbackLists(); 00131 00133 virtual void processObjectAdditionCallbacks( 00134 DtReflectedObject* object); 00135 virtual void processObjectRemovalCallbacks( 00136 DtReflectedObject* object); 00137 00139 virtual const DtBaseHashKey& 00140 hashKeyFromStateMessage(const DtStateMsg* msg) = 0; 00141 00144 virtual int acceptPdu(const DtStateMsg&) const; 00145 00148 virtual bool readyToAdd(DtReflectedObject* obj); 00149 00150 protected: 00151 00153 static void doTimeoutsPostDrainCb(void* usr); 00154 00155 protected: 00156 00157 DtExerciseConn* myExConn; 00158 DtIntrusiveList myObjectAddedCallbacks; 00159 DtIntrusiveList myObjectRemovedCallbacks; 00160 DtIntrusiveList myObjectList; 00161 DtIntrusiveList myWaitList; 00162 DtHashlist myObjectHashlist; 00163 DtHashlist myWaitHashlist; 00164 DtTime myTimeoutInterval; 00165 bool myTimeoutProcessingFlag; 00166 DtDiscoveryCondition myDiscoveryCondition; 00167 void* myDiscoveryConditionParameter; 00168 }; 00169 00170 #endif //! DtHLA 00171 #endif //! DtReflectedObjectList_H_ 00172