VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
simObjectNetInterface.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
14 
15 #pragma once
16 
21 #include <tbb/spin_rw_mutex.h>
22 #include <tbb/spin_mutex.h>
23 #include <tbb/mutex.h>
24 #include <vl/publisherContainer.h>
25 #include <boost/signals2.hpp>
26 
27 #include <vlpi/entityIdentifier.h>
28 
29 #if DtHLA
30 #include <vl/rtiCompatibility.h>
31 #endif
32 
33 class DtObjectPublisher;
34 
35 class DtStateRepository;
36 
37 namespace makVrf
38 {
39  class DtNonVrfUUIDResolver;
40  class DtVrlinkNetworkInterface;
41  class DtSimObjectNetInterfaceFactory;
42 
51  {
52  private:
55 
58 
60  const DtSimObjectNetInterface & operator=(const DtSimObjectNetInterface &
61  orig);
62 
63  public:
64 
66  {
67  public:
69  : CallbackInterface()
70  , myNetInterface(sd)
71  {
72  myNetworkInterfaceDeletedConnection = myNetInterface->signal_networkInterfaceDeleted.connect(
73  boost::bind(&ParallelContainer::networkInterfaceDeleted, this));
74  }
75 
76  virtual ~ParallelContainer() override {
77  myNetworkInterfaceDeletedConnection.disconnect();
78  }
79 
80  virtual void run() override;
81  virtual void networkInterfaceDeleted();
82 
84  tbb::spin_mutex myTickMutex;
85  boost::signals2::connection myNetworkInterfaceDeletedConnection;
86  };
87 
89  {
90  if (!myParallelContainer)
91  {
92  myParallelContainer = DtVrfCallbackQueue::CallbackInterface::Ptr(new ParallelContainer(this));
93  }
94 
95  return myParallelContainer;
96  }
97 
102  DtSimObjectNetInterface(DtStateData * simObject, DtVrlinkNetworkInterface*, bool publishObject = true);
103 
105  virtual ~DtSimObjectNetInterface();
106 
109  virtual bool init(const DtEntityIdentifier& id = DtEntityIdentifier()) { return true; }
110 
111  virtual bool init(
112 #if DtHLA
113  DtHlaObjectWithStateRep* obj,
114  DtHlaObjectWithStateRep* extendedAttributes = nullptr
115 #else
117 #endif
118  ) { return true; }
119 
125  virtual void tick();
126 
130  virtual void onTick() = 0;
131 
135  virtual bool isUnit() const = 0;
136  virtual bool isEntity() const = 0;
137  virtual bool isEnvironmental() const = 0;
138 
140  virtual bool wantsToCreatePublisher() const = 0;
141 
142 #if DtHLA_1516_EVOLVED
143  virtual bool checkForNameReservation();
146 #endif
147 
151  virtual bool isLocal() const = 0;
152 
155  virtual DtString type() const = 0;
156 
159  virtual int maxNameLength() const;
160 
162  virtual void toBeRemoved();
163 
164  virtual bool publishObject() const
165  {
166  return false;
167  }
168 
169  #if DtHLA
170  virtual RTI::ObjectClassHandle objectClassHandle() const = 0;
172  #endif
173 
180  static void setNonVrfObjectsUUIDScheme(const DtString&);
181  static DtString nonVrfObjectsUUIDScheme();
183 
187  static void setNonVrfUUIDResolver(DtNonVrfUUIDResolver*);
188  static DtNonVrfUUIDResolver* nonVrfUUIDResolver();
189 
192  static void addSimObjectNetInterfaceCreatorFcn(const DtString & type,
194 
195  static void setFactory(DtSimObjectNetInterfaceFactory * factory);
196  static DtSimObjectNetInterfaceFactory * factory();
197 
199  static DtSimObjectNetInterface * createNetInterface(
200  const DtString & type, DtStateData* simObject, DtVrlinkNetworkInterface*, bool publishObject = true);
201 
205  static int maxNameLengthForInterfaceType(const DtString& interfaceTypeString);
206 
209  virtual void parallelTick();
210  virtual void forceUpdate();
212 
213  boost::signals2::signal<void ()> signal_networkInterfaceDeleted;
214 
215 #if DtDIS
216  virtual void sendFinalPduOnDestruction(bool);
218 #endif
219 
220  protected:
221  virtual void stateDataDestroyed();
222 
223  bool runFullyThreaded() const;
224 
225  const DtStateData* vrfObject() const
226  {
227  return mySimObject;
228  }
229 
231  {
232  return mySimObject;
233  }
234 
236  friend class DtPrintObjectStatusCommand;
237  friend class DtPrintOrgViewCommand;
238 
241  virtual const DtStateRepository * networkState() const;
242 
243  public:
244  static tbb::spin_rw_mutex thePublisherCreationMutex;
245  static tbb::spin_rw_mutex thePublisherTickMutex;
246 
247  bool isValid() const { return (mySimObject != nullptr); };
248 
249  virtual std::vector<DtGlobalObjectDesignator> associatedGlobalObjectDesignators() const;
250 
251  protected:
252 
256 
259 
261 
263  boost::signals2::connection mySimObjectRemovalConnection;
264  tbb::mutex myDeleteGuardMutex;
266  };
267 }
static DtNonVrfUUIDResolver * theNonVrfUUIDResolver
Definition: simObjectNetInterface.h:258
virtual bool init(const DtEntityIdentifier &id=DtEntityIdentifier())
Derived classes that need to perform virtual construction my override this function as desired...
Definition: simObjectNetInterface.h:109
tbb::spin_mutex myTickMutex
Definition: simObjectNetInterface.h:84
const DtStateData * vrfObject() const
Definition: simObjectNetInterface.h:225
DtStateData * nextFrameVrfObject()
Definition: simObjectNetInterface.h:230
Definition: netInterfaceParallelLock.h:16
DtSimObjectNetInterface * myNetInterface
Definition: simObjectNetInterface.h:83
virtual bool init(DtHlaObjectWithStateRep *obj, DtHlaObjectWithStateRep *extendedAttributes=nullptr)
Definition: simObjectNetInterface.h:111
bool isValid() const
Definition: simObjectNetInterface.h:247
tbb::mutex myDeleteGuardMutex
Definition: simObjectNetInterface.h:264
ParallelContainer(DtSimObjectNetInterface *sd)
Definition: simObjectNetInterface.h:68
std::shared_ptr< CallbackInterface > Ptr
Definition: vrfCallbackQueue.h:61
Definition: simObjectNetInterface.h:65
DtVrfCallbackQueue::CallbackInterface::Ptr myParallelContainer
Definition: simObjectNetInterface.h:265
DtVrlinkNetworkInterface * myObjectManager
Definition: simObjectNetInterface.h:254
DtVrfCallbackQueue::CallbackInterface::Ptr parallelContainer()
Definition: simObjectNetInterface.h:88
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
static DtSimObjectNetInterfaceFactory * theFactory
Definition: simObjectNetInterface.h:257
API for writing callbacks.
Definition: vrfCallbackQueue.h:55
boost::signals2::connection mySimObjectRemovalConnection
Definition: simObjectNetInterface.h:263
Definition: nonVrfUUIDResolver.h:24
bool myNeedsNetworkSetup
Definition: simObjectNetInterface.h:260
Class Description: DtSimObjectNetInterface.
Definition: simObjectNetInterface.h:50
static tbb::spin_rw_mutex thePublisherTickMutex
Definition: simObjectNetInterface.h:245
static tbb::spin_rw_mutex thePublisherCreationMutex
Definition: simObjectNetInterface.h:244
virtual ~ParallelContainer() override
Definition: simObjectNetInterface.h:76
boost::signals2::connection myNetworkInterfaceDeletedConnection
Definition: simObjectNetInterface.h:85
DtStateData * mySimObject
Definition: simObjectNetInterface.h:253
virtual bool publishObject() const
Definition: simObjectNetInterface.h:164
DtStateRepository * myNetworkState
Definition: simObjectNetInterface.h:255
class DtSimObjectNetInterfaceFactory:
Definition: simObjectNetInterfaceFactory.h:26
DtSimObjectNetInterface *(* DtSimObjectNetIfaceCreatorFcn)(DtStateData *simObject, DtVrlinkNetworkInterface *mgr, bool publishObject)
Definition: simObjectNetInterfaceFactory.h:19
DtNetInterfaceParallelLock myLock
Definition: simObjectNetInterface.h:262
boost::signals2::signal< void()> signal_networkInterfaceDeleted
Definition: simObjectNetInterface.h:213

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)