lgrHlaSimManager.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 
00009 
00010 #ifndef lgrHlaSimManager_H_
00011 #define lgrHlaSimManager_H_
00012 
00013 #if DtHLA
00014 
00015 #include "lgrSim.h"
00016 #include "lgrBaseSimManager.h"
00017 #include "lgrHlaConfigData.h"
00018 #include "virtualConstructor.h"
00019 #include "subscriptionListFile.h"
00020 
00021 #include <vl/rtiNamespace.h>
00022 #include <vl/geodeticRegion.h>
00023 
00024 #include <set>
00025 #include <vector>
00026 
00027 class DtObjectPublisher;
00028 class DtExerciseConnInitializer;
00029 class DtExerciseConn;
00030 
00031 namespace MAKLogger
00032 {
00033    class DtLogger;
00034    class DtLgrOnlineFomDesc;
00035    class DtLgrClock;
00036    class DtMessageBuffer;
00037    class DtLgrHlaMessageState;
00038    class DtLgrHlaSimOutput;
00039    class DtLgrHlaSimInput;
00040    class DtLgrHlaTimeProvider;
00041    class DtLgrHlaSimDriver;
00042    class DtLgrFomWithRegions;
00043 
00045    enum DtPlaybackRegionMode
00046    {
00047       DtPlaybackRegionNotEnabled,
00048       DtPlaybackRegionsUseData,
00049       DtPlaybackRegionsUseConveyedExtents
00050    };
00051 
00053    enum DtSubscribeRegionMode
00054    {
00055       DtSubscribeRegionNotEnabled,
00056       DtSubscribeRegionsAreSpecified,
00057       DtSubscribeRegionsAreGlobal
00058    };
00059 
00062    class DT_DLL_LGRSIM DtLgrHlaSimulationManager : public DtLgrBaseSimManager
00063    {
00064    public:
00065 
00066 
00067       DT_VIRTUAL_CTR(DtLgrHlaSimulationManager,(DtLogger& logger,
00068          DtLgrHlaSimDriver* simDriverPtr))
00069       virtual ~DtLgrHlaSimulationManager();
00070 
00072       virtual void tick();
00073 
00075       virtual bool isConnected() const;
00076 
00078       virtual void setSubscriptionListToAll();
00079 
00081       virtual void setObjectSubscriptionList(const std::vector<DtString>& objectClasses);
00082 
00084       virtual void setInteractionSubscriptionList(const std::vector<DtString>& interactionClasses);
00085 
00087       virtual void setSubscriptionList(const DtSubscriptionListFile& list);
00088 
00090       virtual const DtSubscriptionListFile& subscriptionList() const;
00091 
00093       virtual std::vector<DtString> objectSubscriptionList() const;
00094 
00096       virtual std::vector<DtString> interactionSubscriptionList() const;
00097 
00099       virtual void subscribeToData();
00100 
00102       virtual void unsubscribeToData();
00103 
00105 
00106       virtual const DtLgrSimInput* input() const;
00107       virtual DtLgrSimInput* input();
00109 
00111 
00112       virtual const DtLgrSimOutput* output() const;
00113       virtual DtLgrSimOutput* output();
00115 
00117 
00118       virtual const DtMessageState* state() const;
00119       virtual DtMessageState* state();
00121 
00125       virtual DtLgrFileInput* openFileForInput(const DtString& filename) const;
00126 
00127 
00131       virtual DtLgrFileOutput* openFileForCopying(const DtString& filename,
00132          const DtLgrFileInput* input) const;
00133 
00138       virtual DtLgrFileOutput* openFileForOutput(const DtString& filename) const;
00139 
00145       virtual DtLgrFileInput* openPartialFileForCopying(
00146          const DtLgrFileOutput* output, DtFilePosition firstPacket,
00147          DtFilePosition lastPacket) const;
00148 
00149 
00150 
00152       virtual DtMessageState* createState() const;
00153 
00155       virtual bool connect(DtExerciseConnInitializer& initializer);
00156 
00158       virtual void connectShared(DtExerciseConn* exConn);
00159 
00161       virtual void disconnect();
00162 
00163       typedef DtObjectPublisher* (DtPublisherCreator)();
00164 
00166       virtual bool ignoreAdvisories() const;
00167 
00169       virtual void setDrainInputMaxTime(double maxTime);
00170 
00172       virtual void setDrainInputMinTime(double minTime);
00173 
00175       virtual double drainInputMaxTime() const;
00176 
00178       virtual double drainInputMinTime() const;
00179 
00181       virtual void setPassiveSubscription(bool ignore);
00182 
00184       virtual bool passiveSubscription() const;
00185 
00187       virtual void setDdmEnabled( bool enableDdm );
00188 
00190       virtual bool ddmEnabled() const;
00191 
00194       const DtLgrOnlineFomDesc* fomDescription() const;
00195 
00197       virtual void setTimeManagementSettings(bool constrainOnRecord,
00198          bool constrainOnPlayback,bool regulateOnRecord,bool regulateOnPlayback,
00199          double lookAheadTime);
00200 
00202       virtual bool isTimeManagementEnabled() const;
00203 
00207       virtual bool enableTimeConstrained();
00208 
00210       virtual bool testTimeManagement();
00211 
00215       virtual bool disableTimeConstrained();
00216 
00218       virtual bool isTimeConstrained() const;
00219 
00223       virtual bool enableTimeRegulating(double lookAheadInterval);
00224 
00228       virtual bool disableTimeRegulating();
00229 
00231       virtual bool isTimeRegulating() const;
00232 
00234       virtual void registerTimeAdvanceGrant();
00235 
00237       virtual void unregisterTimeAdvanceGrant();
00238 
00241       virtual double requestTimeAdvance();
00242 
00244       virtual double requestAdvanceToNextEvent();
00245 
00248       virtual bool changeLookAheadTime(double time) ;
00249 
00251       virtual bool isTimeAdvanceGrantRegistered() const;
00252 
00256       virtual bool nextMessageRequest(bool available=false);
00257 
00259       virtual double lookAheadTime() const;
00260 
00262       virtual bool constrainOnRecord() const;
00263 
00265       virtual bool constrainOnPlayback() const;
00266 
00268       virtual bool regulateOnRecord() const;
00269 
00271       virtual bool regulateOnPlayback() const;
00272 
00274       virtual double fedTime() const;
00275 
00277       virtual double requestedTime() const;
00278 
00280       virtual double initialFedTime() const;
00281 
00283       virtual bool isTimeAdvancing() const;
00284 
00286       virtual bool isRequestingNextEvent() const;
00287 
00289       virtual bool isRequestingTimeAdvance() const;
00290 
00292       virtual void setDisableTimeManagementTest(bool disableTest);
00293 
00295       virtual void setAllowUnsubscribes(bool allowUnsubscribe);
00296 
00298       virtual bool allowUnsubscribes() const;
00299 
00300       //virtual bool subscribeInteractionWithRegion(
00301 
00303       virtual const DtString& dynamicNamePrefix() const;
00304 
00306       virtual void setDynamicNamePrefix(const DtString& dynamicNamePrefix);
00307 
00309       virtual DtLgrHlaSimDriver* simDriver();
00310 
00312       virtual const DtLgrHlaSimDriver* simDriver() const;
00313 
00314 
00316       virtual bool testDdm() const;
00317 
00321       virtual bool addPlaybackRegionSetForObjectName(const DtString& objectName, const DtString& regionSetName);
00322 
00324       virtual void removePlaybackRegionSetForObjectName(const DtString& objectName);
00325 
00330       virtual unsigned int getPlaybackRegionSetForObjectName(DtString objectName,
00331          DtDDMRegionSet& regionSet, bool cacheRegions=true);
00332 
00336       virtual bool addPlaybackRegionSetForInteractionClass(const DtString& className, const DtString& regionSetName);
00337 
00339       virtual void removePlaybackRegionSetForInteractionClass(const DtString& className);
00340 
00344       virtual unsigned int getPlaybackRegionSetForInteractionClass(DtString className,
00345          DtDDMRegionSet& regionSet, bool cacheRegions=true);
00346 
00348       virtual void subscribeToList(const DtSubscriptionListFile& sublist);
00349 
00351       virtual void setPublicationList(const DtSubscriptionListFile& publist);
00352 
00354       virtual const DtSubscriptionListFile& publicationList() const;
00355 
00357       virtual void setConfigurationFileName(const DtString& filename);
00358 
00360       virtual DtLgrFomWithRegions *fomWithRegions();
00361 
00363       virtual MAKLogger::DtPlaybackRegionMode playbackRegionMode() const;
00364 
00366       virtual void setPlaybackRegionMode(MAKLogger::DtPlaybackRegionMode val);
00367 
00369       virtual MAKLogger::DtSubscribeRegionMode subscribeRegionMode() const;
00370 
00372       virtual void setSubscribeRegionMode(MAKLogger::DtSubscribeRegionMode val);
00373 
00375       virtual bool playbackRegionDynamicAssociationEnabled() const;
00376 
00378       virtual void setPlaybackRegionDynamicAssociationEnabled(bool val);
00379 
00381       virtual bool playbackRegionDynamicExtentsEnabled() const;
00382 
00384       virtual void setPlaybackRegionDynamicExtentsEnabled(bool val);
00385 
00387       virtual bool recordConveyedRegionsEnabled() const;
00388 
00390       virtual void setRecordConveyedRegionsEnabled(bool val);
00391 
00393       virtual bool requestUpdatesEnabled() const;
00394 
00396       virtual void setRequestUpdatesEnabled(bool val);
00397 
00399       virtual bool subscribeUnspecifiedAttributesEnabled() const;
00400 
00402       virtual void setSubscribeUnspecifiedAttributesEnabled(bool val);
00403 
00405       virtual bool playbackWithoutRegionsEnabled() const;
00406 
00408       virtual void setPlaybackWithoutRegionsEnabled(bool val);
00409 
00411       virtual bool subscribeToAllClassesEnabled() const;
00412 
00414       virtual void setSubscribeToAllClassesEnabled(bool val);
00415 
00416 
00417    protected:
00418 
00419       virtual const DtLgrHlaConfigData& configData() const;
00420 
00424       virtual bool getSubscribeRegionSetForObjectClass(const DtString& classname, DtDDMRegionSet& regionSet) const;
00425 
00429       virtual bool getSubscribeRegionSetForInteractionClass(const DtString& classname, DtDDMRegionSet& regionSet) const;
00430 
00436       virtual bool getGlobalObjectRegionSet(const DtString& className, DtDDMRegionSet& regionSet);
00437 
00441       virtual bool getGlobalInteractionRegionSet(const DtString& className, DtDDMRegionSet& regionSet);
00442 
00445       virtual int drainInput(DtTime maxTime = -1, DtTime minTime = 0.0);
00446 
00447 #if DtHLA_1516
00448       typedef RTI::LogicalTime RtiTime;
00449       typedef RTI::LogicalTimeInterval RtiTimeInterval;
00450 #else
00451       typedef RTI::FedTime RtiTime;
00452       typedef RTI::FedTime RtiTimeInterval;
00453 #endif
00454 
00456       virtual void timeAdvanceGrant( const RtiTime&);
00457       virtual void timeConstrainedEnable( const RtiTime&);
00458       virtual void timeRegulationEnable( const RtiTime&);
00459 
00460       virtual void initializeFederationTime();
00462 
00464       virtual void setObjectClassSubscriptionState(const DtString& name, const DtDDMRegionSet& regionset, bool subscribeToClass);
00465 
00467       virtual void setInteractionClassSubscriptionState(const DtString& name, const DtDDMRegionSet& regionset, bool subscribeToClass);
00468 
00471       virtual void subscribeObjectClasses(const std::set<DtString>& objectClasses,
00472          const DtSubscriptionListFile& sublist);
00473 
00476       virtual void subscribeInteractionClasses(const std::set<DtString>& interactionClasses, const DtSubscriptionListFile& sublist);
00477 
00478    protected:
00479 
00480       static void timeAdvanceGrantCb( const RtiTime&, void* simMan);
00481       static void timeConstrainedEnableCb( const RtiTime&, void* simMan);
00482       static void timeRegulationEnableCb( const RtiTime&, void* simMan);
00483 
00484    protected:
00485 
00486       DtLgrHlaSimDriver* mySimDriver;
00487       DtLgrHlaMessageState* myMessageState;
00488       DtLgrHlaSimInput* myInput;
00489       DtLgrHlaSimOutput* myOutput;
00490 
00491       DtLgrOnlineFomDesc* myFomDescription;
00492       bool myIgnoreAdvisories;
00493       bool myPassiveSubscription;
00494       bool myTimeAdvanceGrantRegisterFlag;
00495       bool myIsTimeConstrainedFlag;
00496       bool myIsTimeRegulatingFlag;
00497       DtSubscriptionListFile* mySubscriptionList;
00498       DtSubscriptionListFile* myPublicationList;
00499       bool mySubscribedFlag;
00500 
00502       bool myIsDDMEnabled;
00503 
00505       DtPlaybackRegionMode myPlaybackRegionMode;
00506 
00508       DtSubscribeRegionMode mySubscribeRegionMode;
00509 
00512       bool myPlaybackRegionDynamicAssociationEnabled;
00513 
00515       bool myPlaybackRegionDynamicExtentsEnabled;
00516 
00518       bool myRecordConveyedRegionsEnabled;
00519 
00521       bool myRequestUpdatesEnabled;
00522 
00525       bool mySubscribeUnspecifiedAttributesEnabled;
00526 
00528       bool mySubscribeToAllClassesEnabled;
00529 
00531       bool myPlaybackWithoutRegionsEnabled;
00532 
00533       RtiTime* myFederationTime;
00534       double myRequestedTime;
00535       double myInitialFedTime;
00536       bool myRequestingTimeAdvance;
00537       bool myRequestingNextEvent;
00538 
00539       bool myConstrainOnRecord;
00540       bool myConstrainOnPlayback;
00541       bool myRegulateOnRecord;
00542       bool myRegulateOnPlayback;
00543       bool myTimeManagementEnabledFlag;
00544       double myLookAheadTime;
00545       bool myDisableTimeManagementTesting;
00546       bool myAllowUnsubscribe;
00547       double myDrainInputMaxTime;
00548       double myDrainInputMinTime;
00549 
00550       DtString myDynamicNamePrefix;
00551 
00552       DtLgrHlaConfigData myConfigData;
00553 
00554       typedef std::map<DtString, DtDDMRegionSet> DtNameRegionMap;
00555 
00556       // Map name to global region.
00557       // For 1.3, the name is the routing space.
00558       // For 1516, the name is the concatenation of the dimension names used for the region.
00559       DtNameRegionMap myGlobalRegions;
00560 
00561       // Map the object region name to the region instance
00562       DtNameRegionMap myObjectRegions;
00563 
00564       // Map the interaction region name to the region instance
00565       DtNameRegionMap myInteractionRegions;
00566 
00567       DtLgrFomWithRegions *myFomWithRegions;
00568    };
00569 
00570    const DtString& DtPlaybackRegionModeString(DtPlaybackRegionMode mode);
00571    const DtString& DtSubscribeRegionModeString(DtSubscribeRegionMode mode);
00572 
00573 }
00574 
00575 #endif
00576 #endif

Document ID: Generated on Tue Oct 11 19:41:03 EDT 2011 from SVN revision 107422
Copyright © 2005-2011 VT MÄK Inc. All Rights Reserved (www.mak.com)