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 <vlpi/simulationAddress.h>
9 #include <vlutil/vlTime.h>
10 #include <boost/signals2.hpp>
11 #include <boost/function.hpp>
12 #include <tbb/atomic.h>
13 
14 namespace makVrfEvents
15 {
16  class DtEventManager;
17  class DtEvent;
18 }
19 
20 namespace makVrf
21 {
22  class DtStateDataManager;
23 }
24 
25 class DtScenario;
26 class DtExerciseClock;
30 class Coordinate_System;
31 class DtVrfParameterDb;
32 
33 typedef DtCommunicationManager* (*DtCommunicationManagerCreatorFcn)(const DtSimulationAddress&, makVrf::DtStateDataManager*, int);
34 
36 {
37  DtCommunicationManagerPerformanceTimerInformation() : preAdvanceFrameTime(0.), networkFrameTime(0.), sleepTime(0.) {};
38  double preAdvanceFrameTime;
40  double sleepTime;
41 };
42 
52 {
53 public:
54  typedef boost::function<double (double& dt)> SimTimeProvideFcn;
58  DtCommunicationManager(const DtSimulationAddress&, makVrf::DtStateDataManager* sm = 0, int threadPoolSize = -1);
59 
60  virtual ~DtCommunicationManager();
61 
65  static void setCommunicationManagerCreatorFcn(DtCommunicationManagerCreatorFcn fcn);
66  static DtCommunicationManager* createCommunicationManager(const DtSimulationAddress&, makVrf::DtStateDataManager* sm = 0, int threadPoolSize = -1);
68 
70  virtual void setNetworkInterfaceManager(DtNetworkInterfaceManager*);
72  {
73  return myNetworkInterfaceManager;
74  }
75 
76  virtual void setSimulationAddress(const DtSimulationAddress&);
77  const DtSimulationAddress& simulationAddress() const;
78  const DtSimulationAddress& applicationId() const { return simulationAddress(); };
79 
81  virtual void setEventManager(makVrfEvents::DtEventManager*);
83  {
84  return myEventManager;
85  }
86 
87  virtual void setParameterDatabase(DtVrfParameterDb*);
89  {
90  return myParameterDatabase;
91  }
92 
94  virtual void setNumCallbackThreads(unsigned);
95 
97  virtual bool typeIsPublishable(const DtEntityType&) const;
98 
100  virtual void setCoordinateSystem(const Coordinate_System*);
101 
104  virtual double beginFrame(double& dt, DtCommunicationManagerPerformanceTimerInformation* performanceTimerInformation = nullptr);
105 
108  virtual bool advanceFrame(DtCommunicationManagerPerformanceTimerInformation* performanceTimerInformation = nullptr);
109 
113  virtual bool insertManagerAtBeginning(DtNetworkManagerInterface*);
114 
116  virtual bool addManager(DtNetworkManagerInterface*);
117 
119  virtual DtNetworkManagerInterface* networkManagerInterface(const char*) const;
120 
122  virtual void removeManager(const char*);
123 
125  virtual void addEvent(const makVrfEvents::DtEvent&);
126 
128  virtual void postEvent(const makVrfEvents::DtEvent&);
129 
131  virtual void sendEvent(const makVrfEvents::DtEvent&);
132 
134  virtual void setUsePerfCounter(bool);
135 
138  virtual DtString nextEventId(const DtString& = DtString::nullString());
139 
141  virtual void setSessionId(int);
142  int sessionId() const
143  {
144  return mySessionId;
145  }
146 
149  virtual double elapsedRealTime() const;
150 
152  virtual void run();
153 
155  virtual void pause();
156 
158  virtual void rewindScenario();
159 
161  virtual void resetSimulation();
162 
164  virtual void setSimTime(double);
165 
167  virtual void setFrameRateMode(const DtString& mode, double deltaTime, bool manageTime = false);
168 
170  virtual void setTimeMultiplier(double);
171 
173  virtual void setExerciseStartTime(double);
174 
175  virtual bool isPaused() const;
176  virtual double approximateElapsedRealTime() const;
177  virtual double absRealTime() const;
178  virtual double timeMultiplier() const;
179  virtual double exerciseStartTime() const;
180  virtual bool isRunToCompleteFrameMode() const;
181  virtual void setSimTimeProviderFunction(SimTimeProvideFcn f);
182 
183  virtual double simTime() const
184  {
185  return mySimTime;
186  }
187 
189 
191  {
192  return myExerciseClock;
193  }
194 
195  bool inFame() const
196  {
197  return myInFrame;
198  }
199 
201  virtual bool isConnectionless() const;
202 
204  virtual void removeAndDeleteAll();
205 
208  virtual void reserve(unsigned int);
209 
211  virtual bool validateScenario(const DtScenario& s, DtString& error) const;
212 
214  virtual bool selfReflecting() const;
215 
218  virtual void setSelfReflecting(bool);
219 
220  virtual void beginBulkCreate();
221  virtual void endBulkCreate();
223  {
224  return myStateDataManager;
225  }
226 
231  virtual bool rediscoverObjects();
232 
233 public:
235  boost::signals2::signal<void ()> signal_aboutToAdvanceFrame;
236 
238  boost::signals2::signal<void (makVrf::DtStateDataManager*)> signal_stateDataManagerChanged;
239 
242  boost::signals2::signal<void ()> signal_frameAdvanced;
243 
245 boost::signals2::signal<void ()> signal_preEventManagerTick;
246 
248  boost::signals2::signal<void (double simTime, double dT)> signal_beginFrame;
249 
251  boost::signals2::signal<void (DtNetworkManagerInterface*)> signal_interfaceAdded;
252 
254  boost::signals2::signal<void (DtNetworkManagerInterface*)> signal_interfaceRemoved;
255 
256 protected:
257  virtual void slot_interfaceAdded(DtNetworkManagerInterface*);
258  virtual void slot_interfaceRemoved(DtNetworkManagerInterface*);
259 
261  void initialize();
262 
263 protected:
268  DtSimulationAddress mySimulationAddress;
269 
274  double mySimTime;
275  double myLastDt;
279  tbb::atomic<int> myNextEventNumber;
280 };
static DtCommunicationManagerCreatorFcn theCommunicationManagerCreatorFcn
Definition: communicationManager.h:267
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:40
boost::function< double(double &dt)> SimTimeProvideFcn
Definition: communicationManager.h:54
Definition: scenario.h:52
int sessionId() const
Definition: communicationManager.h:142
const DtSimulationAddress & applicationId() const
Definition: communicationManager.h:78
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:248
bool myOwnsStateDataManager
Definition: communicationManager.h:272
DtExerciseClock * clock() const
Definition: communicationManager.h:190
double mySimTime
Definition: communicationManager.h:274
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
boost::signals2::signal< void()> signal_aboutToAdvanceFrame
Sent before the state data manager advances its frame.
Definition: communicationManager.h:235
double networkFrameTime
Definition: communicationManager.h:39
double myLastDt
Definition: communicationManager.h:275
DtCommunicationManager *(* DtCommunicationManagerCreatorFcn)(const DtSimulationAddress &, makVrf::DtStateDataManager *, int)
Definition: communicationManager.h:33
Definition: communicationManager.h:35
boost::signals2::signal< void(DtNetworkManagerInterface *)> signal_interfaceAdded
Signal sent when an interface is added.
Definition: communicationManager.h:251
makVrfEvents::DtEventManager * myEventManager
Definition: communicationManager.h:266
DtNetworkManagerInterface is the base class which all network interfaces must be derived from...
Definition: networkManagerInterface.h:42
Definition: coordSystem.h:54
Definition: event.h:13
DtVrfParameterDb * myParameterDatabase
Definition: communicationManager.h:278
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:245
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:242
bool inFame() const
Definition: communicationManager.h:195
The DtCommunicationManager class is a convenience class that will create both the DtNetworkInterfaceM...
Definition: communicationManager.h:51
DtVrfParameterDb * parameterDatabase() const
Definition: communicationManager.h:88
DtSimulationAddress mySimulationAddress
Definition: communicationManager.h:268
double sleepTime
Definition: communicationManager.h:40
boost::signals2::signal< void(DtNetworkManagerInterface *)> signal_interfaceRemoved
Signal sent when an interface is removed.
Definition: communicationManager.h:254
makVrf::DtStateDataManager * stateDataManager() const
Definition: communicationManager.h:222
Definition: asyncJobServer.h:39
makVrfEvents::DtEventManager * eventManager()
Definition: communicationManager.h:82
int mySessionId
Definition: communicationManager.h:273
tbb::atomic< int > myNextEventNumber
Definition: communicationManager.h:279
virtual double simTime() const
Definition: communicationManager.h:183
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:45
DtNetworkInterfaceManager * myNetworkInterfaceManager
Definition: communicationManager.h:264
const char int mode
Definition: ioapi.h:38
SimTimeProvideFcn mySimTimeProviderFunction
Definition: communicationManager.h:276
DtNetworkInterfaceManager * networkInterfaceManager()
Definition: communicationManager.h:71
int myInFrame
Definition: communicationManager.h:277
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:238
#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:265
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:271

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)