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 <boost/function.hpp>
12 #include <boost/signals2.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 
28 
30  virtual ~DtRemoteEnvironmentManager();
31 
32  virtual void setReflectedLists(const DtReflectedObjectLists& lists);
33  virtual void cleanup();
34  virtual void advanceFrame(DtVrfCallbackQueue* queue) override;
35  virtual void init(DtStateDataManager* sdm, DtExerciseConn* connection, const DtReflectedObjectLists& reflectedLists) override;
36 
37  protected:
38  virtual void stateDataToBeRemoved(const DtStateData*);
39  boost::signals2::scoped_connection myStateDataRemovalConnection;
40 
41  protected:
42  virtual void createReflectedLandSurfaceList(DtExerciseConn* exConn);
43  virtual void createReflectedSubsurfaceLayerList(DtExerciseConn* exConn);
44  virtual void createReflectedWaterSurfaceList(DtExerciseConn* exConn);
45  virtual void createReflectedTroposphereLayerList(DtExerciseConn* exConn);
46  virtual void createReflectedTimeAndDateList(DtExerciseConn* exConn);
47  virtual void createReflectedWindCorridorList(DtExerciseConn* exConn);
48 
49  public:
50  static void TimeAndDateAdditionCallback(DtReflectedTimeAndDate*, void*);
51  virtual void processTimeAndDateAddition(DtReflectedTimeAndDate*);
52 
53  static void TimeAndDateRemovalCallback(DtReflectedTimeAndDate*, void*);
54  virtual void processTimeAndDateRemoval(DtReflectedTimeAndDate*);
55 
56  static void WindCorridorAdditionCallback(DtReflectedWindCorridor*, void*);
57  virtual void processWindCorridorAddition(DtReflectedWindCorridor*);
58 
59  static void WindCorridorRemovalCallback(DtReflectedWindCorridor*, void*);
60  virtual void processWindCorridorRemoval(DtReflectedWindCorridor*);
61 
62  template<typename T, typename U>
63  static void environmentConditionAddedCallback(T* object, void* usr);
64 
65  template<typename T, typename U>
66  static void environmentConditionRemovedCallback(T* object, void* usr);
67 
68  protected:
69  template<typename T, typename U>
70  bool initializeRemoteEnvironmentCondition(DtStateData* sd, T* entity);
71 
72  virtual bool initializeRemoteWindCorridor(DtStateData* sd, DtReflectedWindCorridor*);
73 
74  template<typename T, typename U>
75  void processEnvironmentConditionAdded(T* object);
76  template <typename T>
77  static bool hasTypeInMap(const DtRemoteObjectManager::InterfacesByReflectedObjectMap& map);
78 
79  template<typename T>
80  static DtBoolean reflectedEnvironmentConditionDiscoveryCriteriaCallback(DtReflectedObject* object, void* userData);
81 
82  virtual DtBoolean processReflectedMetocRootDiscoveryCriteria(DtReflectedObject*);
83  virtual DtBoolean processReflectedEnvironmentConditionDiscoveryCriteria(DtReflectedObject*);
84 
85  virtual void processEnvironmentConditionRemoved(DtReflectedObject* object, HasTypeFunc func);
86 
87  static DtEntityType geoLocationTypeToEntityIdentifier(DtGeoLocationTypeEnum32 type);
88  virtual DtUUID uuidFor(DtStateRepository* sr, bool& hasVrfUUID) const;
89 
90  protected:
91  virtual bool setupEntityIdentifierForMetocObject(DtStateData*, DtEntityIdentifier);
92 
94  {
95  virtual void process(DtStateData*) = 0;
96  };
97 
99  {
100  WaitingForDateTimeDiscovery(DtRemoteEnvironmentManager* mgr, DtReflectedTimeAndDate* object) : myRemoteObjectManager(mgr), myReflectedObject(object) {};
101 
102  virtual void process(DtStateData* stateData) override
103  {
104  myRemoteObjectManager->processTimeAndDateAddition(myReflectedObject);
105  }
106 
108  DtReflectedTimeAndDate* myReflectedObject;
109  };
110 
111  template <typename T, typename U>
113  {
114  WaitingForDiscoveryStruct(DtRemoteEnvironmentManager* mgr, T* object) : myRemoteObjectManager(mgr), myReflectedObject(object) {};
115 
116  virtual void process(DtStateData* stateData) override
117  {
118  myRemoteObjectManager->initializeRemoteEnvironmentCondition<T, U>(stateData, myReflectedObject);
119  }
120 
123  };
124 
125  typedef std::map<DtReflectedObject*, std::shared_ptr<WaitingForDiscoveryInterface> > ObjectWaitingForDiscoveryMap;
126  typedef std::map<DtUUID, ObjectWaitingForDiscoveryMap> WaitingForRemoteDiscovery;
128 
129  DtReflectedTimeAndDate* myReflectedTimeAndDate = nullptr;
130  DtStateData* myGlobalEnvironment = nullptr;
132  };
133 }
UUID is a unique ID wrapper class.
Definition: uuid.h:59
RemoteInterfacesMapById myRemoteInterfacesSetById
Definition: remoteEnvironmentManager.h:131
std::map< DtUUID, ObjectWaitingForDiscoveryMap > WaitingForRemoteDiscovery
Definition: remoteEnvironmentManager.h:126
WaitingForRemoteDiscovery myWaitingForRemoteDiscovery
Definition: remoteEnvironmentManager.h:127
virtual void process(DtStateData *stateData) override
Definition: remoteEnvironmentManager.h:116
Definition: remoteEnvironmentManager.h:21
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
std::map< DtReflectedObject *, std::shared_ptr< WaitingForDiscoveryInterface > > ObjectWaitingForDiscoveryMap
Definition: remoteEnvironmentManager.h:125
DtRemoteEnvironmentManager * myRemoteObjectManager
Definition: remoteEnvironmentManager.h:107
WaitingForDiscoveryStruct(DtRemoteEnvironmentManager *mgr, T *object)
Definition: remoteEnvironmentManager.h:114
class DtRemoteObjectManager:
Definition: remoteObjectManager.h:28
DtReflectedTimeAndDate * myReflectedObject
Definition: remoteEnvironmentManager.h:108
Definition: remoteEnvironmentManager.h:112
std::map< makVrf::SimStateID, InterfacesByReflectedObjectMap > RemoteInterfacesMapById
Definition: remoteObjectManager.h:76
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
T * myReflectedObject
Definition: remoteEnvironmentManager.h:122
virtual void process(DtStateData *stateData) override
Definition: remoteEnvironmentManager.h:102
WaitingForDateTimeDiscovery(DtRemoteEnvironmentManager *mgr, DtReflectedTimeAndDate *object)
Definition: remoteEnvironmentManager.h:100
boost::signals2::scoped_connection myStateDataRemovalConnection
Definition: remoteEnvironmentManager.h:39
DtRemoteEnvironmentManager * myRemoteObjectManager
Definition: remoteEnvironmentManager.h:121
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
std::map< DtReflectedObject *, DtSimObjectNetInterface * > InterfacesByReflectedObjectMap
Definition: remoteObjectManager.h:75
Definition: reflectedObjectLists.h:148
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 Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)