VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
legionNetworkInterface.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
8 //vrf includes
10 
12 
13 //vrv includes
14 #include <vrvUtil/signalslib.h>
15 
16 //vrl includes
17 #include <matrix/vlVector.h>
18 
19 #include <vlpi/simulationAddress.h>
20 
21 //makLegion includes
22 #include <legionDataStore/dataTypes.h>
23 
24 #include <legionNet/boundary.h>
25 
26 //third party includes
27 #include <tbb/spin_rw_mutex.h>
28 
29 //std lib includes
30 #include <set>
31 #include <unordered_map>
32 
33 
35 class DtUUID;
36 
37 namespace Legion
38 {
39  class Connection;
40  class EventManager;
41  class ControlManager;
42  class Configuration;
43  class Vector3d;
44 }
45 
46 namespace makVrfEvents
47 {
48  class DtTransferRequestEvent;
49  class DtTransferResponseEvent;
50  class DtEvent;
51 }
52 
53 namespace makVrf
54 {
55  class DtStateDataManager;
56  class DtLegionEventTranslatorManager;
57  class DtRemoteObjectManager;
58  class DtLegionNetworkInterface;
59  class DtLegionOwnershipTransferManager;
60 
61  typedef DtLegionNetworkInterface* (*DtLegionNetworkInterfaceCreatorFcn)(DtStateDataManager*, Legion::Connection*, Legion::Configuration*);
62 
63  DT_DLL_legionNetworkInterface DtVector legionVectorToDtVector(const Legion::Vector3d& lvec);
64 
70  {
71  public:
72 
74  DtLegionNetworkInterface(DtStateDataManager*, Legion::Connection* useConnection = 0, Legion::Configuration* config = 0);
75 
76  virtual ~DtLegionNetworkInterface();
77 
78  virtual void beginFrame(double) override;
79  virtual bool preAdvanceFrame() override;
80  virtual void advanceFrame(double* networkTime = nullptr) override;
81 
82  virtual const char* type() const { return Type(); };
83  static const char* Type() { return "legion-network-interface"; };
84 
85  virtual void setInterest(const DtVector& geocentricCenter, const DtVector& ll, const DtVector& ur);
86  virtual void setInterest(const DtVector& geocentricCenter, double radius);
87  virtual void setInterest(const Legion::Boundary&, bool andIntent = true);
88  virtual void setIntent(const Legion::Boundary&);
89 
91  virtual DtU32 scenarioCapabilities() const override;
92  virtual void setScenarioCapabilities(DtU32) override;
93 
94  virtual bool selfReflecting() const;
95  virtual void setSelfReflecting(bool);
96 
97  virtual bool supportsOwnershipTransfer() const override
98  {
99  return true;
100  }
101 
102  virtual bool wantsToSelfReflect(unsigned int) const;
103 
105  virtual bool printDataToStream(const DtUUID&, DtOutputStream&) const;
106 
108  virtual const DtStateData* stateDataForEntityId(const DtEntityIdentifier&) const;
109 
111  virtual const DtStateData* stateDataForLegionId(Legion::GlobalIdentifier) const;
112 
114  virtual void setRunFullyThreaded(bool) {};
115  virtual void setEnabled(bool) {};
116  virtual void setCoordinateSystem(const Coordinate_System*);
117  virtual void setExerciseStartTime(double);
118 
120  virtual void reserveEntityId(const DtEntityIdentifier&) {};
121 
122  virtual bool validateScenario(const DtScenario&, DtString&) const { return true; };
123 
124  virtual void setSiteAppId(int, int);
125 
127  virtual void removeAndDeleteAll(const std::set<DtUUID>& except = std::set<DtUUID>());
128 
129  virtual void setSimTime(double);
130  virtual void setTimeMultiplier(double);
131 
132  virtual void setNeedsInterestRegionSet(bool val);
133  virtual bool needsInterestRegionSet() const;
134 
137  virtual DtString nextEventId(const DtString& = DtString::nullString()) override;
138 
139  virtual std::string protocol() const override
140  {
141  return std::string("Legion");
142  }
143 
144  virtual void setProcessSelfReflect(bool b);
145  bool processSelfReflect() const
146  {
147  return myProcessSelfReflect;
148  }
149 
150  virtual bool waitingToAddObjects() const override
151  {
152  return false;
153  }
154 
155  virtual DtRemoteObjectManager* createRemoteObjectManager();
156 
157  static void setLegionNetworkInterfaceCreatorFcn(DtLegionNetworkInterfaceCreatorFcn);
158  static DtLegionNetworkInterface* createLegionNetworkInterface(DtStateDataManager*, Legion::Connection* connection = 0,
159  Legion::Configuration* config = 0);
161  virtual void setEventManager(makVrfEvents::DtEventManager*);
163  {
164  return myEventManager;
165  }
166 
168  {
169  return myStateDataManager;
170  }
171 
172  const DtSimulationAddress& simulationAddress() const
173  {
174  return mySimulationAddress;
175  }
176 
177  bool destructing() const
178  {
179  return myDestructing;
180  }
181 
183  virtual bool typeIsPublishable(const DtEntityType&) const;
184 
185  virtual int clientId() const;
186  virtual UInt64 uuidToGlobalId(const DtUUID&) const;
187  virtual DtUUID globalIdToUUID(UInt64) const;
188 
189  virtual Legion::EventManager* legionEventManager();
190  virtual Legion::ControlManager* legionControlManager();
191 
193  virtual UInt64 toGlobalIdentifier(const DtEntityIdentifier&) const;
194  virtual DtEntityIdentifier toEntityIdentifier(UInt64) const;
195 
196  virtual const makVrf::DtStateData* stateDataForGlobalId(const DtString&) const;
197 
199  virtual void setDisableRemoteDiscovery(bool);
201  {
202  return myDisableRemoteDiscovery;
203  }
204 
206  virtual void setProcessRemoteObjectsInParallel(bool);
208  {
209  return myProcessRemoteObjectsInParallel;
210  }
211 
215  virtual void setNumCallbackThreads(unsigned);
216 
219  {
220  return myOwnershipTransferManager;
221  }
222 
225  {
226  return myCommunicationManager;
227  }
228 
229  Legion::Connection* connection()
230  {
231  return mySTEConnection;
232  }
233 
235  {
236  return myLegionEventTranslatorManager;
237  }
238 
241  virtual bool needsUnpublishedDatabase() const
242  {
243  return true;
244  }
245 
246  protected:
249  virtual bool stateDataAdded(DtStateData*);
250 
252  virtual void stateDataAboutToBeRemoved(const DtStateData*);
253 
254  virtual bool init(DtCommunicationManager*);
255 
257  virtual void reserve(unsigned numToReserve);
258 
260  virtual void printReflectedObjectCounts() const;
261 
263  virtual void requestUpdatesForRemoteNonVrfObjects() const;
264 
266  virtual void rediscoverObjects(const std::set<DtString>& ignore);
267 
269  virtual unsigned int maxNameLengthForType(const DtEntityType&) const { return 0xFFFFFFFF; };
270 
271  virtual void startScenarioLoad(bool);
272  virtual void endScenarioLoad(bool) {};
274  virtual void setVrfSessionId(int) {};
275  virtual void setVrfMessageVersionSupported(int) {};
276  virtual void resetSimulation();
277  virtual void rewindScenario();
278 
280  virtual void run();
281 
283  virtual void pause();
284 
285  virtual void setFrameRateMode(const DtString& mode, double deltaTime, bool manageTime = false);
286 
288  virtual AddEventResult addEvent(const makVrfEvents::DtEvent&, bool& selfReflected);
289 
291  virtual AddEventResult sendEvent(const makVrfEvents::DtEvent&);
292 
294  virtual bool hasSimulationTime() const { return false; };
295 
297  virtual bool rediscoverObjects();
298 
300  virtual bool publishingOnLegionNetwork() const { return true; };
301 
302  virtual bool hasNetworkRepresentation(const DtUUID&) const { return true; };
303 
304  protected:
305  DtStateDataManager* myStateDataManager;
306  Legion::Connection* mySTEConnection;
307  std::set<makVrf::SimStateID> myPublishing;
308  mutable tbb::spin_rw_mutex myPublishMutex;
309 
310  typedef std::unordered_map<UInt64, const DtStateData*> StateDataByEntityId;
313  DtSimulationAddress mySimulationAddress;
314  int myAppId;
320 
321  Legion::EventManager* myLegionEventManager;
322  Legion::ControlManager* myLegionControlManager;
323 
325 
328 
332  unsigned int myNumCallbackThreads;
333 
337  };
338 }
UUID is a unique ID wrapper class.
Definition: uuid.h:59
bool myNeedsInterestSet
Definition: legionNetworkInterface.h:312
tbb::spin_rw_mutex myPublishMutex
Definition: legionNetworkInterface.h:308
unsigned int myNumCallbackThreads
Definition: legionNetworkInterface.h:332
Legion::ControlManager * myLegionControlManager
Definition: legionNetworkInterface.h:322
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:41
virtual bool hasSimulationTime() const
This manager does not deal with sim time.
Definition: legionNetworkInterface.h:294
DtLegionOwnershipTransferManager * ownershipTransferManager()
The transfer manager. Valid after init. Get this to connect for pre transfer from message...
Definition: legionNetworkInterface.h:218
Definition: scenario.h:52
DtCommunicationManager * myCommunicationManager
Definition: legionNetworkInterface.h:327
const Coordinate_System * myCoordinateSystem
Definition: legionNetworkInterface.h:317
virtual std::string protocol() const override
Descriptive text of the network protocol.
Definition: legionNetworkInterface.h:139
DtLegionOwnershipTransferManager * myOwnershipTransferManager
Definition: legionNetworkInterface.h:334
bool disableRemoteDiscovery() const
Definition: legionNetworkInterface.h:200
virtual void reserveEntityId(const DtEntityIdentifier &)
Reserves the entity id such that if a new object without an entity id comes in, it will not use any o...
Definition: legionNetworkInterface.h:120
#define DT_DLL_legionNetworkInterface
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: legionNetworkInterfaceDefines.h:26
virtual void setVrfSessionId(int)
If used, the session id this VRF session is in.
Definition: legionNetworkInterface.h:274
Definition: legionEventTranslatorManager.h:28
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
virtual void setEnabled(bool)
Whether or not the communication manager is enabled for receiving information.
Definition: legionNetworkInterface.h:115
bool processSelfReflect() const
Definition: legionNetworkInterface.h:145
bool processRemoteObjectsInParallel() const
Definition: legionNetworkInterface.h:207
Legion::Connection * mySTEConnection
Definition: legionNetworkInterface.h:306
DtCommunicationManager * communicationManager()
The communication manager.
Definition: legionNetworkInterface.h:224
unsigned long long UInt64
Definition: stateDataTypes.h:17
virtual bool publishingOnLegionNetwork() const
Whether or not this interface publishes on the legion network.
Definition: legionNetworkInterface.h:300
virtual bool waitingToAddObjects() const override
Returns true if this manager is waiting to add network objects.
Definition: legionNetworkInterface.h:150
int myAppId
Definition: legionNetworkInterface.h:314
class DtRemoteObjectManager:
Definition: remoteObjectManager.h:28
std::unordered_map< UInt64, const DtStateData * > StateDataByEntityId
Definition: legionNetworkInterface.h:310
bool myProcessSelfReflect
Definition: legionNetworkInterface.h:324
virtual bool validateScenario(const DtScenario &, DtString &) const
Return false if this scenario is not valid.
Definition: legionNetworkInterface.h:122
virtual bool needsUnpublishedDatabase() const
Return true if this connection uses the simulation database to publish on (as a legion connection doe...
Definition: legionNetworkInterface.h:241
class DtLegionOwnershipTransferManager:
Definition: legionOwnershipTransferManager.h:41
virtual void setRunFullyThreaded(bool)
Whether or not to run fully threaded. Legion is always threaded.
Definition: legionNetworkInterface.h:114
UInt64 GlobalIdentifier
Definition: legionOwnershipTransferManager.h:18
DtNetworkManagerInterface is the base class which all network interfaces must be derived from...
Definition: networkManagerInterface.h:43
Definition: coordSystem.h:54
StateDataByEntityId myStateDataByEntityId
Definition: legionNetworkInterface.h:311
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
Definition: event.h:13
static DtLegionNetworkInterfaceCreatorFcn theCreatorFunction
Definition: legionNetworkInterface.h:326
static const char * Type()
Definition: legionNetworkInterface.h:83
class DtLegionNetworkInterface:
Definition: legionNetworkInterface.h:69
The DtCommunicationManager class is a convenience class that will create both the DtNetworkInterfaceM...
Definition: communicationManager.h:54
virtual const char * type() const
Type to uniquely identify this manager.
Definition: legionNetworkInterface.h:82
virtual void endScenarioLoad(bool)
Called when ending scenario load. True is passed in to reuse identifiers if network dependent...
Definition: legionNetworkInterface.h:272
makVrfEvents::DtEventManager * eventManager()
Definition: legionNetworkInterface.h:162
virtual unsigned int maxNameLengthForType(const DtEntityType &) const
If the network interface supports it, the maximum name of a marking text.
Definition: legionNetworkInterface.h:269
virtual void setVrfMessageVersionSupported(int)
If used the message version this VRF session uses.
Definition: legionNetworkInterface.h:275
bool destructing() const
Definition: legionNetworkInterface.h:177
bool myOwnsLegionConnection
Definition: legionNetworkInterface.h:319
DtU32 myScenarioCapabilities
Definition: legionNetworkInterface.h:336
bool myDisableRemoteDiscovery
Definition: legionNetworkInterface.h:330
bool myDestructing
Definition: legionNetworkInterface.h:335
DtSimulationAddress mySimulationAddress
Definition: legionNetworkInterface.h:313
DtRemoteObjectManager * myRemoteObjectManager
Definition: legionNetworkInterface.h:329
DtLegionNetworkInterface *(* DtLegionNetworkInterfaceCreatorFcn)(DtStateDataManager *, Legion::Connection *, Legion::Configuration *)
Definition: legionNetworkInterface.h:61
std::set< makVrf::SimStateID > myPublishing
Definition: legionNetworkInterface.h:307
DtLegionEventTranslatorManager * eventTranslatorManager()
Definition: legionNetworkInterface.h:234
DtLegionEventTranslatorManager * myLegionEventTranslatorManager
Definition: legionNetworkInterface.h:318
int myEntityId
Definition: legionNetworkInterface.h:315
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
bool myProcessRemoteObjectsInParallel
Definition: legionNetworkInterface.h:331
const char int mode
Definition: ioapi.h:38
makVrfEvents::DtEventManager * myEventManager
Definition: legionNetworkInterface.h:316
DT_DLL_legionNetworkInterface DtVector legionVectorToDtVector(const Legion::Vector3d &lvec)
Legion::EventManager * myLegionEventManager
Definition: legionNetworkInterface.h:321
DtStateDataManager * stateDataManager()
Definition: legionNetworkInterface.h:167
virtual void setParameterDatabase(DtVrfParameterDb *)
VRF specific for creating network interfaces from parameter data.
Definition: legionNetworkInterface.h:273
virtual bool supportsOwnershipTransfer() const override
Returns true if this interface supports ownership transfer.
Definition: legionNetworkInterface.h:97
const DtSimulationAddress & simulationAddress() const
Definition: legionNetworkInterface.h:172
Legion::Connection * connection()
Definition: legionNetworkInterface.h:229
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)