VR-Forces 5.0.2 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.) {};
38  double preAdvanceFrameTime;
40 };
41 
51 {
52 public:
53  typedef boost::function<double (double& dt)> SimTimeProvideFcn;
57  DtCommunicationManager(const DtSimulationAddress&, makVrf::DtStateDataManager* sm = 0, int threadPoolSize = -1);
58 
59  virtual ~DtCommunicationManager();
60 
64  static void setCommunicationManagerCreatorFcn(DtCommunicationManagerCreatorFcn fcn);
65  static DtCommunicationManager* createCommunicationManager(const DtSimulationAddress&, makVrf::DtStateDataManager* sm = 0, int threadPoolSize = -1);
67 
69  virtual void setNetworkInterfaceManager(DtNetworkInterfaceManager*);
71  {
72  return myNetworkInterfaceManager;
73  }
74 
75  virtual void setSimulationAddress(const DtSimulationAddress&);
76  const DtSimulationAddress& simulationAddress() const;
77  const DtSimulationAddress& applicationId() const { return simulationAddress(); };
78 
80  virtual void setEventManager(makVrfEvents::DtEventManager*);
82  {
83  return myEventManager;
84  }
85 
86  virtual void setParameterDatabase(DtVrfParameterDb*);
88  {
89  return myParameterDatabase;
90  }
91 
93  virtual void setNumCallbackThreads(unsigned);
94 
96  virtual bool typeIsPublishable(const DtEntityType&) const;
97 
99  virtual void setCoordinateSystem(const Coordinate_System*);
100 
103  virtual double beginFrame(double& dt);
104 
107  virtual bool advanceFrame(DtCommunicationManagerPerformanceTimerInformation* performanceTimerInformation = nullptr);
108 
112  virtual bool insertManagerAtBeginning(DtNetworkManagerInterface*);
113 
115  virtual bool addManager(DtNetworkManagerInterface*);
116 
118  virtual DtNetworkManagerInterface* networkManagerInterface(const char*) const;
119 
121  virtual void removeManager(const char*);
122 
124  virtual void addEvent(const makVrfEvents::DtEvent&);
125 
127  virtual void postEvent(const makVrfEvents::DtEvent&);
128 
130  virtual void sendEvent(const makVrfEvents::DtEvent&);
131 
133  virtual void setUsePerfCounter(bool);
134 
137  virtual DtString nextEventId(const DtString& = DtString::nullString());
138 
140  virtual void setSessionId(int);
141  int sessionId() const
142  {
143  return mySessionId;
144  }
145 
148  virtual double elapsedRealTime() const;
149 
151  virtual void run();
152 
154  virtual void pause();
155 
157  virtual void rewindScenario();
158 
160  virtual void resetSimulation();
161 
163  virtual void setSimTime(double);
164 
166  virtual void setFrameRateMode(const DtString& mode, double deltaTime, bool manageTime = false);
167 
169  virtual void setTimeMultiplier(double);
170 
172  virtual void setExerciseStartTime(double);
173 
174  virtual bool isPaused() const;
175  virtual double approximateElapsedRealTime() const;
176  virtual double absRealTime() const;
177  virtual double timeMultiplier() const;
178  virtual double exerciseStartTime() const;
179  virtual bool isRunToCompleteFrameMode() const;
180  virtual void setSimTimeProviderFunction(SimTimeProvideFcn f);
181 
182  virtual double simTime() const
183  {
184  return mySimTime;
185  }
186 
188 
190  {
191  return myExerciseClock;
192  }
193 
194  bool inFame() const
195  {
196  return myInFrame;
197  }
198 
200  virtual bool isConnectionless() const;
201 
203  virtual void removeAndDeleteAll();
204 
207  virtual void reserve(unsigned int);
208 
210  virtual bool validateScenario(const DtScenario& s, DtString& error) const;
211 
213  virtual bool selfReflecting() const;
214 
217  virtual void setSelfReflecting(bool);
218 
219  virtual void beginBulkCreate();
220  virtual void endBulkCreate();
222  {
223  return myStateDataManager;
224  }
225 
230  virtual bool rediscoverObjects();
231 
232 public:
234  boost::signals2::signal<void ()> signal_aboutToAdvanceFrame;
235 
237  boost::signals2::signal<void (makVrf::DtStateDataManager*)> signal_stateDataManagerChanged;
238 
241  boost::signals2::signal<void ()> signal_frameAdvanced;
242 
244  boost::signals2::signal<void (double simTime, double dT)> signal_beginFrame;
245 
247  boost::signals2::signal<void (DtNetworkManagerInterface*)> signal_interfaceAdded;
248 
250  boost::signals2::signal<void (DtNetworkManagerInterface*)> signal_interfaceRemoved;
251 
252 protected:
253  virtual void slot_interfaceAdded(DtNetworkManagerInterface*);
254  virtual void slot_interfaceRemoved(DtNetworkManagerInterface*);
255 
257  void initialize();
258 
259 protected:
264  DtSimulationAddress mySimulationAddress;
265 
270  double mySimTime;
271  double myLastDt;
275  tbb::atomic<int> myNextEventNumber;
276 };
static DtCommunicationManagerCreatorFcn theCommunicationManagerCreatorFcn
Definition: communicationManager.h:263
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:38
boost::function< double(double &dt)> SimTimeProvideFcn
Definition: communicationManager.h:53
Definition: scenario.h:52
int sessionId() const
Definition: communicationManager.h:141
const DtSimulationAddress & applicationId() const
Definition: communicationManager.h:77
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:244
bool myOwnsStateDataManager
Definition: communicationManager.h:268
DtExerciseClock * clock() const
Definition: communicationManager.h:189
double mySimTime
Definition: communicationManager.h:270
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:234
double networkFrameTime
Definition: communicationManager.h:39
double myLastDt
Definition: communicationManager.h:271
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:247
makVrfEvents::DtEventManager * myEventManager
Definition: communicationManager.h:262
DtNetworkManagerInterface is the base class which all network interfaces must be derived from...
Definition: networkManagerInterface.h:40
Definition: coordSystem.h:54
Definition: event.h:13
DtVrfParameterDb * myParameterDatabase
Definition: communicationManager.h:274
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:241
bool inFame() const
Definition: communicationManager.h:194
The DtCommunicationManager class is a convenience class that will create both the DtNetworkInterfaceM...
Definition: communicationManager.h:50
DtVrfParameterDb * parameterDatabase() const
Definition: communicationManager.h:87
DtSimulationAddress mySimulationAddress
Definition: communicationManager.h:264
boost::signals2::signal< void(DtNetworkManagerInterface *)> signal_interfaceRemoved
Signal sent when an interface is removed.
Definition: communicationManager.h:250
makVrf::DtStateDataManager * stateDataManager() const
Definition: communicationManager.h:221
Definition: asyncJobServer.h:39
makVrfEvents::DtEventManager * eventManager()
Definition: communicationManager.h:81
int mySessionId
Definition: communicationManager.h:269
tbb::atomic< int > myNextEventNumber
Definition: communicationManager.h:275
virtual double simTime() const
Definition: communicationManager.h:182
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:44
DtNetworkInterfaceManager * myNetworkInterfaceManager
Definition: communicationManager.h:260
const char int mode
Definition: ioapi.h:38
SimTimeProvideFcn mySimTimeProviderFunction
Definition: communicationManager.h:272
DtNetworkInterfaceManager * networkInterfaceManager()
Definition: communicationManager.h:70
int myInFrame
Definition: communicationManager.h:273
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:237
#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:261
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:26
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:71
DtExerciseClock * myExerciseClock
Backup for simulation time (absRealTime) if no network manager.
Definition: communicationManager.h:267

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)