VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
orbatManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2017 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
9 
12 #include "vrfobjcore/simObject.h"
13 #include <vector>
15 
16 #include <tbb/spin_mutex.h>
17 #include <mutex>
18 #include <boost/signals2.hpp>
19 
20 class DtSimMessage;
21 class DtOrbatManagerNode;
22 class DtlInputStream;
23 class DtIsOrbatEnabledCommand;
24 class DtSetIsOrbatEnabledCommand;
26 class DtLocalObject;
28 
31 {
32 private:
36  DtOrbatManager(const DtOrbatManager& orig);
38  DtOrbatManager& operator=(const DtOrbatManager& orig);
39 
40 public:
42  {
43  public:
45  : myLock(node ? new std::lock_guard<std::recursive_mutex>(node->mutex()) : 0)
46  , myNode(node)
47  {
48  }
49 
51  : myLock(orig.myLock)
52  , myNode(orig.myNode)
53  {
54  }
55 
56  operator DtOrbatManagerNode*() { return myNode; };
57  operator const DtOrbatManagerNode*() const { return myNode; };
58 
59  DtOrbatManagerNode* operator->() { return myNode; };
60  const DtOrbatManagerNode* operator->() const { return myNode; };
61 
62  bool isValid() const { return (myLock.get() != 0); };
63  void release() { myLock.reset(); };
64 
65  protected:
66  std::shared_ptr<std::lock_guard<std::recursive_mutex>> myLock;
68  };
69 
70  typedef boost::unordered_map<DtUUID, DtOrbatManagerNode*> UUIDMap;
71 
73  {
75  {
76  subordinateChangedCallback.disconnect();
77  }
78 
80  boost::signals2::connection subordinateChangedCallback;
81  };
82 
83  typedef boost::unordered_map<DtUUID, OrbatInformation> OrbatMap;
84 
88  virtual ~DtOrbatManager();
89 
90  virtual bool init();
91 
93  virtual void closingScenario();
94 
96  virtual void setOrbatEnabled(bool);
97  virtual bool orbatEnabled() const;
98 
101  virtual DtOrbatDataList addOrUpdateObjectsInOrbat(const DtOrbatDataList&, int flags = DtIfOrbatOperation::IterateChildrenOnAdd,
102  int operation = DtIfOrbatOperation::Update, bool* success = nullptr);
103 
106  virtual DtOrbatDataList removeObjectsFromOrbat(const DtOrbatDataList&);
107 
110  virtual DtOrbatDataList removeObjectFromOrbat(const DtRwOrbatData&, bool onlyPublished = false);
111 
113  virtual void sendOrbatList(int requestId = 0);
114 
116  virtual void clearOrbat(bool send = false);
117 
119  virtual void mergeFrom(const DtOrbatManager& fromOm, bool sendNewList = false);
120 
122  virtual bool loadOrbat(const DtFilename&, bool send = false, bool clearOnLoad = true);
123  virtual bool loadOrbatFromZipFile(const DtFilename& scenarioZipFile, const std::string&, bool send = false, bool clearOnLoad = true);
124 
126  virtual bool loadOrbat(const std::string& str, bool send = false, bool clearOnLoad = true);
127 
129  virtual bool writeOrbat(const DtFilename&);
130 
132  virtual bool writeOrbat(std::string&);
133 
135  virtual LockedOrbatManagerNode addNode(const DtRwOrbatData&);
136 
137  virtual bool hasNode(const DtUUID&) const;
138  virtual LockedOrbatManagerNode lookupNodeByUUID(const DtUUID& id) const;
139 
142  virtual LockedOrbatManagerNode lookupNodeByMarkingText(const DtString&) const;
143 
144  const OrbatMap& nodes() const { return myOrbatNodes; };
145 
147  virtual DtOrbatDataList modifyOrbatObjects(const DtOrbatDataList&, int operation = DtIfOrbatOperation::Update);
148 
151  virtual DtOrbatDataList modifyOrbatObject(const DtRwOrbatData&, int operation = DtIfOrbatOperation::Update);
152 
158  virtual const DtLocalObject* createOrReturnSuperiorOf(const DtUUID&, const DtVector& locationOfSuperior = DtVector::zero(),
159  int operation = DtIfOrbatOperation::Update, bool forceCreate = false);
160 
162  virtual void createSubordinatesOfObject(const DtUUID&);
163 
165  virtual void tick();
166 
169  virtual void makeAllSimulationObjectsPartOfOrbat();
170 
171 protected:
173  virtual DtString trimNameForLength(int maxLength, const DtString&) const;
174 
176  virtual DtOrbatManagerNode* createOrbatManagerNode() const;
177 
179  virtual void processOrbatOperation(DtSimMessage* msg);
180  static void orbatOperationCallback(DtSimMessage* msg, void* usr);
181 
183  virtual void processOrbatResponse(DtSimMessage* msg);
184  static void orbatResponseCallback(DtSimMessage* msg, void* usr);
185 
188  virtual DtOrbatDataList createOrbatNodes(const DtRwOrbatData&, int flags = DtIfOrbatOperation::IterateChildrenOnAdd, bool* success = nullptr);
189 
190  virtual bool loadOrbat(DtlInputStream*, bool send);
191 
193  virtual DtString generateMarkingText(const DtEntityType&);
194 
195  static void vrfObjectAdded(const DtLocalObject*, void* usr);
196 
197  virtual void processSimObjectAdded(DtSimObjectReference ref, int flags = 0);
198  virtual void processSimObjectRemoved(DtSimObjectReference ref);
199  virtual bool objectShouldBeSavedToSimulationObjectGroup(const DtSimObject* obj) const;
200 
201  virtual void processSuperiorChanged(const DtSimObject*, const DtUUID& oldSuperior, const DtUUID& newSuperior);
202  virtual void processAddSuperior(const DtSimObject*, const DtUUID& superior);
203  virtual void processRemoveSuperior(const DtSimObject*, const DtUUID& superior);
204 
206  virtual void reorderOrbatNodesExcluding(LockedOrbatManagerNode);
207 
209  virtual void setOrbatNodeOrder(LockedOrbatManagerNode, int order, bool inserting = false);
210  virtual void insertOrbatNodeInOrder(LockedOrbatManagerNode, int order);
211 
212  virtual LockedOrbatManagerNode rootNodeForForce(int);
213 
214  virtual void processObjectDataChanged(const DtLocalObject*, int flag);
215 
217  virtual DtOrbatDataList setForceToSubordinatesOf(int force, const LockedOrbatManagerNode&) const;
218 
219  static void orbatNodeRemovedCallback(const DtOrgNodeCallbackInfo&, void*);
220  virtual void processOrbatNodeRemoved(const DtOrgNodeCallbackInfo&);
221 
222  virtual void processUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
223 
224 protected:
226 
227  typedef std::vector<DtOrbatManagerNode*> OrbatNodeList;
228  typedef std::map<DtUUID, OrbatNodeList> UnparentedOrbatNodes;
229 
230  mutable std::recursive_mutex myOrbatNodesMutex;
233 
236 
238  std::map<std::string, int> myEntityTypeCounts;
239 
242 
243  tbb::spin_rw_mutex myRootNodeByForceMutex;
244  typedef std::map<int, DtOrbatManagerNode*> RootNodesByForce;
246 
247  DtIsOrbatEnabledCommand* myIsOrbatEnabledCommand;
248  DtSetIsOrbatEnabledCommand* mySetIsOrbatEnabledCommand;
249 
250  boost::signals2::scoped_connection mySimObjectAddedConnection;
251  boost::signals2::scoped_connection mySimObjectDeletedConnection;
252  boost::signals2::scoped_connection myUUIDChangedConnection;
253 
254  tbb::spin_mutex myModifiedNodesMutex;
255  std::set<DtUUID> myAddToOrbatOnNextAdd;
256 };
UUID is a unique ID wrapper class.
Definition: uuid.h:59
boost::signals2::scoped_connection mySimObjectDeletedConnection
Definition: orbatManager.h:251
class DtLocalObjectManager:
Definition: localObjectManager.h:157
std::vector< DtRwOrbatData > DtOrbatDataList
Definition: rwOrbatData.h:102
Definition: ifOrbatOperation.h:35
UnparentedOrbatNodes myUnparentedOrbatNodes
Definition: orbatManager.h:231
boost::unordered_map< DtUUID, OrbatInformation > OrbatMap
Definition: orbatManager.h:83
std::recursive_mutex myOrbatNodesMutex
Definition: orbatManager.h:230
tbb::spin_mutex myModifiedNodesMutex
Definition: orbatManager.h:254
std::map< int, DtOrbatManagerNode * > RootNodesByForce
Definition: orbatManager.h:244
LockedOrbatManagerNode(DtOrbatManagerNode *node)
Definition: orbatManager.h:44
boost::signals2::scoped_connection myUUIDChangedConnection
Definition: orbatManager.h:252
This class handles all requests as they pertain to viewing or modifying the ORBAT.
Definition: orbatManager.h:30
std::map< std::string, int > myEntityTypeCounts
Number of items used by entity type so unique name can be generated when adding nodes to the orbat...
Definition: orbatManager.h:238
std::map< DtUUID, OrbatNodeList > UnparentedOrbatNodes
Definition: orbatManager.h:228
boost::unordered_map< DtUUID, DtOrbatManagerNode * > UUIDMap
Definition: orbatManager.h:70
LockedOrbatManagerNode(const LockedOrbatManagerNode &orig)
Definition: orbatManager.h:50
UUIDMap myModifiedNodes
Map of modified nodes to be sent off during a tick.
Definition: orbatManager.h:241
DtSetIsOrbatEnabledCommand * mySetIsOrbatEnabledCommand
Definition: orbatManager.h:248
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
Definition: rwOrbatData.h:20
File: simMsg.h.
Definition: simMessage.h:35
virtual ~OrbatInformation()
Definition: orbatManager.h:74
void release()
Definition: orbatManager.h:63
std::vector< DtOrbatManagerNode * > OrbatNodeList
Definition: orbatManager.h:227
DtOrbatManagerNode * operator->()
Definition: orbatManager.h:59
OrbatMap myOrbatNodes
Definition: orbatManager.h:232
Definition: ifOrbatOperation.h:25
DtLocalObjectManager * myObjectManager
Definition: orbatManager.h:235
bool myIsOrbatEnabled
Definition: orbatManager.h:225
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:80
const DtOrbatManagerNode * operator->() const
Definition: orbatManager.h:60
Definition: orbatManager.h:41
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtSimulationServices * mySimulationServices
Definition: orbatManager.h:234
tbb::spin_rw_mutex myRootNodeByForceMutex
Definition: orbatManager.h:243
bool isValid() const
Definition: orbatManager.h:62
boost::signals2::connection subordinateChangedCallback
Definition: orbatManager.h:80
Contains the declaration of DtOrbatManagerNode, the class that represents a single node the hierarchy...
Definition: orbatManagerNode.h:18
Contains the declaration of DtOrganizationManagerNode, the class that represents a single node the hi...
Definition: organizationManagerNode.h:29
std::set< DtUUID > myAddToOrbatOnNextAdd
Definition: orbatManager.h:255
DtOrbatManagerNode * myNode
Definition: orbatManager.h:67
const OrbatMap & nodes() const
Definition: orbatManager.h:144
DtIsOrbatEnabledCommand * myIsOrbatEnabledCommand
Definition: orbatManager.h:247
boost::signals2::scoped_connection mySimObjectAddedConnection
Definition: orbatManager.h:250
DtOrbatManagerNode * node
Definition: orbatManager.h:79
A locally simulated VRF object.
Definition: localObject.h:98
RootNodesByForce myRootNodesByForce
Definition: orbatManager.h:245
Definition: orbatManager.h:72

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)