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 
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 
95  virtual void reserveEntityId(const DtEntityIdentifier&) {};
96 
97  virtual bool validateScenario(const DtScenario&, DtString&) const { return true; };
98 
99  virtual void setSiteAppId(int, int);
100 
102  virtual void removeAndDeleteAll();
103 
104  virtual void setSimTime(double);
105  virtual void setTimeMultiplier(double);
106 
107  virtual void setNeedsInterestRegionSet(bool val);
108  virtual bool needsInterestRegionSet() const;
109 
112  virtual DtString nextEventId(const DtString& = DtString::nullString()) override;
113 
114  virtual std::string protocol() const override
115  {
116  return std::string("Legion");
117  }
118 
119  virtual void setProcessSelfReflect(bool b);
120  bool processSelfReflect() const
121  {
122  return myProcessSelfReflect;
123  }
124 
125  virtual DtRemoteObjectManager* createRemoteObjectManager();
126 
127  static void setLegionNetworkInterfaceCreatorFcn(DtLegionNetworkInterfaceCreatorFcn);
128  static DtLegionNetworkInterface* createLegionNetworkInterface(DtStateDataManager*, Legion::Connection* connection = 0,
129  Legion::Configuration* config = 0);
131  virtual void setEventManager(makVrfEvents::DtEventManager*);
133  {
134  return myEventManager;
135  }
136 
138  {
139  return myStateDataManager;
140  }
141 
142  const DtSimulationAddress& simulationAddress() const
143  {
144  return mySimulationAddress;
145  }
146 
147  bool destructing() const
148  {
149  return myDestructing;
150  }
151 
153  virtual bool typeIsPublishable(const DtEntityType&) const;
154 
155  virtual int clientId() const;
156  virtual UInt64 uuidToGlobalId(const DtUUID&) const;
157  virtual DtUUID globalIdToUUID(UInt64) const;
158 
159  virtual Legion::EventManager* legionEventManager();
160  virtual Legion::ControlManager* legionControlManager();
161 
163  virtual UInt64 toGlobalIdentifier(const DtEntityIdentifier&) const;
164  virtual DtEntityIdentifier toEntityIdentifier(UInt64) const;
165 
166  virtual const makVrf::DtStateData* stateDataForGlobalId(const DtString&) const;
167 
169  virtual void setDisableRemoteDiscovery(bool);
171  {
172  return myDisableRemoteDiscovery;
173  }
174 
176  virtual void setProcessRemoteObjectsInParallel(bool);
178  {
179  return myProcessRemoteObjectsInParallel;
180  }
181 
185  virtual void setNumCallbackThreads(unsigned);
186 
189  {
190  return myOwnershipTransferManager;
191  }
192 
195  {
196  return myCommunicationManager;
197  }
198 
199  Legion::Connection* connection()
200  {
201  return mySTEConnection;
202  }
203 
205  {
206  return myLegionEventTranslatorManager;
207  }
208 
211  virtual bool needsUnpublishedDatabase() const
212  {
213  return true;
214  }
215 
216  protected:
219  virtual bool stateDataAdded(DtStateData*);
220 
222  virtual void stateDataAboutToBeRemoved(const DtStateData*);
223 
224  virtual bool init(DtCommunicationManager*);
225 
227  virtual void reserve(unsigned numToReserve);
228 
230  virtual void printReflectedObjectCounts() const;
231 
233  virtual void requestUpdatesForRemoteNonVrfObjects() const;
234 
236  virtual void rediscoverObjects(const std::set<DtString>& ignore);
237 
239  virtual unsigned int maxNameLengthForType(const DtObjectType&) const { return 0xFFFFFFFF; };
240 
241  virtual void startScenarioLoad(bool);
242  virtual void endScenarioLoad(bool) {};
244  virtual void setVrfSessionId(int) {};
245  virtual void setVrfMessageVersionSupported(int) {};
246  virtual void resetSimulation();
247  virtual void rewindScenario();
248 
250  virtual void run();
251 
253  virtual void pause();
254 
255  virtual void setFrameRateMode(const DtString& mode, double deltaTime, bool manageTime = false);
256 
258  virtual AddEventResult addEvent(const makVrfEvents::DtEvent&, bool& selfReflected);
259 
261  virtual AddEventResult sendEvent(const makVrfEvents::DtEvent&);
262 
264  virtual bool hasSimulationTime() const { return false; };
265 
267  virtual bool rediscoverObjects();
268 
270  virtual bool publishingOnLegionNetwork() const { return true; };
271 
272  protected:
273  DtStateDataManager* myStateDataManager;
274  Legion::Connection* mySTEConnection;
275  std::set<makVrf::SimStateID> myPublishing;
276  mutable tbb::spin_rw_mutex myPublishMutex;
277 
278  typedef boost::unordered_map<UInt64, const DtStateData*> StateDataByEntityId;
281  DtSimulationAddress mySimulationAddress;
282  int myAppId;
288 
289  Legion::EventManager* myLegionEventManager;
290  Legion::ControlManager* myLegionControlManager;
291 
293 
296 
300  unsigned int myNumCallbackThreads;
301 
304  };
305 }
UUID is a unique ID wrapper class.
Definition: uuid.h:59
bool myNeedsInterestSet
Definition: legionNetworkInterface.h:280
tbb::spin_rw_mutex myPublishMutex
Definition: legionNetworkInterface.h:276
unsigned int myNumCallbackThreads
Definition: legionNetworkInterface.h:300
Legion::ControlManager * myLegionControlManager
Definition: legionNetworkInterface.h:290
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:40
virtual bool hasSimulationTime() const
This manager does not deal with sim time.
Definition: legionNetworkInterface.h:264
DtLegionOwnershipTransferManager * ownershipTransferManager()
The transfer manager. Valid after init. Get this to connect for pre transfer from message...
Definition: legionNetworkInterface.h:188
Definition: scenario.h:52
DtCommunicationManager * myCommunicationManager
Definition: legionNetworkInterface.h:295
boost::unordered_map< UInt64, const DtStateData * > StateDataByEntityId
Definition: legionNetworkInterface.h:278
const Coordinate_System * myCoordinateSystem
Definition: legionNetworkInterface.h:285
virtual std::string protocol() const override
Descriptive text of the network protocol.
Definition: legionNetworkInterface.h:114
DtLegionOwnershipTransferManager * myOwnershipTransferManager
Definition: legionNetworkInterface.h:302
bool disableRemoteDiscovery() const
Definition: legionNetworkInterface.h:170
virtual unsigned int maxNameLengthForType(const DtObjectType &) const
If the network interface supports it, the maximum name of a marking text.
Definition: legionNetworkInterface.h:239
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:95
#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:244
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:120
bool processRemoteObjectsInParallel() const
Definition: legionNetworkInterface.h:177
Legion::Connection * mySTEConnection
Definition: legionNetworkInterface.h:274
DtCommunicationManager * communicationManager()
The communication manager.
Definition: legionNetworkInterface.h:194
virtual bool publishingOnLegionNetwork() const
Whether or not this interface publishes on the legion network.
Definition: legionNetworkInterface.h:270
int myAppId
Definition: legionNetworkInterface.h:282
class DtRemoteObjectManager:
Definition: remoteObjectManager.h:28
bool myProcessSelfReflect
Definition: legionNetworkInterface.h:292
Definition: objectType.h:27
virtual bool validateScenario(const DtScenario &, DtString &) const
Return false if this scenario is not valid.
Definition: legionNetworkInterface.h:97
virtual bool needsUnpublishedDatabase() const
Return true if this connection uses the simulation database to publish on (as a legion connection doe...
Definition: legionNetworkInterface.h:211
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:42
Definition: coordSystem.h:54
StateDataByEntityId myStateDataByEntityId
Definition: legionNetworkInterface.h:279
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
Definition: event.h:13
static DtLegionNetworkInterfaceCreatorFcn theCreatorFunction
Definition: legionNetworkInterface.h:294
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:51
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:242
makVrfEvents::DtEventManager * eventManager()
Definition: legionNetworkInterface.h:132
unsigned long long UInt64
Definition: stateDataTypes.h:17
virtual void setVrfMessageVersionSupported(int)
If used the message version this VRF session uses.
Definition: legionNetworkInterface.h:245
bool destructing() const
Definition: legionNetworkInterface.h:147
bool myOwnsLegionConnection
Definition: legionNetworkInterface.h:287
bool myDisableRemoteDiscovery
Definition: legionNetworkInterface.h:298
bool myDestructing
Definition: legionNetworkInterface.h:303
DtSimulationAddress mySimulationAddress
Definition: legionNetworkInterface.h:281
DtRemoteObjectManager * myRemoteObjectManager
Definition: legionNetworkInterface.h:297
DtLegionNetworkInterface *(* DtLegionNetworkInterfaceCreatorFcn)(DtStateDataManager *, Legion::Connection *, Legion::Configuration *)
Definition: legionNetworkInterface.h:47
std::set< makVrf::SimStateID > myPublishing
Definition: legionNetworkInterface.h:275
DtLegionEventTranslatorManager * eventTranslatorManager()
Definition: legionNetworkInterface.h:204
DtLegionEventTranslatorManager * myLegionEventTranslatorManager
Definition: legionNetworkInterface.h:286
int myEntityId
Definition: legionNetworkInterface.h:283
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
bool myProcessRemoteObjectsInParallel
Definition: legionNetworkInterface.h:299
const char int mode
Definition: ioapi.h:38
makVrfEvents::DtEventManager * myEventManager
Definition: legionNetworkInterface.h:284
Legion::EventManager * myLegionEventManager
Definition: legionNetworkInterface.h:289
DtStateDataManager * stateDataManager()
Definition: legionNetworkInterface.h:137
virtual void setParameterDatabase(DtVrfParameterDb *)
VRF specific for creating network interfaces from parameter data.
Definition: legionNetworkInterface.h:243
const DtSimulationAddress & simulationAddress() const
Definition: legionNetworkInterface.h:142
Legion::Connection * connection()
Definition: legionNetworkInterface.h:199
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)