VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
communicationManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 #pragma once
6 
8 #include <vrfutil/uuid.h>
9 #include <vlpi/simulationAddress.h>
10 #include <vlutil/vlTime.h>
11 #include <boost/signals2.hpp>
12 #include <boost/function.hpp>
13 
14 #include <atomic>
15 #include <set>
16 
17 namespace makVrfEvents
18 {
19  class DtEventManager;
20  class DtEvent;
21 }
22 
23 namespace makVrf
24 {
25  class DtStateDataManager;
26 }
27 
28 class DtScenario;
29 class DtExerciseClock;
33 class Coordinate_System;
34 class DtVrfParameterDb;
35 
36 typedef DtCommunicationManager* (*DtCommunicationManagerCreatorFcn)(const DtSimulationAddress&, makVrf::DtStateDataManager*, int);
37 
39 {
40  DtCommunicationManagerPerformanceTimerInformation() : preAdvanceFrameTime(0.), networkFrameTime(0.), sleepTime(0.) {};
41  double preAdvanceFrameTime;
43  double sleepTime;
44 };
45 
55 {
56 public:
57  typedef boost::function<double (double& dt)> SimTimeProvideFcn;
61  DtCommunicationManager(const DtSimulationAddress&, makVrf::DtStateDataManager* sm = 0, int threadPoolSize = -1);
62 
63  virtual ~DtCommunicationManager();
64 
68  static void setCommunicationManagerCreatorFcn(DtCommunicationManagerCreatorFcn fcn);
69  static DtCommunicationManager* createCommunicationManager(const DtSimulationAddress&, makVrf::DtStateDataManager* sm = 0, int threadPoolSize = -1);
71 
73  virtual void setNetworkInterfaceManager(DtNetworkInterfaceManager*);
75  {
76  return myNetworkInterfaceManager;
77  }
78 
79  virtual void setSimulationAddress(const DtSimulationAddress&);
80  const DtSimulationAddress& simulationAddress() const;
81  const DtSimulationAddress& applicationId() const { return simulationAddress(); };
82 
84  virtual void setEventManager(makVrfEvents::DtEventManager*);
86  {
87  return myEventManager;
88  }
89 
90  virtual void setParameterDatabase(DtVrfParameterDb*);
92  {
93  return myParameterDatabase;
94  }
95 
97  virtual void setNumCallbackThreads(unsigned);
98 
100  virtual bool typeIsPublishable(const DtEntityType&) const;
101 
103  virtual void setCoordinateSystem(const Coordinate_System*);
104 
107  virtual double beginFrame(double& dt, DtCommunicationManagerPerformanceTimerInformation* performanceTimerInformation = nullptr);
108 
111  virtual bool advanceFrame(DtCommunicationManagerPerformanceTimerInformation* performanceTimerInformation = nullptr);
112 
114  virtual bool waitingToAddObjects() const;
115 
117  virtual bool supportsOwnershipTransfer() const;
118 
122  virtual bool insertManagerAtBeginning(DtNetworkManagerInterface*);
123 
125  virtual bool addManager(DtNetworkManagerInterface*);
126 
128  virtual DtNetworkManagerInterface* networkManagerInterface(const char*) const;
129 
131  virtual void removeManager(const char*);
132 
134  virtual void addEvent(const makVrfEvents::DtEvent&);
135 
137  virtual void postEvent(const makVrfEvents::DtEvent&);
138 
140  virtual void sendEvent(const makVrfEvents::DtEvent&);
141 
143  virtual void setUsePerfCounter(bool);
144 
147  virtual DtString nextEventId(const DtString& = DtString::nullString());
148 
150  virtual void setSessionId(int);
151  int sessionId() const
152  {
153  return mySessionId;
154  }
155 
158  virtual double elapsedRealTime() const;
159 
161  virtual void run();
162 
164  virtual void pause();
165 
167  virtual void rewindScenario();
168 
170  virtual void resetSimulation();
171 
173  virtual void setSimTime(double);
174 
176  virtual void setFrameRateMode(const DtString& mode, double deltaTime, bool manageTime = false);
177 
179  virtual void setTimeMultiplier(double);
180 
182  virtual void setExerciseStartTime(double);
183 
184  virtual bool isPaused() const;
185  virtual double approximateElapsedRealTime() const;
186  virtual double absRealTime() const;
187  virtual double timeMultiplier() const;
188  virtual double exerciseStartTime() const;
189  virtual bool isRunToCompleteFrameMode() const;
190  virtual void setSimTimeProviderFunction(SimTimeProvideFcn f);
191 
192  virtual double simTime() const
193  {
194  return mySimTime;
195  }
196 
198 
200  {
201  return myExerciseClock;
202  }
203 
204  bool skippedLastFrame() const;
205 
206  bool inFame() const
207  {
208  return myInFrame;
209  }
210 
212  virtual bool isConnectionless() const;
213 
215  virtual void removeAndDeleteAll(const std::set<DtUUID>& except = std::set<DtUUID>());
216 
219  virtual void reserve(unsigned int);
220 
222  virtual bool validateScenario(const DtScenario& s, DtString& error) const;
223 
225  virtual bool selfReflecting() const;
226 
229  virtual void setSelfReflecting(bool);
230 
231  virtual void beginBulkCreate();
232  virtual void endBulkCreate();
234  {
235  return myStateDataManager;
236  }
237 
242  virtual bool rediscoverObjects();
243 
244 public:
246  boost::signals2::signal<void (bool& continueAdvance)> signal_aboutToAdvanceFrame;
247 
249  boost::signals2::signal<void (makVrf::DtStateDataManager*)> signal_stateDataManagerChanged;
250 
253  boost::signals2::signal<void ()> signal_frameAdvanced;
254 
256 boost::signals2::signal<void ()> signal_preEventManagerTick;
257 
259  boost::signals2::signal<void (double simTime, double dT)> signal_beginFrame;
260 
262  boost::signals2::signal<void (DtNetworkManagerInterface*)> signal_interfaceAdded;
263 
265  boost::signals2::signal<void (DtNetworkManagerInterface*)> signal_interfaceRemoved;
266 
267 protected:
268  virtual void slot_interfaceAdded(DtNetworkManagerInterface*);
269  virtual void slot_interfaceRemoved(DtNetworkManagerInterface*);
270 
272  void initialize();
273 
274 protected:
279  DtSimulationAddress mySimulationAddress;
280 
285  double mySimTime;
286  double myLastDt;
290  std::atomic<int> myNextEventNumber;
291 };
static DtCommunicationManagerCreatorFcn theCommunicationManagerCreatorFcn
Definition: communicationManager.h:278
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:41
boost::function< double(double &dt)> SimTimeProvideFcn
Definition: communicationManager.h:57
Definition: scenario.h:52
int sessionId() const
Definition: communicationManager.h:151
const DtSimulationAddress & applicationId() const
Definition: communicationManager.h:81
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
boost::signals2::signal< void(double simTime, double dT)> signal_beginFrame
Signal sent right before beginFrame is returned.
Definition: communicationManager.h:259
bool myOwnsStateDataManager
Definition: communicationManager.h:283
Contains the DtUUID class declaration.
DtExerciseClock * clock() const
Definition: communicationManager.h:199
double mySimTime
Definition: communicationManager.h:285
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
double networkFrameTime
Definition: communicationManager.h:42
double myLastDt
Definition: communicationManager.h:286
DtCommunicationManager *(* DtCommunicationManagerCreatorFcn)(const DtSimulationAddress &, makVrf::DtStateDataManager *, int)
Definition: communicationManager.h:36
boost::signals2::signal< void(bool &continueAdvance)> signal_aboutToAdvanceFrame
Sent before the state data manager advances its frame. Set continueAdvance to false to prevent the ad...
Definition: communicationManager.h:246
std::atomic< int > myNextEventNumber
Definition: communicationManager.h:290
Definition: communicationManager.h:38
boost::signals2::signal< void(DtNetworkManagerInterface *)> signal_interfaceAdded
Signal sent when an interface is added.
Definition: communicationManager.h:262
makVrfEvents::DtEventManager * myEventManager
Definition: communicationManager.h:277
DtNetworkManagerInterface is the base class which all network interfaces must be derived from...
Definition: networkManagerInterface.h:43
Definition: coordSystem.h:54
Definition: event.h:13
DtVrfParameterDb * myParameterDatabase
Definition: communicationManager.h:289
boost::signals2::signal< void()> signal_preEventManagerTick
Signal sent before the signal_beginFrame and before the event manager tick, but after state data mana...
Definition: communicationManager.h:256
boost::signals2::signal< void()> signal_frameAdvanced
Can be called by outside holders of this class if the frame cannot be advanced, however, other classes connect to this to be signaled for a post communication advance event. Will also be called from advanceFrame.
Definition: communicationManager.h:253
bool inFame() const
Definition: communicationManager.h:206
The DtCommunicationManager class is a convenience class that will create both the DtNetworkInterfaceM...
Definition: communicationManager.h:54
DtVrfParameterDb * parameterDatabase() const
Definition: communicationManager.h:91
DtSimulationAddress mySimulationAddress
Definition: communicationManager.h:279
double sleepTime
Definition: communicationManager.h:43
boost::signals2::signal< void(DtNetworkManagerInterface *)> signal_interfaceRemoved
Signal sent when an interface is removed.
Definition: communicationManager.h:265
makVrf::DtStateDataManager * stateDataManager() const
Definition: communicationManager.h:233
Definition: asyncJobServer.h:39
makVrfEvents::DtEventManager * eventManager()
Definition: communicationManager.h:85
int mySessionId
Definition: communicationManager.h:284
virtual double simTime() const
Definition: communicationManager.h:192
The DtNetworkInterfaceManager manages all network interfaces utilized by the sim engine. Often there is only one, but it is possible for there to be multiple. Each network interface is an instance of a subclass of DtNetworkManagerInterface. As state data is created or removed, the DtNetworkInterfaceManager will notify each of its network interfaces, so that they may create object network interfaces to output required state data to the network.
Definition: networkInterfaceManager.h:47
DtNetworkInterfaceManager * myNetworkInterfaceManager
Definition: communicationManager.h:275
const char int mode
Definition: ioapi.h:38
SimTimeProvideFcn mySimTimeProviderFunction
Definition: communicationManager.h:287
DtNetworkInterfaceManager * networkInterfaceManager()
Definition: communicationManager.h:74
int myInFrame
Definition: communicationManager.h:288
boost::signals2::signal< void(makVrf::DtStateDataManager *)> signal_stateDataManagerChanged
Sent if a network manager is assigned with a different state data manager in it.
Definition: communicationManager.h:249
#define DT_DLL_vrfMsgTransport
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfCommunicationManagerDefines.h:26
makVrf::DtStateDataManager * myStateDataManager
Definition: communicationManager.h:276
Description: The Exercise Clock keeps track of current simulated time. When &#39;ticked&#39;, 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:27
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73
DtExerciseClock * myExerciseClock
Backup for simulation time (absRealTime) if no network manager.
Definition: communicationManager.h:282

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)