18 #include <vl/globalObjectDesignator.h>
19 #include <vl/vrlinkStateStateRepository.h>
20 #include <tbb/spin_mutex.h>
21 #include <tbb/mutex.h>
25 #include <tbb/tbb_thread.h>
26 #include <boost/function.hpp>
39 class DtRemoteObjectManager;
40 class DtVrfEntityIdentifierFactory;
41 class DtVrlinkNetworkInterface;
42 class DtVrlinkEventTranslatorManager;
43 class DtVrlinkEventTranslator;
44 class DtStateDataManager;
46 class DtHlaExerciseClock;
74 virtual void beginFrame(
double)
override;
75 virtual bool preAdvanceFrame()
override;
76 virtual void advanceFrame(
double* networkTime =
nullptr)
override;
79 virtual void setBlockOnUnfinishedRemoteDiscovery(
bool);
82 return myBlockOnUnfinishedRemoteDiscovery;
85 virtual const char*
type()
const {
return Type(); };
86 static const char*
Type() {
return "vrlink-network-interface"; };
89 virtual bool printDataToStream(
const DtUUID&, DtOutputStream&
stream)
const;
92 virtual void setInterest(
const DtVector& geocentricCenter,
double radius);
99 virtual void setExerciseStartTime(
double);
100 virtual void setSimTime(
double);
101 virtual void setTimeMultiplier(
double);
104 virtual void resetSimulation();
108 virtual void setControlsDrainInput(
bool);
109 bool controlsDrainInput()
const;
114 return std::string(
"DIS");
115 #elif DDtHLA_1516_EVOLVED == 1
116 return std::string(
"HLA1516e");
117 #elif DDtHLA_1516 == 1
118 return std::string(
"HLA1516");
119 #else //This is HLA13
120 return std::string(
"HLA13");
125 virtual void setRunInTimeManagementMode(
bool yesOrNo);
128 virtual bool runInTimeManagementMode()
const;
133 static void startTimeManagement(
void* usr);
134 static void stopTimeManagement(
void* usr);
138 virtual void processStartTimeManagement();
139 virtual void processStopTimeManagement();
142 virtual void setReflectedListRequestUpdates(
bool yesOrNo);
146 virtual void setMetocPublishingEnabled(
bool);
149 return myMetocPublishingEnabled;
153 virtual void setDisableRemoteDiscovery(
bool);
156 return myDisableRemoteDiscovery;
160 virtual void setDefaultObjectTimeout(
int);
163 return myDefaultObjectTimeout;
166 struct ComponentRuleUserData
184 typedef boost::function<bool (const DtStateComponent*, const DtStateData*, std::shared_ptr<ComponentRuleUserData>)>
CreationRule;
186 const DtString& testBeforeInterface =
"");
190 virtual void setRunFullyThreaded(
bool);
191 virtual bool runFullyThreaded()
const;
193 virtual void setEnabled(
bool);
198 return myCoordinateSystem;
203 return myExerciseConnection;
206 virtual void removeAndDeleteAll();
207 virtual bool wantsToSelfReflect(
unsigned int)
const;
210 virtual bool selfReflecting()
const;
218 return myParameterDatabase;
221 virtual unsigned int maxNameLengthForType(
const DtObjectType&)
const;
224 virtual void setVrfSessionId(
int);
227 return myVrfSessionId;
231 virtual void setVrfMessageVersionSupported(
int);
234 return myVrfMessageVersionSupported;
239 virtual void setPublishZeroVelocityWhenPaused(
bool);
242 return myPublishZeroVelocityWhenPaused;
252 return mySimMgmtPduProcessLevel;
255 virtual void setSimMgmtPduProcessLevel(
unsigned int level);
260 virtual void setDeadReckoningAlgorithmToStaticOnPause(
bool);
263 return mySetDeadReckoningAlgorithmToStaticOnPause;
267 virtual void overrideDeadReckoningAlgorithm(
int drAlg);
271 virtual bool isDeadReckonAlgorithmOverridden(
int& drAlg)
const;
275 virtual void removeDeadReckoningAlgorithmOverride();
277 virtual DtEntityIdentifier nextEntityIdentifier(
const DtStateData* = 0,
const DtEntityIdentifier& = DtEntityIdentifier());
280 virtual DtEntityIdentifier objectIdentifierFor(
const DtUUID&)
const;
283 virtual DtEntityIdentifier globalObjectIdentifierFor(
const DtUUID&)
const;
286 virtual DtGlobalObjectDesignator globalObjectIdentifierFor(
const DtUUID&)
const;
290 virtual DtUUID uuidForObjectIdentifier(
const DtEntityIdentifier&)
const;
293 virtual DtUUID uuidForObjectIdentifier(
const DtGlobalObjectDesignator&)
const;
296 virtual void setSiteAppId(
int,
int);
300 virtual DtEventId nextEventId(
const DtGlobalObjectDesignator& entId);
302 virtual int setAppIdRangeMax(
int);
307 virtual void startScenarioLoad(
bool);
310 virtual void endScenarioLoad(
bool);
316 virtual double determineSimTime(
double& dt);
318 virtual double simTime()
const;
320 virtual void setMaxDrainInputTime(
double maxTime);
321 virtual double maxDrainInputTime()
const;
323 virtual void setFrameRateMode(
const DtString&
mode,
double deltaTime,
bool manageTime =
false);
324 virtual void rewindScenario();
327 virtual void setMinDrainInputTime(
double minTime);
328 virtual double minDrainInputTime()
const;
330 virtual void setFrameDeltaTime(
double);
331 virtual double frameDeltaTime()
const;
333 virtual void beginBulkCreate()
override;
334 virtual void endBulkCreate()
override;
336 virtual void setMaxDrainInputReads(
int maxReads);
337 virtual int maxDrainInputReads()
const;
344 virtual void removeEventTranslator(
int eventType);
352 virtual void pause();
364 return myEventManager;
369 return myCommunicationManager;
374 return myRemoteObjectManager;
380 virtual void setNumCallbackThreads(
unsigned);
383 virtual void setNumRemoteCallbackThreads(
unsigned);
385 virtual void addDefaultNetworkInterface(
const DtEntityType&,
const DtString& local,
const DtString& remote);
386 virtual void removeDefaultNetworkInterface(
const DtEntityType&);
393 virtual void setUseNetworkThread(
bool);
394 virtual bool usingNetworkThread()
const;
397 virtual void setDisableParallelPublisherTick(
bool);
398 virtual bool disableParallelPublisherTick()
const;
402 virtual void setTickPublishersDuringEntityTick(
bool);
403 virtual bool tickPublishersDuringEntityTick()
const;
407 virtual void reserve(
unsigned numToReserve);
410 virtual bool willRediscoverObjects()
const;
419 return myNetworkFrameTime;
422 virtual void setSendMessagesInNetworkProcess(
bool);
425 return mySendMessagesInNetworkProcess;
428 #if DtHLA_1516_EVOLVED
429 virtual void setAutoReserve(
int);
431 int autoReserve()
const;
433 virtual bool isNameReserved(
const DtString& name)
const;
434 virtual bool isNameReservationPending(
const DtString& name)
const;
440 virtual DtString nextGlobalObjectId(
const DtString& defaultId = DtString::nullString());
443 virtual void sendQueuedMessages();
452 virtual void reserveGlobalObjectIds(
unsigned numToReserve);
483 virtual void slot_prepareForHandoff(
DtStateData*,
bool becomingLocal);
486 virtual void stateDataAboutToBeRemoved(
const DtStateData*);
488 virtual void printReflectedObjectCounts()
const;
492 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
495 void createExerciseClock(
int clockMode = 0);
497 virtual void drainInput();
501 virtual void cleanupNetworkThread();
503 virtual void runNetwork();
504 virtual void resolvePendingIds();
507 virtual void createAndInitRemoteObjectManager();
510 virtual bool rediscoverObjects();
516 virtual bool createInterfaceIfComponentIs(
const DtStateComponent* c,
const DtStateData* d, std::shared_ptr<ComponentRuleUserData>);
518 virtual void stateDataManagerDeleted();
520 #if DtHLA_1516_EVOLVED
521 virtual void reservedNamesSuceeded(
const std::set<std::wstring>& theNames);
525 virtual void reservedNamesFailed(
const std::set<std::wstring>& theNames);
527 static void nameSetReservationSucceededCb(
const std::set<std::wstring>& nameSet,
529 static void nameSetReservationFailedCb(
const std::set<std::wstring>& nameSet,
534 virtual void setExecutionState(DtVRLExecutionStatus status);
546 typedef std::map<makVrf::SimStateID, DtSimObjectNetInterface*>
Publishing;
602 #if DtHLA_1516_EVOLVED
603 std::set<DtGlobalObjectDesignator> myReservedGlobalIds;
604 std::set<DtGlobalObjectDesignator> myPendingReservedGlobalIds;
605 tbb::queuing_mutex myGlobalIdReserveMutex;
610 int myMaxDrainInputReads;
UUID is a unique ID wrapper class.
Definition: rwUUID.h:226
Instances of DtVrfObjectParameters are the readable/writeable objects that contain the information ne...
Definition: vrfObjectParameters.h:63
DtExerciseConn * myExerciseConnection
Definition: vrlinkNetworkInterface.h:539
DtFilename myFastForwardSettingsFile
Fast forward settings file.
Definition: vrlinkNetworkInterface.h:614
DtVrfEntityIdentifierFactory * myEntityIdentifierFactory
Definition: vrlinkNetworkInterface.h:592
bool setDeadReckoningAlgorithmToStaticOnPause() const
Definition: vrlinkNetworkInterface.h:261
bool metocPublishingEnabled() const
Definition: vrlinkNetworkInterface.h:147
std::auto_ptr< tbb::tbb_thread > myNetworkThread
Member variables used to interact with the remote objects reading.
Definition: vrlinkNetworkInterface.h:629
DtHlaExerciseClock * myExerciseClock
Definition: vrlinkNetworkInterface.h:597
virtual bool publishingOnLegionNetwork() const
Whether or not this interface publishes on the legion network.
Definition: vrlinkNetworkInterface.h:513
static const char * Type()
Definition: vrlinkNetworkInterface.h:86
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:38
virtual int vrfSessionId() const
Definition: vrlinkNetworkInterface.h:225
unsigned int simMgmtPduProcessLevel() const
Set/Get the type of receiver ids to process when processing a sim mgmt PDU 1={*,*,*}&{*,*,0} <- wildcarded recipients 2={a,b,0} <- specific ids only 3= both 1 and 2.
Definition: vrlinkNetworkInterface.h:250
const Coordinate_System * myCoordinateSystem
Definition: vrlinkNetworkInterface.h:578
bool myRunInTimeManagementMode
Definition: vrlinkNetworkInterface.h:598
bool myScenarioLoaded
Definition: vrlinkNetworkInterface.h:669
DtString local
Definition: vrlinkNetworkInterface.h:61
Definition: scenario.h:52
DtDefaultSimulationModelSetValidatorManager mySimulationModelSetValidator
Definition: vrlinkNetworkInterface.h:616
Default implementation that will add protocol and state data validators (contained in this header fil...
Definition: defaultSimulationModelSetValidatorManager.h:19
virtual bool needsUnpublishedDatabase() const
Return true if this connection uses the simulation database to publish on (as a legion connection doe...
Definition: vrlinkNetworkInterface.h:470
DtString remote
Definition: vrlinkNetworkInterface.h:62
virtual int vrfMessageVersionSupported() const
Definition: vrlinkNetworkInterface.h:232
unsigned int StateComponentType
Definition: stateComponent.h:55
int myVrfMessageVersionSupported
Definition: vrlinkNetworkInterface.h:582
DT_DLL_VRVCORE DtTaitBryan level(const DtCoordinateSystem &cs, const DtVector &localOrigin, double topoHeading)
Returns a level orientation with the topographic heading.
std::vector< makVrfEvents::DtEvent * > myQueuedMessagesToSend
Definition: vrlinkNetworkInterface.h:664
DtReflectedEntityList * myReflectedEntityList
Definition: vrlinkNetworkInterface.h:655
bool mySetDeadReckoningAlgorithmToStaticOnPause
Definition: vrlinkNetworkInterface.h:587
The DtEventManager handles the sending and receipt of system events (fire, detonate, command, etc). It provides a thread-safe way for the sim engine to send and receive such events, between both components within this sim engine and other remote applications.
Definition: eventManager.h:33
std::map< DtStateComponent *, DtSimObjectNetInterface * > StateComponentsPublishing
Definition: vrlinkNetworkInterface.h:549
ComponentCreationRules myComponentCreationRules
Definition: vrlinkNetworkInterface.h:576
static DtVrlinkNetworkInterfaceCreatorFcn theCreator
Definition: vrlinkNetworkInterface.h:617
bool myBlockOnUnfinishedRemoteDiscovery
Definition: vrlinkNetworkInterface.h:588
int myVrfSessionId
Definition: vrlinkNetworkInterface.h:581
CreationRule creationRule
Definition: vrlinkNetworkInterface.h:570
makVrfEvents::DtEventManager * myEventManager
Definition: vrlinkNetworkInterface.h:593
Definition: fastForwardSettings.h:12
double myFrameDeltaTime
Definition: vrlinkNetworkInterface.h:600
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
double myNextFrameSimTime
Definition: vrlinkNetworkInterface.h:644
tbb::spin_rw_mutex myStateDataMutex
Definition: vrlinkNetworkInterface.h:554
Definition: vrfEntityIdentifierFactory.h:21
bool myIsDeadReckonAlgorithmOverridden
Definition: vrlinkNetworkInterface.h:585
std::atomic< bool > myShutdownNetworkThreadFlag
Definition: vrlinkNetworkInterface.h:632
DtExerciseConn * exerciseConnection()
Definition: vrlinkNetworkInterface.h:201
int myAppIdRangeMax
Definition: vrlinkNetworkInterface.h:591
class DtRemoteObjectManager:
Definition: remoteObjectManager.h:28
tbb::mutex myNetworkThreadMutex
Definition: vrlinkNetworkInterface.h:634
DtCommunicationManager * communicationManager()
Definition: vrlinkNetworkInterface.h:367
Given a component type, sets the publisher creator for that component. Set DtString::nullString() to ...
Definition: vrlinkNetworkInterface.h:170
class DtVrlinkNetworkInterface:
Definition: vrlinkNetworkInterface.h:55
bool myReflectedListRequestUpdatesOn
Definition: vrlinkNetworkInterface.h:642
Definition: objectType.h:27
tbb::mutex ConditionMutex
Definition: vrlinkNetworkInterface.h:625
int myDeadReckonOverrideAlgorithm
Definition: vrlinkNetworkInterface.h:586
bool publishZeroVelocityWhenPaused() const
Definition: vrlinkNetworkInterface.h:240
StateDataByEntityId myStateDataByEntityId
Definition: vrlinkNetworkInterface.h:565
ComponentsPublishing myComponentsPublishing
Definition: vrlinkNetworkInterface.h:551
virtual bool typeIsPublishable(const DtEntityType &) const
Returns true if the entity type is publishable by this connection.
Definition: vrlinkNetworkInterface.h:358
virtual void setSelfReflecting(bool)
No-op. Once the connection is created the self reflecting cannot be changed.
Definition: vrlinkNetworkInterface.h:213
tbb::interface5::unique_lock< ConditionMutex > ConditionLock
Definition: vrlinkNetworkInterface.h:626
DtReflectedEnvironmentProcessList * myReflectedEnvironmentalList
Definition: vrlinkNetworkInterface.h:657
double myMaxDrainInputTime
Definition: vrlinkNetworkInterface.h:594
unsigned int myBulkCreateTickCounter
Definition: vrlinkNetworkInterface.h:668
std::map< DtString, DtStateData * > StateDataByEntityId
Definition: vrlinkNetworkInterface.h:564
DtNetworkManagerInterface is the base class which all network interfaces must be derived from...
Definition: networkManagerInterface.h:40
Definition: coordSystem.h:54
DtRemoteObjectManager * myRemoteObjectManager
Definition: vrlinkNetworkInterface.h:556
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:336
std::map< makVrf::SimStateID, DtSimObjectNetInterface * > Publishing
Definition: vrlinkNetworkInterface.h:546
int myDefaultObjectTimeout
Definition: vrlinkNetworkInterface.h:650
ComponentTypeUserData(DtStateComponent::StateComponentType t)
Definition: vrlinkNetworkInterface.h:177
bool myEnabled
Definition: vrlinkNetworkInterface.h:541
ConditionMutex myStartNetworkConditionMutex
Definition: vrlinkNetworkInterface.h:631
DtVrlinkNetworkInterface *(* DtVrlinkNetworkInterfaceCreatorFcn)(DtExerciseConn *, bool)
Definition: vrlinkNetworkInterface.h:49
The DtCommunicationManager class is a convenience class that will create both the DtNetworkInterfaceM...
Definition: communicationManager.h:51
bool myRunFullyThreaded
Definition: vrlinkNetworkInterface.h:542
std::map< DtString, DtStateData * > StateDataByGlobalId
Definition: vrlinkNetworkInterface.h:559
Class Description: DtSimObjectNetInterface.
Definition: simObjectNetInterface.h:48
double myCurrentFrameSimTime
Definition: vrlinkNetworkInterface.h:645
DtPublisherContainer< DtSimObjectNetInterface > PublisherContainer
Definition: vrlinkNetworkInterface.h:536
bool myBulkCreateInProgress
Defaults to 4.
Definition: vrlinkNetworkInterface.h:667
bool myPublishZeroVelocityWhenPaused
Definition: vrlinkNetworkInterface.h:584
DtOrderedEntityTypeList< DefaultNetworkInterfaceEntry * > DefaultNetworkInterfaceEntries
Definition: vrlinkNetworkInterface.h:653
Definition: vrlinkEventTranslatorManager.h:28
#define DT_DLL_vrlinkNetworkInterface
This file is used to determine how to build.
Definition: vrlinkNetworkInterfaceDefines.h:24
unsigned int mySimMgmtPduProcessLevel
Definition: vrlinkNetworkInterface.h:620
ComponentTypeUserData(const ComponentTypeUserData &orig)
Definition: vrlinkNetworkInterface.h:178
bool sendMessagesInNetworkProcess() const
Definition: vrlinkNetworkInterface.h:423
double myMinDrainInputTime
Definition: vrlinkNetworkInterface.h:599
DtVrfCallbackQueue * myNetworkCallbackQueue
Definition: vrlinkNetworkInterface.h:633
std::vector< ComponentCreationRule > ComponentCreationRules
Definition: vrlinkNetworkInterface.h:575
int myNumNetworkWorkerThreads
Definition: vrlinkNetworkInterface.h:665
double myNetworkFrameTime
Definition: vrlinkNetworkInterface.h:660
tbb::queuing_rw_mutex myPublishingMutex
Definition: vrlinkNetworkInterface.h:553
Condition myStartNetworkCondition
Definition: vrlinkNetworkInterface.h:630
DtCommunicationManager * myCommunicationManager
Definition: vrlinkNetworkInterface.h:622
bool blockOnUnfinishedRemoteDiscovery() const
Definition: vrlinkNetworkInterface.h:80
Definition: vrlinkNetworkInterface.h:175
tbb::spin_mutex myQueuedMessagesToSendMutex
Definition: vrlinkNetworkInterface.h:663
DtVrfParameterDb * parameterDatabase() const
Definition: vrlinkNetworkInterface.h:216
DtFastForwardSettings myFastForwardSettings
Definition: vrlinkNetworkInterface.h:615
Definition: asyncJobServer.h:39
DtRemoteObjectManager * remoteObjectManager()
Definition: vrlinkNetworkInterface.h:372
bool myMetocPublishingEnabled
Definition: vrlinkNetworkInterface.h:639
Publishing myPublishing
Definition: vrlinkNetworkInterface.h:547
Definition: vrlinkNetworkInterface.h:568
Definition: stateComponent.h:51
voidpf stream
Definition: ioapi.h:39
std::map< makVrf::SimStateID, StateComponentsPublishing > ComponentsPublishing
Definition: vrlinkNetworkInterface.h:550
bool disableRemoteDiscovery() const
Definition: vrlinkNetworkInterface.h:154
PublisherContainer myTickableInterfaces
Definition: vrlinkNetworkInterface.h:544
bool myDisableRemoteDiscovery
Definition: vrlinkNetworkInterface.h:636
virtual double networkFrameTime() const
Time spent in the network frame.
Definition: vrlinkNetworkInterface.h:417
bool mySendMessagesInNetworkProcess
Definition: vrlinkNetworkInterface.h:662
std::set< DtStateData * > myPendingEntityIds
Definition: vrlinkNetworkInterface.h:566
DtVrlinkEventTranslatorManager * myVrlinkEventTranslatorManager
Definition: vrlinkNetworkInterface.h:618
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
const char int mode
Definition: ioapi.h:38
tbb::spin_mutex myEventIdMutex
Definition: vrlinkNetworkInterface.h:590
bool myTickPublishersInNetworkThread
Definition: vrlinkNetworkInterface.h:638
int defaultObjectTimeout() const
Definition: vrlinkNetworkInterface.h:161
Definition: hlaExerciseClock.h:35
DefaultNetworkInterfaceEntries myDefaultNetworkInterfaceEntries
Definition: vrlinkNetworkInterface.h:654
std::atomic< bool > myStartNetworkThread
Definition: vrlinkNetworkInterface.h:647
StateDataByGlobalId myStateDataByGlobalId
Definition: vrlinkNetworkInterface.h:560
DtString networkInterface
Definition: vrlinkNetworkInterface.h:571
const Coordinate_System * coordinateSystem() const
Definition: vrlinkNetworkInterface.h:196
double myLastSetSimTime
Definition: vrlinkNetworkInterface.h:646
makVrfEvents::DtEventManager * eventManager()
Definition: vrlinkNetworkInterface.h:362
DtVrfParameterDb * myParameterDatabase
Definition: vrlinkNetworkInterface.h:580
bool myControlsDrainInput
Definition: vrlinkNetworkInterface.h:637
PublisherContainer myNeedsPublishersCreated
Definition: vrlinkNetworkInterface.h:543
std::set< DtStateData * > myPendingGlobalIds
Definition: vrlinkNetworkInterface.h:561
virtual std::string protocol() const override
Descriptive text of the network protocol.
Definition: vrlinkNetworkInterface.h:111
Contains the DtStateComponent class declaration.
std::set< DtStateComponent * > myCreateNetInterfaceFor
Definition: vrlinkNetworkInterface.h:619
virtual ComponentRuleUserData * clone() const
Definition: vrlinkNetworkInterface.h:172
DtReflectedAggregateList * myReflectedAggregateList
Definition: vrlinkNetworkInterface.h:656
DtStateDataManager * myStateDataManager
Definition: vrlinkNetworkInterface.h:540
Definition: vrlinkNetworkInterface.h:58
Definition: vrlinkEventTranslator.h:28
std::shared_ptr< ComponentRuleUserData > userData
Definition: vrlinkNetworkInterface.h:572
virtual const char * type() const
Type to uniquely identify this manager.
Definition: vrlinkNetworkInterface.h:85
tbb::interface5::condition_variable Condition
Definition: vrlinkNetworkInterface.h:624
virtual bool hasSimulationTime() const
Return true if this network interface also deals with simulation time.
Definition: vrlinkNetworkInterface.h:466
boost::function< bool(const DtStateComponent *, const DtStateData *, std::shared_ptr< ComponentRuleUserData >)> CreationRule
Definition: vrlinkNetworkInterface.h:184
std::vector< DtSimObjectNetInterface * > myInterfacesToDelete
Definition: vrlinkNetworkInterface.h:659
Description: The Exercise Clock keeps track of current simulated time. When 'ticked', it advances simulation time based on elapsed real time since the last time it was ticked and a time-multiplier that allows the exercise clock to run faster or slower than real-time. The exercise clock also supports a pause/resume capability.
Definition: exerciseClock.h:26
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:71