VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
remoteEnvironmentManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2019 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
11 #include <vrvUtil/signalslib.h>
12 #include <boost/function.hpp>
13 
14 class DtReflectedTimeAndDate;
15 
16 namespace makVrf
17 {
18  class DtRemoteObjectManager;
19  class DtStateData;
20 
22  {
23  public:
24  typedef std::function<bool(const InterfacesByReflectedObjectMap&)> HasTypeFunc;
25  typedef std::map< DtUUID, InterfacesByReflectedObjectMap > RemoteInterfacesMapById;
26 
29 
31  virtual ~DtRemoteEnvironmentManager() override;
32 
33  virtual void setReflectedLists(const DtReflectedObjectLists& lists) override;
34  virtual void cleanup() override;
35  virtual void advanceFrame(DtVrfCallbackQueue* queue) override;
36  virtual void init(DtStateDataManager* sdm, DtExerciseConn* connection, const DtReflectedObjectLists& reflectedLists) override;
37 
38  protected:
39  virtual void stateDataToBeRemoved(const DtStateData*);
40  boost::signals2::scoped_connection myStateDataRemovalConnection;
41 
42  protected:
43  virtual void createReflectedLandSurfaceList(DtExerciseConn* exConn);
44  virtual void createReflectedSubsurfaceLayerList(DtExerciseConn* exConn);
45  virtual void createReflectedWaterSurfaceList(DtExerciseConn* exConn);
46  virtual void createReflectedTroposphereLayerList(DtExerciseConn* exConn);
47  virtual void createReflectedTimeAndDateList(DtExerciseConn* exConn);
48  virtual void createReflectedWindCorridorList(DtExerciseConn* exConn);
49  virtual void createReflectedTurbulenceLayerList(DtExerciseConn* exConn);
50 
51  public:
52  virtual void setPreferredDateAndTimeRepository(DtTimeAndDateStateRepository*) override;
53 
54  static void TimeAndDateAdditionCallback(DtReflectedTimeAndDate*, void*);
55  virtual void processTimeAndDateAddition(DtReflectedTimeAndDate*);
56 
57  static void TimeAndDateRemovalCallback(DtReflectedTimeAndDate*, void*);
58  virtual void processTimeAndDateRemoval(DtReflectedTimeAndDate*);
59 
60  static void WindCorridorAdditionCallback(DtReflectedWindCorridor*, void*);
61  virtual void processWindCorridorAddition(DtReflectedWindCorridor*);
62 
63  static void WindCorridorRemovalCallback(DtReflectedWindCorridor*, void*);
64  virtual void processWindCorridorRemoval(DtReflectedWindCorridor*);
65 
66  static void TurbulenceLayerAdditionCallback(DtReflectedTurbulenceLayer*, void*);
67  virtual void processTurbulenceLayerAddition(DtReflectedTurbulenceLayer*);
68 
69  static void TurbulenceLayerRemovalCallback(DtReflectedTurbulenceLayer*, void*);
70  virtual void processTurbulenceLayerRemoval(DtReflectedTurbulenceLayer*);
71 
72  template<typename T, typename U>
73  static void environmentConditionAddedCallback(T* object, void* usr);
74 
75  template<typename T, typename U>
76  static void environmentConditionRemovedCallback(T* object, void* usr);
77 
78  protected:
79  template<typename T, typename U>
80  bool initializeRemoteEnvironmentCondition(DtStateData* sd, T* entity);
81 
82  virtual bool initializeRemoteWindCorridor(DtStateData* sd, DtReflectedWindCorridor*);
83 
84  virtual bool initializeRemoteTurbulenceLayer(DtStateData* sd, DtReflectedTurbulenceLayer*);
85 
86  template<typename T, typename U>
87  void processEnvironmentConditionAdded(T* object);
88  template <typename T>
89  static bool hasTypeInMap(const DtRemoteObjectManager::InterfacesByReflectedObjectMap& map);
90 
91  template<typename T>
92  static DtBoolean reflectedEnvironmentConditionDiscoveryCriteriaCallback(DtReflectedObject* object, void* userData);
93 
94  virtual DtBoolean processReflectedMetocRootDiscoveryCriteria(DtReflectedObject*);
95  virtual DtBoolean processReflectedEnvironmentConditionDiscoveryCriteria(DtReflectedObject*);
96 
97  virtual void processEnvironmentConditionRemoved(DtReflectedObject* object, HasTypeFunc func);
98 
99  static DtEntityType geoLocationTypeToEntityIdentifier(DtGeoLocationTypeEnum32 type);
100  virtual DtUUID uuidFor(DtStateRepository* sr, bool& hasVrfUUID) const;
101 
102  protected:
103  virtual bool setupEntityIdentifierForMetocObject(DtStateData*, DtEntityIdentifier);
104 
106  {
107  virtual void process(DtStateData*) = 0;
108  };
109 
111  {
112  WaitingForDateTimeDiscovery(DtRemoteEnvironmentManager* mgr, DtReflectedTimeAndDate* object) : myRemoteObjectManager(mgr), myReflectedObject(object) {};
113 
114  virtual void process(DtStateData* stateData) override
115  {
116  myRemoteObjectManager->processTimeAndDateAddition(myReflectedObject);
117  }
118 
120  DtReflectedTimeAndDate* myReflectedObject;
121  };
122 
123  template <typename T, typename U>
125  {
126  WaitingForDiscoveryStruct(DtRemoteEnvironmentManager* mgr, T* object) : myRemoteObjectManager(mgr), myReflectedObject(object) {};
127 
128  virtual void process(DtStateData* stateData) override
129  {
130  myRemoteObjectManager->initializeRemoteEnvironmentCondition<T, U>(stateData, myReflectedObject);
131  }
132 
135  };
136 
137  typedef std::map<DtReflectedObject*, std::shared_ptr<WaitingForDiscoveryInterface> > ObjectWaitingForDiscoveryMap;
138  typedef std::map<DtUUID, ObjectWaitingForDiscoveryMap> WaitingForRemoteDiscovery;
140 
141  DtReflectedTimeAndDate* myReflectedTimeAndDate = nullptr;
142  DtStateData* myGlobalEnvironment = nullptr;
144  bool myWarnedForMultipleEnvironments = false;
145  DtReflectedLandSurface* myReflectedLandSurface = nullptr;
146  };
147 }
UUID is a unique ID wrapper class.
Definition: uuid.h:59
RemoteInterfacesMapById myRemoteInterfacesSetById
Definition: remoteEnvironmentManager.h:143
std::map< DtUUID, ObjectWaitingForDiscoveryMap > WaitingForRemoteDiscovery
Definition: remoteEnvironmentManager.h:138
WaitingForRemoteDiscovery myWaitingForRemoteDiscovery
Definition: remoteEnvironmentManager.h:139
virtual void process(DtStateData *stateData) override
Definition: remoteEnvironmentManager.h:128
Definition: remoteEnvironmentManager.h:21
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:29
std::map< DtReflectedObject *, std::shared_ptr< WaitingForDiscoveryInterface > > ObjectWaitingForDiscoveryMap
Definition: remoteEnvironmentManager.h:137
DtRemoteEnvironmentManager * myRemoteObjectManager
Definition: remoteEnvironmentManager.h:119
WaitingForDiscoveryStruct(DtRemoteEnvironmentManager *mgr, T *object)
Definition: remoteEnvironmentManager.h:126
class DtRemoteObjectManager:
Definition: remoteObjectManager.h:28
DtReflectedTimeAndDate * myReflectedObject
Definition: remoteEnvironmentManager.h:120
Definition: remoteEnvironmentManager.h:124
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
T * myReflectedObject
Definition: remoteEnvironmentManager.h:134
virtual void process(DtStateData *stateData) override
Definition: remoteEnvironmentManager.h:114
WaitingForDateTimeDiscovery(DtRemoteEnvironmentManager *mgr, DtReflectedTimeAndDate *object)
Definition: remoteEnvironmentManager.h:112
Definition: remoteEnvironmentManager.h:110
boost::signals2::scoped_connection myStateDataRemovalConnection
Definition: remoteEnvironmentManager.h:40
DtRemoteEnvironmentManager * myRemoteObjectManager
Definition: remoteEnvironmentManager.h:133
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
std::map< DtReflectedObject *, DtSimObjectNetInterface * > InterfacesByReflectedObjectMap
Definition: remoteObjectManager.h:77
std::map< DtUUID, InterfacesByReflectedObjectMap > RemoteInterfacesMapById
Definition: remoteEnvironmentManager.h:25
Definition: reflectedObjectLists.h:166
std::function< bool(const InterfacesByReflectedObjectMap &)> HasTypeFunc
Definition: remoteEnvironmentManager.h:24
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73

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)