VR-Forces 5.0.2 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 
10 #include "legionNet/boundary.h"
11 #include <legionDataStore/dataTypes.h>
12 #include <vlpi/simulationAddress.h>
13 
14 #include <boost/unordered_map.hpp>
15 #include <matrix/vlVector.h>
16 #include <tbb/spin_rw_mutex.h>
17 #include <set>
18 
19 #include <boost/signals2.hpp>
20 
22 class DtUUID;
23 
24 namespace Legion
25 {
26  class Connection;
27  class EventManager;
28  class ControlManager;
29  class Configuration;
30 }
31 
32 namespace makVrfEvents
33 {
34  class DtTransferRequestEvent;
35  class DtTransferResponseEvent;
36  class DtEvent;
37 }
38 
39 namespace makVrf
40 {
41  class DtStateDataManager;
42  class DtLegionEventTranslatorManager;
43  class DtRemoteObjectManager;
44  class DtLegionNetworkInterface;
45  class DtLegionOwnershipTransferManager;
46 
47  typedef DtLegionNetworkInterface* (*DtLegionNetworkInterfaceCreatorFcn)(DtStateDataManager*, Legion::Connection*, Legion::Configuration*);
48 
54  {
55  public:
56 
58  DtLegionNetworkInterface(DtStateDataManager*, Legion::Connection* useConnection = 0, Legion::Configuration* config = 0);
59 
60  virtual ~DtLegionNetworkInterface();
61 
62  virtual void beginFrame(double) override;
63  virtual bool preAdvanceFrame() override;
64  virtual void advanceFrame(double* networkTime = nullptr) override;
65 
66  virtual const char* type() const { return Type(); };
67  static const char* Type() { return "legion-network-interface"; };
68 
69  virtual void setInterest(const DtVector& geocentricCenter, const DtVector& ll, const DtVector& ur);
70  virtual void setInterest(const DtVector& geocentricCenter, double radius);
71  virtual void setInterest(const Legion::Boundary&, bool andIntent = true);
72  virtual void setIntent(const Legion::Boundary&);
73 
74  virtual bool selfReflecting() const;
75  virtual void setSelfReflecting(bool);
76 
77  virtual bool wantsToSelfReflect(unsigned int) const;
78 
80  virtual bool printDataToStream(const DtUUID&, DtOutputStream&) const;
81 
83  virtual const DtStateData* stateDataForEntityId(const DtEntityIdentifier&) const;
84 
86  virtual const DtStateData* stateDataForLegionId(Legion::GlobalIdentifier) const;
87 
89  virtual void setRunFullyThreaded(bool) {};
90  virtual void setEnabled(bool) {};
91  virtual void setCoordinateSystem(const Coordinate_System*);
92  virtual void setExerciseStartTime(double);
93 
94  virtual bool validateScenario(const DtScenario&, DtString&) const { return true; };
95 
96  virtual void setSiteAppId(int, int);
97 
99  virtual void removeAndDeleteAll();
100 
101  virtual void setSimTime(double);
102  virtual void setTimeMultiplier(double);
103 
104  virtual void setNeedsInterestRegionSet(bool val);
105  virtual bool needsInterestRegionSet() const;
106 
109  virtual DtString nextEventId(const DtString& = DtString::nullString()) override;
110 
111  virtual std::string protocol() const override
112  {
113  return std::string("Legion");
114  }
115 
116  virtual void setProcessSelfReflect(bool b);
117  bool processSelfReflect() const
118  {
119  return myProcessSelfReflect;
120  }
121 
122  virtual DtRemoteObjectManager* createRemoteObjectManager();
123 
124  static void setLegionNetworkInterfaceCreatorFcn(DtLegionNetworkInterfaceCreatorFcn);
125  static DtLegionNetworkInterface* createLegionNetworkInterface(DtStateDataManager*, Legion::Connection* connection = 0,
126  Legion::Configuration* config = 0);
128  virtual void setEventManager(makVrfEvents::DtEventManager*);
130  {
131  return myEventManager;
132  }
133 
135  {
136  return myStateDataManager;
137  }
138 
139  const DtSimulationAddress& simulationAddress() const
140  {
141  return mySimulationAddress;
142  }
143 
144  bool destructing() const
145  {
146  return myDestructing;
147  }
148 
150  virtual bool typeIsPublishable(const DtEntityType&) const;
151 
152  virtual int clientId() const;
153  virtual UInt64 uuidToGlobalId(const DtUUID&) const;
154  virtual DtUUID globalIdToUUID(UInt64) const;
155 
156  virtual Legion::EventManager* legionEventManager();
157  virtual Legion::ControlManager* legionControlManager();
158 
160  virtual UInt64 toGlobalIdentifier(const DtEntityIdentifier&) const;
161  virtual DtEntityIdentifier toEntityIdentifier(UInt64) const;
162 
163  virtual const makVrf::DtStateData* stateDataForGlobalId(const DtString&) const;
164 
166  virtual void setDisableRemoteDiscovery(bool);
168  {
169  return myDisableRemoteDiscovery;
170  }
171 
173  virtual void setProcessRemoteObjectsInParallel(bool);
175  {
176  return myProcessRemoteObjectsInParallel;
177  }
178 
182  virtual void setNumCallbackThreads(unsigned);
183 
186  {
187  return myOwnershipTransferManager;
188  }
189 
192  {
193  return myCommunicationManager;
194  }
195 
196  Legion::Connection* connection()
197  {
198  return mySTEConnection;
199  }
200 
202  {
203  return myLegionEventTranslatorManager;
204  }
205 
208  virtual bool needsUnpublishedDatabase() const
209  {
210  return true;
211  }
212 
213  protected:
216  virtual bool stateDataAdded(DtStateData*);
217 
219  virtual void stateDataAboutToBeRemoved(const DtStateData*);
220 
221  virtual bool init(DtCommunicationManager*);
222 
224  virtual void reserve(unsigned numToReserve);
225 
227  virtual void printReflectedObjectCounts() const;
228 
230  virtual void requestUpdatesForRemoteNonVrfObjects() const;
231 
233  virtual void rediscoverObjects(const std::set<DtString>& ignore);
234 
236  virtual unsigned int maxNameLengthForType(const DtObjectType&) const { return 0xFFFFFFFF; };
237 
238  virtual void startScenarioLoad(bool);
239  virtual void endScenarioLoad(bool) {};
241  virtual void setVrfSessionId(int) {};
242  virtual void setVrfMessageVersionSupported(int) {};
243  virtual void resetSimulation();
244  virtual void rewindScenario();
245 
247  virtual void run();
248 
250  virtual void pause();
251 
252  virtual void setFrameRateMode(const DtString& mode, double deltaTime, bool manageTime = false);
253 
255  virtual AddEventResult addEvent(const makVrfEvents::DtEvent&, bool& selfReflected);
256 
258  virtual AddEventResult sendEvent(const makVrfEvents::DtEvent&);
259 
261  virtual bool hasSimulationTime() const { return false; };
262 
264  virtual bool rediscoverObjects();
265 
267  virtual bool publishingOnLegionNetwork() const { return true; };
268 
269  protected:
270  DtStateDataManager* myStateDataManager;
271  Legion::Connection* mySTEConnection;
272  std::set<makVrf::SimStateID> myPublishing;
273  mutable tbb::spin_rw_mutex myPublishMutex;
274 
275  typedef boost::unordered_map<UInt64, const DtStateData*> StateDataByEntityId;
278  DtSimulationAddress mySimulationAddress;
279  int myAppId;
285 
286  Legion::EventManager* myLegionEventManager;
287  Legion::ControlManager* myLegionControlManager;
288 
290 
293 
297  unsigned int myNumCallbackThreads;
298 
301  };
302 }
UUID is a unique ID wrapper class.
Definition: rwUUID.h:229
bool myNeedsInterestSet
Definition: legionNetworkInterface.h:277
tbb::spin_rw_mutex myPublishMutex
Definition: legionNetworkInterface.h:273
unsigned int myNumCallbackThreads
Definition: legionNetworkInterface.h:297
Legion::ControlManager * myLegionControlManager
Definition: legionNetworkInterface.h:287
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:38
virtual bool hasSimulationTime() const
This manager does not deal with sim time.
Definition: legionNetworkInterface.h:261
DtLegionOwnershipTransferManager * ownershipTransferManager()
The transfer manager. Valid after init. Get this to connect for pre transfer from message...
Definition: legionNetworkInterface.h:185
Definition: scenario.h:52
DtCommunicationManager * myCommunicationManager
Definition: legionNetworkInterface.h:292
boost::unordered_map< UInt64, const DtStateData * > StateDataByEntityId
Definition: legionNetworkInterface.h:275
const Coordinate_System * myCoordinateSystem
Definition: legionNetworkInterface.h:282
virtual std::string protocol() const override
Descriptive text of the network protocol.
Definition: legionNetworkInterface.h:111
DtLegionOwnershipTransferManager * myOwnershipTransferManager
Definition: legionNetworkInterface.h:299
bool disableRemoteDiscovery() const
Definition: legionNetworkInterface.h:167
virtual unsigned int maxNameLengthForType(const DtObjectType &) const
If the network interface supports it, the maximum name of a marking text.
Definition: legionNetworkInterface.h:236
#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:241
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:90
bool processSelfReflect() const
Definition: legionNetworkInterface.h:117
bool processRemoteObjectsInParallel() const
Definition: legionNetworkInterface.h:174
Legion::Connection * mySTEConnection
Definition: legionNetworkInterface.h:271
DtCommunicationManager * communicationManager()
The communication manager.
Definition: legionNetworkInterface.h:191
virtual bool publishingOnLegionNetwork() const
Whether or not this interface publishes on the legion network.
Definition: legionNetworkInterface.h:267
int myAppId
Definition: legionNetworkInterface.h:279
class DtRemoteObjectManager:
Definition: remoteObjectManager.h:28
bool myProcessSelfReflect
Definition: legionNetworkInterface.h:289
Definition: objectType.h:27
virtual bool validateScenario(const DtScenario &, DtString &) const
Return false if this scenario is not valid.
Definition: legionNetworkInterface.h:94
virtual bool needsUnpublishedDatabase() const
Return true if this connection uses the simulation database to publish on (as a legion connection doe...
Definition: legionNetworkInterface.h:208
class DtLegionOwnershipTransferManager:
Definition: legionOwnershipTransferManager.h:41
virtual void setRunFullyThreaded(bool)
Whether or not to run fully threaded. Legion is always threaded.
Definition: legionNetworkInterface.h:89
UInt64 GlobalIdentifier
Definition: legionOwnershipTransferManager.h:18
DtNetworkManagerInterface is the base class which all network interfaces must be derived from...
Definition: networkManagerInterface.h:40
Definition: coordSystem.h:54
StateDataByEntityId myStateDataByEntityId
Definition: legionNetworkInterface.h:276
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:336
Definition: event.h:13
static DtLegionNetworkInterfaceCreatorFcn theCreatorFunction
Definition: legionNetworkInterface.h:291
static const char * Type()
Definition: legionNetworkInterface.h:67
class DtLegionNetworkInterface:
Definition: legionNetworkInterface.h:53
The DtCommunicationManager class is a convenience class that will create both the DtNetworkInterfaceM...
Definition: communicationManager.h:50
virtual const char * type() const
Type to uniquely identify this manager.
Definition: legionNetworkInterface.h:66
virtual void endScenarioLoad(bool)
Called when ending scenario load. True is passed in to reuse identifiers if network dependent...
Definition: legionNetworkInterface.h:239
makVrfEvents::DtEventManager * eventManager()
Definition: legionNetworkInterface.h:129
virtual void setVrfMessageVersionSupported(int)
If used the message version this VRF session uses.
Definition: legionNetworkInterface.h:242
bool destructing() const
Definition: legionNetworkInterface.h:144
bool myOwnsLegionConnection
Definition: legionNetworkInterface.h:284
bool myDisableRemoteDiscovery
Definition: legionNetworkInterface.h:295
bool myDestructing
Definition: legionNetworkInterface.h:300
DtSimulationAddress mySimulationAddress
Definition: legionNetworkInterface.h:278
DtRemoteObjectManager * myRemoteObjectManager
Definition: legionNetworkInterface.h:294
DtLegionNetworkInterface *(* DtLegionNetworkInterfaceCreatorFcn)(DtStateDataManager *, Legion::Connection *, Legion::Configuration *)
Definition: legionNetworkInterface.h:47
std::set< makVrf::SimStateID > myPublishing
Definition: legionNetworkInterface.h:272
DtLegionEventTranslatorManager * eventTranslatorManager()
Definition: legionNetworkInterface.h:201
DtLegionEventTranslatorManager * myLegionEventTranslatorManager
Definition: legionNetworkInterface.h:283
int myEntityId
Definition: legionNetworkInterface.h:280
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
bool myProcessRemoteObjectsInParallel
Definition: legionNetworkInterface.h:296
const char int mode
Definition: ioapi.h:38
makVrfEvents::DtEventManager * myEventManager
Definition: legionNetworkInterface.h:281
Legion::EventManager * myLegionEventManager
Definition: legionNetworkInterface.h:286
DtStateDataManager * stateDataManager()
Definition: legionNetworkInterface.h:134
virtual void setParameterDatabase(DtVrfParameterDb *)
VRF specific for creating network interfaces from parameter data.
Definition: legionNetworkInterface.h:240
const DtSimulationAddress & simulationAddress() const
Definition: legionNetworkInterface.h:139
Legion::Connection * connection()
Definition: legionNetworkInterface.h:196
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:71

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)