![]() |
MAK RTIspy API Documentation for HLA 1.3
|
00001 /********************************************************************* 00002 ** Copyright (c) 2006 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: distributedDdmMgr.h,v $ $Revision: 1.9 $ $State: Exp $ 00007 *********************************************************************/ 00008 #ifndef distributedDdmMgr_H_ 00009 #define distributedDdmMgr_H_ 00010 #ifdef DDM 00011 00014 00015 #include "rtiMsConfig.h" 00016 #include <assert.h> 00017 #include "ddmMgr.h" 00018 00019 class DtObjectDataDistMgr; 00020 class DtInterDataDistMgr; 00021 class DtDistributedRegion; 00022 class DtRegionSet; 00023 class DtNotifyRegMsg; 00024 class DtDeleteRegMsg; 00025 class DtRegionRealizationMsg; 00026 class DtResignMsg; 00027 00033 class DT_DLL_LRC DtDistributedDataDistMgr : public DtDataDistMgr 00034 { 00035 00036 public: 00038 typedef std::map<DtRegionHandle, DtRegionRealization*> DtRegionRealizationMap; 00039 00040 protected: 00041 00043 DtDistributedDataDistMgr(DtFederateMgr* fedMgrPtr); 00044 00045 public: 00046 00048 virtual ~DtDistributedDataDistMgr(); 00049 00050 private: 00051 00053 DtDistributedDataDistMgr(DtDistributedDataDistMgr const& ); 00054 00056 DtDistributedDataDistMgr& operator= (DtDistributedDataDistMgr const& ); 00057 00058 public: 00059 00061 virtual DtDistributedRegion& defaultRegion(); 00062 00064 virtual DtRegionRealization& defaultRegionRealization(); 00065 00067 virtual DtRegionEntryList const& defaultRegionList() const; 00068 00070 virtual DtObjectDataDistMgr* objDdmMgr(); 00071 00073 virtual DtInterDataDistMgr* interDdmMgr(); 00074 00076 virtual bool active(); 00077 00079 virtual MAKRti::DtInetAddr freeChannel(); 00080 00082 virtual void processNotifyRegion(const DtNotifyRegMsg& msg); 00083 00085 virtual void processDeleteRegion(const DtDeleteRegMsg& msg); 00086 00088 virtual void processRegionRealization(const DtRegionRealizationMsg& msg); 00089 00091 virtual void processResign(const DtResignMsg& msg); 00092 00094 virtual void joinObjectRegionSet(const MAKRti::DtInetAddr& address, 00095 DtRegionHandle regionSetHandle); 00096 00098 virtual void dropObjectRegionSet(const MAKRti::DtInetAddr& address, 00099 DtRegionHandle regionSetHandle); 00100 00102 virtual void joinInteractionRegionSet(const MAKRti::DtInetAddr& address, 00103 DtInteractionClassHandle classHandle, DtRegionHandle regionSetHandle); 00104 00106 virtual void dropInteractionRegionSet(const MAKRti::DtInetAddr& address, 00107 DtInteractionClassHandle classHandle, DtRegionHandle regionSetHandle); 00108 00110 virtual DtRegion* localRegion(DtRegionHandle regionHandle); 00111 00113 virtual DtDistributedRegion* localDistributedRegion(DtRegionHandle regionHandle); 00114 00116 virtual bool isMemberLocalRegions(DtRegionHandle regionHandle); 00117 00119 virtual DtRegion* remoteRegion(DtRegionHandle regionHandle); 00120 00122 virtual DtDistributedRegion* remoteDistributedRegion(DtRegionHandle regionHandle); 00123 00125 virtual DtRegionRealization* localRegionRealization( 00126 DtRegionHandle realizationHandle); 00127 00129 virtual DtRegionRealization* remoteRegionRealization( 00130 DtRegionHandle realizationHandle); 00131 00133 virtual bool isMemberRemoteRegions(DtRegionHandle regionHandle); 00134 00135 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00136 00137 00138 00139 00140 00141 00142 virtual DtRegionHandle constructConveyedRegion(DtRegionRealization const& region, 00143 DtDimensionHandleSet const& availDim); 00144 00147 virtual void destructConveyedRegions(); 00148 00151 virtual DtRegionRealization const* conveyedRegion( 00152 DtRegionHandle realizationHandle); 00153 #endif 00154 00156 virtual void addPendingNotifyRegion(DtRegionSet& regionSet); 00157 00159 virtual void addPendingNotifyRegion(const DtRegionEntryList& regionList); 00160 00163 virtual void sendPendingNotifyRegion(bool forceDualTransmit=false); 00164 00167 virtual void sendNotifyRegionMsg(const DtDistributedRegion ®ion, 00168 bool forceDualTransmit=false); 00169 00171 virtual void sendDeleteRegionMsg(DtRegionHandle handleValue); 00172 00175 virtual void sendRegionRealizationMsg( 00176 DtRegionRealization const& regionRealization, bool forceDualTransmit=false); 00177 00179 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00180 virtual DtRegionHandle createRegion(DtDimensionHandleSet const & dimHandles); 00181 #else 00182 virtual DtRegion* createRegion(DtSpaceHandle spaceHandleValue, 00183 unsigned long numberOfExtents); 00184 virtual DtDistributedRegion* createDistributedRegion(DtSpaceHandle spaceHandleValue, 00185 unsigned long numberOfExtents); 00186 #endif 00187 00189 virtual void deleteRegion(DtRegion *regionPtr); 00190 00192 virtual void deleteDistributedRegion(DtDistributedRegion *regionPtr); 00193 00195 virtual void deleteRegion(DtRegionHandle regionHandle); 00196 00198 virtual void notifyAboutRegionModification(DtRegion* theRegion); 00199 00201 virtual void notifyAboutDistributedRegionModification(DtDistributedRegion* theRegion); 00202 00204 virtual void notifyAboutRegionModification(DtRegionHandle regionHandle); 00205 00210 virtual DtRegionRealization* getRegionRealization(DtDistributedRegion* region, 00211 DtDimensionHandleSet* defaultDimensions=NULL); 00212 00214 virtual DtSpaceHandle getAttributeRoutingSpaceHandle( 00215 DtAttributeHandle theHandle, 00216 DtObjectClassHandle whichClass); 00217 00219 virtual DtSpaceHandle getInteractionRoutingSpaceHandle( 00220 DtInteractionClassHandle theHandle); 00221 00222 #ifdef DtIFSPEC1516 00223 00224 virtual void setRangeBounds(DtRegionHandle regionHandle, 00225 DtExtentIndex extentIndex, DtDimensionHandle dimHandle, 00226 unsigned long lower, unsigned long upper); 00227 virtual void setRangeBounds(DtRegionHandle regionHandle, 00228 DtExtentIndex extentIndex, DtDimBounds const & dimBounds); 00229 virtual DtDimBounds getRangeBounds(DtRegionHandle regionHandle, 00230 DtExtentIndex extentIndex, DtDimensionHandle dimHandle); 00231 00234 virtual bool getDimensionHandleSet( 00235 DtRegionHandle theRegionHandle, 00236 rti1516::DimensionHandleSet& dimSet) const; 00237 #elif defined(DtIFSPEC1516E) 00238 00239 virtual void setRangeBounds(DtRegionHandle regionHandle, 00240 DtExtentIndex extentIndex, DtDimensionHandle dimHandle, 00241 unsigned long lower, unsigned long upper); 00242 virtual void setRangeBounds(DtRegionHandle regionHandle, 00243 DtExtentIndex extentIndex, DtDimBounds const & dimBounds); 00244 virtual DtDimBounds getRangeBounds(DtRegionHandle regionHandle, 00245 DtExtentIndex extentIndex, DtDimensionHandle dimHandle); 00246 00249 virtual bool getDimensionHandleSet( 00250 DtRegionHandle theRegionHandle, 00251 rti1516e::DimensionHandleSet& dimSet) const; 00252 #endif 00253 00255 virtual void postTick(); 00256 00258 virtual bool save(DtRtiSaveFile& file); 00259 00261 virtual void prepareToRestore(); 00262 00264 virtual bool restore( DtRtiSaveFile& file ); 00265 00266 public: 00267 00269 static void processNotifyRegion(const DtNotifyRegMsg& msg, void* usr); 00270 00272 static void processDeleteRegion(const DtDeleteRegMsg& msg, void* usr); 00273 00275 static void processRegionRealization(const DtRegionRealizationMsg& msg, 00276 void* usr); 00277 00279 static DtDataDistMgr* create(DtFederateMgr* fedMgrPtr); 00280 00281 protected: 00282 00284 virtual DtRegionHandle uniqueRegionHandle(); 00285 00287 virtual DtRegionHandle uniqueRegionRealizationHandle(); 00288 00290 virtual void addLocalRegion(DtDistributedRegion* region); 00291 virtual void removeLocalRegion(DtRegionHandle regionHandle); 00292 00294 virtual void addRemoteRegion(DtDistributedRegion* region, 00295 DtFederateHandle fedHandle); 00296 virtual void removeRemoteRegion(DtRegionHandle regionHandle, 00297 DtFederateHandle fedHandle); 00298 00300 virtual void addLocalRegionRealization(DtRegionRealization* realization); 00301 virtual void removeLocalRegionRealization(DtRegionHandle handle); 00302 00304 virtual void addRemoteRegionRealization(DtRegionRealization* realization, 00305 DtFederateHandle fedHandle); 00306 virtual void removeRemoteRegionRealization(DtRegionHandle handle, 00307 DtFederateHandle fedHandle); 00308 00310 virtual void destroyLists(); 00311 00312 protected: 00313 00315 DtDistributedRegion* myDefaultRegion; 00316 DtRegionRealization* myDefaultRegionRealization; 00317 DtRegionEntryList myDefaultRegionList; 00318 00320 MAKRti::DtInetAddr myFreeChannel; 00321 00323 bool myFreeChannelInitialized; 00324 00326 std::map<DtInetAddr, MAKRti::DtList*> myObjRegSetChannels; 00327 std::map<DtInetAddr, MAKRti::DtHashlist*> myInterRegSetChannels; 00328 00330 MAKRti::DtHashlist myLocalRegions; 00331 MAKRti::DtHashlist myRemoteRegions; 00332 MAKRti::DtHashlist myRemoteRegionsByFederate; 00333 MAKRti::DtHashlist myLocalRegionRealizations; 00334 MAKRti::DtHashlist myLocalRegionRealizationsByRegion; 00335 std::map<DtRegionHandle, DtRegionRealization*> myRemoteRegionRealizations; 00336 MAKRti::DtHashlist myRemoteRegionRealizationsByRegion; 00337 MAKRti::DtHashlist myRemoteRegionRealizationsByFederate; 00338 DtRegionRealizationMap myConveyedRegions; 00339 00341 DtRegionHandle myNextRegionHandle; 00342 DtRegionHandle myNextRegionRealizationHandle; 00343 DtRegionHandle myNextConveyedRegionHandle; 00344 00346 std::set<DtRegionHandle> myPendingNotifyRegions; 00347 00349 std::set<DtRegionHandle> myNotifyRegionsSentThisTick; 00350 00351 }; 00352 00353 #endif 00354 #endif 00355 00356 00357