Go to the documentation of this file.00001
00002
00003
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
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
00557
00558
00559 DtNameRegionMap myGlobalRegions;
00560
00561
00562 DtNameRegionMap myObjectRegions;
00563
00564
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