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>
38 namespace makVrfVrlinkExtToolkit
40 class DtReflectedExtendedAttributesObjectList;
46 class DtRemoteObjectManager;
47 class DtVrfEntityIdentifierFactory;
48 class DtVrlinkNetworkInterface;
49 class DtVrlinkEventTranslatorManager;
50 class DtVrlinkEventTranslator;
51 class DtStateDataManager;
53 class DtHlaExerciseClock;
81 virtual void beginFrame(
double)
override;
82 virtual bool preAdvanceFrame()
override;
83 virtual void advanceFrame(
double* networkTime =
nullptr)
override;
86 virtual void setBlockOnUnfinishedRemoteDiscovery(
bool);
89 return myBlockOnUnfinishedRemoteDiscovery;
92 virtual const char*
type()
const {
return Type(); };
93 static const char*
Type() {
return "vrlink-network-interface"; };
96 virtual bool printDataToStream(
const DtUUID&, DtOutputStream&
stream)
const;
99 virtual void setInterest(
const DtVector& geocentricCenter,
double radius);
106 virtual void setExerciseStartTime(
double);
107 virtual void setSimTime(
double);
108 virtual void setTimeMultiplier(
double);
111 virtual void resetSimulation();
115 virtual void setControlsDrainInput(
bool);
116 bool controlsDrainInput()
const;
121 return std::string(
"DIS");
122 #elif DDtHLA_1516_EVOLVED == 1
123 return std::string(
"HLA1516e");
124 #elif DDtHLA_1516 == 1
125 return std::string(
"HLA1516");
126 #else //This is HLA13
127 return std::string(
"HLA13");
132 virtual void setRunInTimeManagementMode(
bool yesOrNo);
135 virtual bool runInTimeManagementMode()
const;
140 static void startTimeManagement(
void* usr);
141 static void stopTimeManagement(
void* usr);
145 virtual void processStartTimeManagement();
146 virtual void processStopTimeManagement();
149 virtual void setReflectedListRequestUpdates(
bool yesOrNo);
153 virtual void setMetocPublishingEnabled(
bool);
156 return myMetocPublishingEnabled;
160 virtual void setDisableRemoteDiscovery(
bool);
163 return myDisableRemoteDiscovery;
167 virtual void setDefaultObjectTimeout(
int);
170 return myDefaultObjectTimeout;
173 struct ComponentRuleUserData
191 typedef boost::function<bool (const DtStateComponent*, const DtStateData*, std::shared_ptr<ComponentRuleUserData>)>
CreationRule;
193 const DtString& testBeforeInterface =
"");
196 virtual bool createInterfaceIfComponentIs(
const DtStateComponent* c,
const DtStateData* d, std::shared_ptr<ComponentRuleUserData>);
200 virtual void setRunFullyThreaded(
bool);
201 virtual bool runFullyThreaded()
const;
203 virtual void setEnabled(
bool);
208 return myCoordinateSystem;
213 return myExerciseConnection;
216 virtual void removeAndDeleteAll();
217 virtual bool wantsToSelfReflect(
unsigned int)
const;
220 virtual bool selfReflecting()
const;
228 return myParameterDatabase;
231 virtual unsigned int maxNameLengthForType(
const DtObjectType&)
const;
234 virtual void setVrfSessionId(
int);
237 return myVrfSessionId;
241 virtual void setVrfMessageVersionSupported(
int);
244 return myVrfMessageVersionSupported;
249 virtual void setPublishZeroVelocityWhenPaused(
bool);
252 return myPublishZeroVelocityWhenPaused;
262 return mySimMgmtPduProcessLevel;
265 virtual void setSimMgmtPduProcessLevel(
unsigned int level);
270 virtual void setDeadReckoningAlgorithmToStaticOnPause(
bool);
273 return mySetDeadReckoningAlgorithmToStaticOnPause;
277 virtual void overrideDeadReckoningAlgorithm(
int drAlg);
281 virtual bool isDeadReckonAlgorithmOverridden(
int& drAlg)
const;
285 virtual void removeDeadReckoningAlgorithmOverride();
287 virtual DtEntityIdentifier nextEntityIdentifier(
const DtStateData* = 0,
const DtEntityIdentifier& = DtEntityIdentifier());
290 virtual DtEntityIdentifier objectIdentifierFor(
const DtUUID&)
const;
293 virtual DtEntityIdentifier globalObjectIdentifierFor(
const DtUUID&)
const;
296 virtual DtGlobalObjectDesignator globalObjectIdentifierFor(
const DtUUID&)
const;
300 virtual DtUUID uuidForObjectIdentifier(
const DtEntityIdentifier&)
const;
303 virtual DtUUID uuidForObjectIdentifier(
const DtGlobalObjectDesignator&)
const;
306 virtual void setSiteAppId(
int,
int);
310 virtual DtString nextEventId(
const DtString& entId = DtString::nullString())
override;
312 virtual int setAppIdRangeMax(
int);
317 virtual void startScenarioLoad(
bool);
320 virtual void endScenarioLoad(
bool);
326 virtual double determineSimTime(
double& dt);
328 virtual double simTime()
const;
330 virtual void setMaxDrainInputTime(
double maxTime);
331 virtual double maxDrainInputTime()
const;
333 virtual void setFrameRateMode(
const DtString&
mode,
double deltaTime,
bool manageTime =
false);
334 virtual void rewindScenario();
337 virtual void setMinDrainInputTime(
double minTime);
338 virtual double minDrainInputTime()
const;
340 virtual void setFrameDeltaTime(
double);
341 virtual double frameDeltaTime()
const;
343 virtual void beginBulkCreate()
override;
344 virtual void endBulkCreate()
override;
346 virtual void setMaxDrainInputReads(
int maxReads);
347 virtual int maxDrainInputReads()
const;
354 virtual void removeEventTranslator(
int eventType);
362 virtual void pause();
374 return myEventManager;
379 return myCommunicationManager;
384 return myRemoteObjectManager;
390 virtual void setNumCallbackThreads(
unsigned);
393 virtual void setNumRemoteCallbackThreads(
unsigned);
395 virtual void addDefaultNetworkInterface(
const DtEntityType&,
const DtString& local,
const DtString& remote);
396 virtual void removeDefaultNetworkInterface(
const DtEntityType&);
403 virtual void setUseNetworkThread(
bool);
404 virtual bool usingNetworkThread()
const;
407 virtual void setDisableParallelPublisherTick(
bool);
408 virtual bool disableParallelPublisherTick()
const;
412 virtual void setTickPublishersDuringEntityTick(
bool);
413 virtual bool tickPublishersDuringEntityTick()
const;
417 virtual void reserve(
unsigned numToReserve);
420 virtual bool willRediscoverObjects()
const;
433 return myNetworkFrameTime;
436 virtual void setSendMessagesInNetworkProcess(
bool);
439 return mySendMessagesInNetworkProcess;
442 #if DtHLA_1516_EVOLVED
443 virtual void setAutoReserve(
int);
445 int autoReserve()
const;
447 virtual bool isNameReserved(
const DtString& name)
const;
448 virtual bool isNameReservationPending(
const DtString& name)
const;
454 virtual DtString nextGlobalObjectId(
const DtString& defaultId = DtString::nullString());
457 virtual void sendQueuedMessages();
466 virtual void reserveGlobalObjectIds(
unsigned numToReserve);
497 virtual void slot_prepareForHandoff(
DtStateData*,
bool becomingLocal);
500 virtual void stateDataAboutToBeRemoved(
const DtStateData*);
502 virtual void printReflectedObjectCounts()
const;
506 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
509 void createExerciseClock(
int clockMode = 0);
511 virtual void drainInput();
515 virtual void cleanupNetworkThread();
517 virtual void runNetwork();
518 virtual void resolvePendingIds();
521 virtual void createAndInitRemoteObjectManager();
524 virtual bool rediscoverObjects();
529 virtual void stateDataManagerDeleted();
531 #if DtHLA_1516_EVOLVED
532 virtual void reservedNamesSuceeded(
const std::set<std::wstring>& theNames);
536 virtual void reservedNamesFailed(
const std::set<std::wstring>& theNames);
538 static void nameSetReservationSucceededCb(
const std::set<std::wstring>& nameSet,
540 static void nameSetReservationFailedCb(
const std::set<std::wstring>& nameSet,
545 virtual void setExecutionState(DtVRLExecutionStatus status);
557 typedef std::map<makVrf::SimStateID, DtSimObjectNetInterface*>
Publishing;
613 #if DtHLA_1516_EVOLVED
614 std::set<DtGlobalObjectDesignator> myReservedGlobalIds;
615 std::set<DtGlobalObjectDesignator> myPendingReservedGlobalIds;
616 tbb::queuing_mutex myGlobalIdReserveMutex;
621 int myMaxDrainInputReads;
UUID is a unique ID wrapper class.
Definition: rwUUID.h:229
Instances of DtVrfObjectParameters are the readable/writeable objects that contain the information ne...
Definition: vrfObjectParameters.h:63
DtExerciseConn * myExerciseConnection
Definition: vrlinkNetworkInterface.h:550
DtFilename myFastForwardSettingsFile
Fast forward settings file.
Definition: vrlinkNetworkInterface.h:625
DtVrfEntityIdentifierFactory * myEntityIdentifierFactory
Definition: vrlinkNetworkInterface.h:603
bool setDeadReckoningAlgorithmToStaticOnPause() const
Definition: vrlinkNetworkInterface.h:271
bool metocPublishingEnabled() const
Definition: vrlinkNetworkInterface.h:154
std::auto_ptr< tbb::tbb_thread > myNetworkThread
Member variables used to interact with the remote objects reading.
Definition: vrlinkNetworkInterface.h:640
DtHlaExerciseClock * myExerciseClock
Definition: vrlinkNetworkInterface.h:608
virtual bool publishingOnLegionNetwork() const
Whether or not this interface publishes on the legion network.
Definition: vrlinkNetworkInterface.h:527
static const char * Type()
Definition: vrlinkNetworkInterface.h:93
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:38
virtual int vrfSessionId() const
Definition: vrlinkNetworkInterface.h:235
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:260
const Coordinate_System * myCoordinateSystem
Definition: vrlinkNetworkInterface.h:589
bool myRunInTimeManagementMode
Definition: vrlinkNetworkInterface.h:609
bool myScenarioLoaded
Definition: vrlinkNetworkInterface.h:684
DtString local
Definition: vrlinkNetworkInterface.h:68
Definition: scenario.h:52
DtDefaultSimulationModelSetValidatorManager mySimulationModelSetValidator
Definition: vrlinkNetworkInterface.h:627
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:484
DtString remote
Definition: vrlinkNetworkInterface.h:69
virtual int vrfMessageVersionSupported() const
Definition: vrlinkNetworkInterface.h:242
unsigned int StateComponentType
Definition: stateComponent.h:55
int myVrfMessageVersionSupported
Definition: vrlinkNetworkInterface.h:593
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:679
makVrfVrlinkExtToolkit::DtReflectedExtendedAttributesObjectList * myRemoteExtendedAttributesObjectsList
Definition: vrlinkNetworkInterface.h:671
DtReflectedEntityList * myReflectedEntityList
Definition: vrlinkNetworkInterface.h:666
bool mySetDeadReckoningAlgorithmToStaticOnPause
Definition: vrlinkNetworkInterface.h:598
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:560
ComponentCreationRules myComponentCreationRules
Definition: vrlinkNetworkInterface.h:587
static DtVrlinkNetworkInterfaceCreatorFcn theCreator
Definition: vrlinkNetworkInterface.h:628
bool myBlockOnUnfinishedRemoteDiscovery
Definition: vrlinkNetworkInterface.h:599
int myVrfSessionId
Definition: vrlinkNetworkInterface.h:592
CreationRule creationRule
Definition: vrlinkNetworkInterface.h:581
makVrfEvents::DtEventManager * myEventManager
Definition: vrlinkNetworkInterface.h:604
Definition: fastForwardSettings.h:12
double myFrameDeltaTime
Definition: vrlinkNetworkInterface.h:611
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
double myNextFrameSimTime
Definition: vrlinkNetworkInterface.h:655
tbb::spin_rw_mutex myStateDataMutex
Definition: vrlinkNetworkInterface.h:565
Definition: vrfEntityIdentifierFactory.h:21
bool myIsDeadReckonAlgorithmOverridden
Definition: vrlinkNetworkInterface.h:596
std::atomic< bool > myShutdownNetworkThreadFlag
Definition: vrlinkNetworkInterface.h:643
DtExerciseConn * exerciseConnection()
Definition: vrlinkNetworkInterface.h:211
int myAppIdRangeMax
Definition: vrlinkNetworkInterface.h:602
class DtRemoteObjectManager:
Definition: remoteObjectManager.h:28
tbb::mutex myNetworkThreadMutex
Definition: vrlinkNetworkInterface.h:645
DtCommunicationManager * communicationManager()
Definition: vrlinkNetworkInterface.h:377
Given a component type, sets the publisher creator for that component. Set DtString::nullString() to ...
Definition: vrlinkNetworkInterface.h:177
class DtVrlinkNetworkInterface:
Definition: vrlinkNetworkInterface.h:62
bool myReflectedListRequestUpdatesOn
Definition: vrlinkNetworkInterface.h:653
Definition: objectType.h:27
tbb::mutex ConditionMutex
Definition: vrlinkNetworkInterface.h:636
int myDeadReckonOverrideAlgorithm
Definition: vrlinkNetworkInterface.h:597
bool publishZeroVelocityWhenPaused() const
Definition: vrlinkNetworkInterface.h:250
StateDataByEntityId myStateDataByEntityId
Definition: vrlinkNetworkInterface.h:576
ComponentsPublishing myComponentsPublishing
Definition: vrlinkNetworkInterface.h:562
virtual bool typeIsPublishable(const DtEntityType &) const
Returns true if the entity type is publishable by this connection.
Definition: vrlinkNetworkInterface.h:368
virtual void setSelfReflecting(bool)
No-op. Once the connection is created the self reflecting cannot be changed.
Definition: vrlinkNetworkInterface.h:223
tbb::interface5::unique_lock< ConditionMutex > ConditionLock
Definition: vrlinkNetworkInterface.h:637
DtReflectedEnvironmentProcessList * myReflectedEnvironmentalList
Definition: vrlinkNetworkInterface.h:668
double myMaxDrainInputTime
Definition: vrlinkNetworkInterface.h:605
unsigned int myBulkCreateTickCounter
Definition: vrlinkNetworkInterface.h:683
std::map< DtString, DtStateData * > StateDataByEntityId
Definition: vrlinkNetworkInterface.h:575
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:567
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:557
int myDefaultObjectTimeout
Definition: vrlinkNetworkInterface.h:661
ComponentTypeUserData(DtStateComponent::StateComponentType t)
Definition: vrlinkNetworkInterface.h:184
bool myEnabled
Definition: vrlinkNetworkInterface.h:552
ConditionMutex myStartNetworkConditionMutex
Definition: vrlinkNetworkInterface.h:642
DtVrlinkNetworkInterface *(* DtVrlinkNetworkInterfaceCreatorFcn)(DtExerciseConn *, bool)
Definition: vrlinkNetworkInterface.h:56
The DtCommunicationManager class is a convenience class that will create both the DtNetworkInterfaceM...
Definition: communicationManager.h:50
bool myRunFullyThreaded
Definition: vrlinkNetworkInterface.h:553
std::map< DtString, DtStateData * > StateDataByGlobalId
Definition: vrlinkNetworkInterface.h:570
Class Description: DtSimObjectNetInterface.
Definition: simObjectNetInterface.h:48
double myCurrentFrameSimTime
Definition: vrlinkNetworkInterface.h:656
DtPublisherContainer< DtSimObjectNetInterface > PublisherContainer
Definition: vrlinkNetworkInterface.h:547
bool myBulkCreateInProgress
Defaults to 4.
Definition: vrlinkNetworkInterface.h:682
bool myPublishZeroVelocityWhenPaused
Definition: vrlinkNetworkInterface.h:595
DtOrderedEntityTypeList< DefaultNetworkInterfaceEntry * > DefaultNetworkInterfaceEntries
Definition: vrlinkNetworkInterface.h:664
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:631
ComponentTypeUserData(const ComponentTypeUserData &orig)
Definition: vrlinkNetworkInterface.h:185
bool sendMessagesInNetworkProcess() const
Definition: vrlinkNetworkInterface.h:437
double myMinDrainInputTime
Definition: vrlinkNetworkInterface.h:610
DtVrfCallbackQueue * myNetworkCallbackQueue
Definition: vrlinkNetworkInterface.h:644
std::vector< ComponentCreationRule > ComponentCreationRules
Definition: vrlinkNetworkInterface.h:586
int myNumNetworkWorkerThreads
Definition: vrlinkNetworkInterface.h:680
double myNetworkFrameTime
Definition: vrlinkNetworkInterface.h:675
tbb::queuing_rw_mutex myPublishingMutex
Definition: vrlinkNetworkInterface.h:564
Condition myStartNetworkCondition
Definition: vrlinkNetworkInterface.h:641
DtCommunicationManager * myCommunicationManager
Definition: vrlinkNetworkInterface.h:633
bool blockOnUnfinishedRemoteDiscovery() const
Definition: vrlinkNetworkInterface.h:87
Definition: vrlinkNetworkInterface.h:182
tbb::spin_mutex myQueuedMessagesToSendMutex
Definition: vrlinkNetworkInterface.h:678
DtVrfParameterDb * parameterDatabase() const
Definition: vrlinkNetworkInterface.h:226
DtFastForwardSettings myFastForwardSettings
Definition: vrlinkNetworkInterface.h:626
Definition: asyncJobServer.h:39
DtRemoteObjectManager * remoteObjectManager()
Definition: vrlinkNetworkInterface.h:382
bool myMetocPublishingEnabled
Definition: vrlinkNetworkInterface.h:650
Publishing myPublishing
Definition: vrlinkNetworkInterface.h:558
Definition: vrlinkNetworkInterface.h:579
Definition: stateComponent.h:51
voidpf stream
Definition: ioapi.h:39
std::map< makVrf::SimStateID, StateComponentsPublishing > ComponentsPublishing
Definition: vrlinkNetworkInterface.h:561
bool disableRemoteDiscovery() const
Definition: vrlinkNetworkInterface.h:161
PublisherContainer myTickableInterfaces
Definition: vrlinkNetworkInterface.h:555
bool myDisableRemoteDiscovery
Definition: vrlinkNetworkInterface.h:647
virtual double networkFrameTime() const
Time spent in the network frame.
Definition: vrlinkNetworkInterface.h:431
bool mySendMessagesInNetworkProcess
Definition: vrlinkNetworkInterface.h:677
std::set< DtStateData * > myPendingEntityIds
Definition: vrlinkNetworkInterface.h:577
DtVrlinkEventTranslatorManager * myVrlinkEventTranslatorManager
Definition: vrlinkNetworkInterface.h:629
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:601
bool myTickPublishersInNetworkThread
Definition: vrlinkNetworkInterface.h:649
int defaultObjectTimeout() const
Definition: vrlinkNetworkInterface.h:168
Definition: hlaExerciseClock.h:35
DefaultNetworkInterfaceEntries myDefaultNetworkInterfaceEntries
Definition: vrlinkNetworkInterface.h:665
std::atomic< bool > myStartNetworkThread
Definition: vrlinkNetworkInterface.h:658
StateDataByGlobalId myStateDataByGlobalId
Definition: vrlinkNetworkInterface.h:571
DtString networkInterface
Definition: vrlinkNetworkInterface.h:582
const Coordinate_System * coordinateSystem() const
Definition: vrlinkNetworkInterface.h:206
double myLastSetSimTime
Definition: vrlinkNetworkInterface.h:657
makVrfEvents::DtEventManager * eventManager()
Definition: vrlinkNetworkInterface.h:372
DtVrfParameterDb * myParameterDatabase
Definition: vrlinkNetworkInterface.h:591
bool myControlsDrainInput
Definition: vrlinkNetworkInterface.h:648
PublisherContainer myNeedsPublishersCreated
Definition: vrlinkNetworkInterface.h:554
std::set< DtStateData * > myPendingGlobalIds
Definition: vrlinkNetworkInterface.h:572
virtual std::string protocol() const override
Descriptive text of the network protocol.
Definition: vrlinkNetworkInterface.h:118
Contains the DtStateComponent class declaration.
std::set< DtStateComponent * > myCreateNetInterfaceFor
Definition: vrlinkNetworkInterface.h:630
virtual ComponentRuleUserData * clone() const
Definition: vrlinkNetworkInterface.h:179
DtReflectedAggregateList * myReflectedAggregateList
Definition: vrlinkNetworkInterface.h:667
DtStateDataManager * myStateDataManager
Definition: vrlinkNetworkInterface.h:551
Definition: vrlinkNetworkInterface.h:65
Definition: vrlinkEventTranslator.h:28
std::shared_ptr< ComponentRuleUserData > userData
Definition: vrlinkNetworkInterface.h:583
virtual const char * type() const
Type to uniquely identify this manager.
Definition: vrlinkNetworkInterface.h:92
tbb::interface5::condition_variable Condition
Definition: vrlinkNetworkInterface.h:635
virtual bool hasSimulationTime() const
Return true if this network interface also deals with simulation time.
Definition: vrlinkNetworkInterface.h:480
boost::function< bool(const DtStateComponent *, const DtStateData *, std::shared_ptr< ComponentRuleUserData >)> CreationRule
Definition: vrlinkNetworkInterface.h:191
std::vector< DtSimObjectNetInterface * > myInterfacesToDelete
Definition: vrlinkNetworkInterface.h:674
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