10 #ifndef lgrHlaSimManager_H_
11 #define lgrHlaSimManager_H_
22 #if DtHLA_1516_EVOLVED
23 #include <RTI/time/HLAfloat64Time.h>
24 #include <RTI/time/HLAfloat64Interval.h>
26 #include <RTI/logicalTimeImpl.h>
27 #include <RTI/logicalTimeIntervalImpl.h>
33 #include <vl/rtiNamespace.h>
34 #include <vl/geodeticRegion.h>
39 class DtObjectPublisher;
40 class DtExerciseConnInitializer;
42 class DtHlaObjectFactory;
44 class DtStateRepository;
48 namespace MAKTrafficClientServerExConn
50 class DtServerExerciseConnection;
56 class DtLgrOnlineFomDesc;
58 class DtMessageBuffer;
59 class DtLgrHlaMessageState;
60 class DtLgrHlaSimOutput;
61 class DtLgrHlaSimInput;
62 class DtLgrHlaTimeProvider;
63 class DtLgrHlaSimDriver;
64 class DtLgrFomWithRegions;
67 enum DtPlaybackRegionMode
69 DtPlaybackRegionNotEnabled,
70 DtPlaybackRegionsUseData,
71 DtPlaybackRegionsUseConveyedExtents
75 enum DtSubscribeRegionMode
77 DtSubscribeRegionNotEnabled,
78 DtSubscribeRegionsAreSpecified,
79 DtSubscribeRegionsAreGlobal
84 class DT_DLL_LGRSIM DtLgrHlaSimulationManager :
public DtLgrBaseSimManager
90 DtLgrHlaSimDriver* simDriverPtr))
91 virtual ~DtLgrHlaSimulationManager();
100 virtual bool isConnected()
const;
103 virtual void setSubscriptionListToAll();
106 virtual void setObjectSubscriptionList(
const std::vector<DtString>& objectClasses);
109 virtual void setInteractionSubscriptionList(
const std::vector<DtString>& interactionClasses);
112 virtual void setSubscriptionList(
const DtSubscriptionListFile& list);
115 virtual const DtSubscriptionListFile& subscriptionList()
const;
118 virtual std::vector<DtString> objectSubscriptionList()
const;
121 virtual std::vector<DtString> interactionSubscriptionList()
const;
124 virtual void subscribeToData();
127 virtual void unsubscribeToData();
130 virtual void addTrafficAnalyzerFilter(
DtHlaTAFilter* taFilter);
133 virtual void removeTrafficAnalyzerFilter(
DtHlaTAFilter* taFilter);
137 virtual bool evaluateTrafficAnalyzerFilters(
138 const DtStateRepository& stateRep,
const DtHlaObject& obj);
142 virtual bool evaluateTrafficAnalyzerFilters(
const DtInteraction& interaction);
146 virtual const DtLgrSimInput* input()
const;
147 virtual DtLgrSimInput* input();
152 virtual const DtLgrSimOutput* output()
const;
153 virtual DtLgrSimOutput* output();
158 virtual const DtMessageState* state()
const;
159 virtual DtMessageState* state();
165 virtual DtLgrFileInput* openFileForInput(
const DtString& filename)
const;
171 virtual DtLgrFileOutput* openFileForCopying(
const DtString& filename,
172 const DtLgrFileInput* input)
const;
178 virtual DtLgrFileOutput* openFileForOutput(
const DtString& filename,
179 const DtString& description)
const;
186 virtual DtLgrFileInput* openPartialFileForCopying(
191 virtual void initPlayback(DtLgrFileInput& input);
195 virtual DtMessageState* createState()
const;
199 virtual bool connect(DtExerciseConnInitializer& initializer, DtString& failureReason);
205 virtual void disconnect();
207 typedef DtObjectPublisher* (DtPublisherCreator)();
210 virtual bool ignoreAdvisories()
const;
213 virtual void setDrainInputMaxTime(
double maxTime);
216 virtual void setDrainInputMinTime(
double minTime);
219 virtual double drainInputMaxTime()
const;
222 virtual double drainInputMinTime()
const;
225 virtual void setPassiveSubscription(
bool ignore);
228 virtual bool passiveSubscription()
const;
231 virtual void setDdmEnabled(
bool enableDdm );
234 virtual bool ddmEnabled()
const;
237 virtual void setTrafficAnalyzerEnabled(
bool enableTrafficAnalyzer );
240 virtual bool trafficAnalyzerEnabled()
const;
244 virtual void setSendOnlyUpdatedValues(
bool updatesOnly);
245 virtual bool sendOnlyUpdatedValues()
const;
250 virtual const DtLgrOnlineFomDesc* fomDescription()
const;
253 virtual DtHlaObjectFactory* defaultObjectFactory();
256 virtual void setTimeManagementSettings(
bool constrainOnRecord,
257 bool constrainOnPlayback,
bool regulateOnRecord,
bool regulateOnPlayback,
258 double lookAheadTime);
261 virtual bool isTimeManagementEnabled()
const;
266 virtual bool enableTimeConstrained();
269 virtual bool testTimeManagement();
274 virtual bool disableTimeConstrained();
277 virtual bool isTimeConstrained()
const;
282 virtual bool enableTimeRegulating(
double lookAheadInterval);
287 virtual bool disableTimeRegulating();
290 virtual bool isTimeRegulating()
const;
293 virtual void registerTimeAdvanceGrant();
296 virtual void unregisterTimeAdvanceGrant();
300 virtual double requestTimeAdvance();
303 virtual double requestAdvanceToNextEvent();
306 virtual bool isTimeAdvanceGrantRegistered()
const;
309 virtual double lookAheadTime()
const;
314 virtual double workingLookAheadTime()
const;
317 virtual bool constrainOnRecord()
const;
320 virtual bool constrainOnPlayback()
const;
323 virtual bool regulateOnRecord()
const;
326 virtual bool regulateOnPlayback()
const;
332 virtual double fedTime()
const;
335 virtual double requestedTime()
const;
338 virtual double initialFedTime()
const;
341 virtual double timeAdvanced()
const;
344 virtual bool isTimeAdvancing()
const;
347 virtual bool isRequestingNextEvent()
const;
350 virtual bool isRequestingTimeAdvance()
const;
353 virtual void setDisableTimeManagementTest(
bool disableTest);
360 virtual void setAllowUnsubscribes(
bool allowUnsubscribe);
363 virtual bool allowUnsubscribes()
const;
368 virtual const DtString& dynamicNamePrefix()
const;
371 virtual void setDynamicNamePrefix(
const DtString& dynamicNamePrefix);
374 virtual DtLgrHlaSimDriver* simDriver();
377 virtual const DtLgrHlaSimDriver* simDriver()
const;
381 virtual bool testDdm()
const;
386 virtual bool addPlaybackRegionSetForObjectName(
const DtString& objectName,
const DtString& regionSetName);
389 virtual void removePlaybackRegionSetForObjectName(
const DtString& objectName);
395 virtual unsigned int getPlaybackRegionSetForObjectName(DtString objectName,
396 DtDDMRegionSet& regionSet,
bool cacheRegions=
true);
401 virtual bool addPlaybackRegionSetForInteractionClass(
const DtString& className,
const DtString& regionSetName);
404 virtual void removePlaybackRegionSetForInteractionClass(
const DtString& className);
409 virtual unsigned int getPlaybackRegionSetForInteractionClass(DtString className,
410 DtDDMRegionSet& regionSet,
bool cacheRegions=
true);
413 virtual void subscribeToList(
const DtSubscriptionListFile& sublist);
416 virtual void setPublicationList(
const DtSubscriptionListFile& publist);
419 virtual const DtSubscriptionListFile& publicationList()
const;
422 virtual void setConfigurationFileName(
const DtString& filename);
425 virtual DtLgrFomWithRegions *fomWithRegions();
428 virtual MAKLogger::DtPlaybackRegionMode playbackRegionMode()
const;
431 virtual void setPlaybackRegionMode(MAKLogger::DtPlaybackRegionMode val);
434 virtual MAKLogger::DtSubscribeRegionMode subscribeRegionMode()
const;
437 virtual void setSubscribeRegionMode(MAKLogger::DtSubscribeRegionMode val);
440 virtual bool playbackRegionDynamicAssociationEnabled()
const;
443 virtual void setPlaybackRegionDynamicAssociationEnabled(
bool val);
446 virtual bool playbackRegionDynamicExtentsEnabled()
const;
449 virtual void setPlaybackRegionDynamicExtentsEnabled(
bool val);
452 virtual bool recordConveyedRegionsEnabled()
const;
455 virtual void setRecordConveyedRegionsEnabled(
bool val);
458 virtual bool requestUpdatesEnabled()
const;
461 virtual void setRequestUpdatesEnabled(
bool val);
464 virtual bool subscribeUnspecifiedAttributesEnabled()
const;
467 virtual void setSubscribeUnspecifiedAttributesEnabled(
bool val);
470 virtual bool playbackWithoutRegionsEnabled()
const;
473 virtual void setPlaybackWithoutRegionsEnabled(
bool val);
476 virtual bool subscribeToAllClassesEnabled()
const;
479 virtual void setSubscribeToAllClassesEnabled(
bool val);
484 virtual const DtLgrHlaConfigData& configData()
const;
489 virtual bool getSubscribeRegionSetForObjectClass(
const DtString& classname, DtDDMRegionSet& regionSet)
const;
494 virtual bool getSubscribeRegionSetForInteractionClass(
const DtString& classname, DtDDMRegionSet& regionSet)
const;
501 virtual bool getGlobalObjectRegionSet(
const DtString& className, DtDDMRegionSet& regionSet);
506 virtual bool getGlobalInteractionRegionSet(
const DtString& className, DtDDMRegionSet& regionSet);
511 virtual int drainInput();
512 virtual int drainInput(DtTime maxTime, DtTime minTime);
515 #if DtHLA_1516_EVOLVED
516 typedef RTI::LogicalTime RtiTime;
517 typedef RTI::LogicalTimeInterval RtiTimeInterval;
518 typedef HLAfloat64Time RtiTimeImpl;
519 typedef HLAfloat64Interval RtiTimeIntervalImpl;
521 typedef RTI::LogicalTime RtiTime;
522 typedef RTI::LogicalTimeInterval RtiTimeInterval;
523 typedef LogicalTimeImpl RtiTimeImpl;
524 typedef LogicalTimeIntervalImpl RtiTimeIntervalImpl;
526 typedef RTI::FedTime RtiTime;
527 typedef RTI::FedTime RtiTimeInterval;
528 typedef RTIfedTime RtiTimeImpl;
529 typedef RTIfedTime RtiTimeIntervalImpl;
533 virtual void timeAdvanceGrant(
const RtiTime&);
534 virtual void timeConstrainedEnable(
const RtiTime&);
535 virtual void timeRegulationEnable(
const RtiTime&);
537 virtual bool invokeEnableTimeConstrained(
bool checkLongOperation,
bool postWarnings);
538 virtual bool invokeFlushQueue(RtiTimeImpl& newTime);
539 virtual bool invokeQueryMinNextEventTime(RtiTimeImpl& nextTime);
540 virtual bool invokeNextMessageRequest(RtiTimeImpl& nextTime,
bool available);
541 virtual bool invokeTimeAdvanceRequest(RtiTimeImpl& nextTime,
bool available);
542 virtual void initializeFederationTime();
543 virtual bool invokeChangeLookAheadTime(
double time);
544 virtual bool invokeQueryLogicalTime(RtiTimeImpl&);
549 virtual void setObjectClassSubscriptionState(
const DtString& name,
const DtDDMRegionSet& regionset,
bool subscribeToClass);
552 virtual void setInteractionClassSubscriptionState(
const DtString& name,
const DtDDMRegionSet& regionset,
bool subscribeToClass);
556 virtual void subscribeObjectClasses(
const std::set<DtString>& objectClasses,
557 const DtSubscriptionListFile& sublist);
561 virtual void subscribeInteractionClasses(
const std::set<DtString>& interactionClasses,
const DtSubscriptionListFile& sublist);
563 virtual void rtiErrorCb(
const char* label);
567 static void timeAdvanceGrantCb(
const RtiTime&,
void* simMan);
568 static void timeConstrainedEnableCb(
const RtiTime&,
void* simMan);
569 static void timeRegulationEnableCb(
const RtiTime&,
void* simMan);
570 static void rtiErrorCb(
const char* label,
void* simMan);
574 DtLgrHlaSimDriver* mySimDriver;
575 DtLgrHlaMessageState* myMessageState;
576 DtLgrHlaSimInput* myInput;
577 DtLgrHlaSimOutput* myOutput;
580 DtHlaObjectFactory* myDefaultObjectFactory;
582 DtLgrOnlineFomDesc* myFomDescription;
583 bool myIgnoreAdvisories;
584 bool myPassiveSubscription;
585 bool myTimeAdvanceGrantRegisterFlag;
586 bool myIsTimeConstrainedFlag;
587 bool myIsTimeRegulatingFlag;
588 DtSubscriptionListFile* mySubscriptionList;
589 DtSubscriptionListFile* myPublicationList;
590 bool mySubscribedFlag;
591 DtLgrHlaTimeProvider* myHlaTimeProvider;
594 std::set<DtHlaTAFilter*> myTrafficAnalyzerFilters;
600 bool myTrafficAnalyzerEnabled;
603 DtPlaybackRegionMode myPlaybackRegionMode;
606 DtSubscribeRegionMode mySubscribeRegionMode;
610 bool myPlaybackRegionDynamicAssociationEnabled;
613 bool myPlaybackRegionDynamicExtentsEnabled;
616 bool myRecordConveyedRegionsEnabled;
619 bool myRequestUpdatesEnabled;
623 bool mySubscribeUnspecifiedAttributesEnabled;
626 bool mySubscribeToAllClassesEnabled;
629 bool myPlaybackWithoutRegionsEnabled;
632 bool mySendOnlyUpdatedValues;
637 RtiTimeImpl* myFederationTime;
638 RtiTimeIntervalImpl* myTimeAdvanced;
640 double myRequestedTime;
641 double myInitialFedTime;
642 bool myRequestingTimeAdvance;
643 bool myRequestingNextEvent;
645 bool myConstrainOnRecord;
646 bool myConstrainOnPlayback;
647 bool myRegulateOnRecord;
648 bool myRegulateOnPlayback;
649 bool myTimeManagementEnabledFlag;
650 double myLookAheadTime;
651 double myWorkingLookAhead;
652 bool myDisableTimeManagementTesting;
653 bool myAllowUnsubscribe;
654 double myDrainInputMaxTime;
655 double myDrainInputMinTime;
657 DtString myDynamicNamePrefix;
659 DtLgrHlaConfigData myConfigData;
661 typedef std::map<DtString, DtDDMRegionSet> DtNameRegionMap;
666 DtNameRegionMap myGlobalRegions;
669 DtNameRegionMap myObjectRegions;
672 DtNameRegionMap myInteractionRegions;
674 DtLgrFomWithRegions *myFomWithRegions;
677 const DtString& DtPlaybackRegionModeString(DtPlaybackRegionMode mode);
678 const DtString& DtSubscribeRegionModeString(DtSubscribeRegionMode mode);