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 
77  {
78  myNetworkInterfaceDeletedConnection.disconnect();
79  }
80 
81  virtual void run() override;
82  virtual void networkInterfaceDeleted();
83 
85  tbb::spin_mutex myTickMutex;
86  boost::signals2::connection myNetworkInterfaceDeletedConnection;
87  };
88 
90  {
91  if (!myParallelContainer)
92  {
93  myParallelContainer = DtVrfCallbackQueue::CallbackInterface::Ptr(new ParallelContainer(this));
94  }
95 
96  return myParallelContainer;
97  }
98 
103  DtSimObjectNetInterface(DtStateData * simObject, DtVrlinkNetworkInterface*, bool publishObject = true);
104 
106  virtual ~DtSimObjectNetInterface();
107 
110  virtual bool init(const DtEntityIdentifier& id = DtEntityIdentifier()) { return true; }
111 
117  virtual void tick();
118 
122  virtual void onTick() = 0;
123 
127  virtual bool isUnit() const = 0;
128  virtual bool isEntity() const = 0;
129  virtual bool isEnvironmental() const = 0;
130 
132  virtual bool wantsToCreatePublisher() const = 0;
133 
134 #if DtHLA_1516_EVOLVED
135  virtual bool checkForNameReservation();
138 #endif
139 
143  virtual bool isLocal() const = 0;
144 
147  virtual DtString type() const = 0;
148 
151  virtual int maxNameLength() const;
152 
154  virtual void toBeRemoved();
155 
156  virtual bool publishObject() const
157  {
158  return false;
159  }
160 
161  #if DtHLA
162  virtual RTI::ObjectClassHandle objectClassHandle() const = 0;
164  #endif
165 
172  static void setNonVrfObjectsUUIDScheme(const DtString&);
173  static DtString nonVrfObjectsUUIDScheme();
175 
179  static void setNonVrfUUIDResolver(DtNonVrfUUIDResolver*);
180  static DtNonVrfUUIDResolver* nonVrfUUIDResolver();
181 
184  static void addSimObjectNetInterfaceCreatorFcn(const DtString & type,
186 
187  static void setFactory(DtSimObjectNetInterfaceFactory * factory);
188  static DtSimObjectNetInterfaceFactory * factory();
189 
191  static DtSimObjectNetInterface * createNetInterface(
192  const DtString & type, DtStateData* simObject, DtVrlinkNetworkInterface*, bool publishObject = true);
193 
197  static int maxNameLengthForInterfaceType(const DtString& interfaceTypeString);
198 
201  virtual void parallelTick();
202  virtual void forceUpdate();
204 
205  boost::signals2::signal<void ()> signal_networkInterfaceDeleted;
206 
207 #if DtDIS
208  virtual void sendFinalPduOnDestruction(bool);
210 #endif
211 
212  protected:
213  virtual void stateDataDestroyed();
214 
215  bool runFullyThreaded() const;
216 
217  const DtStateData* vrfObject() const
218  {
219  return mySimObject;
220  }
221 
223  {
224  return mySimObject;
225  }
226 
228  friend class DtPrintObjectStatusCommand;
229  friend class DtPrintOrgViewCommand;
230 
233  virtual const DtStateRepository * networkState() const;
234 
235  public:
236  static tbb::spin_rw_mutex thePublisherCreationMutex;
237  static tbb::spin_rw_mutex thePublisherTickMutex;
238 
239  bool isValid() const { return (mySimObject != nullptr); };
240 
241  protected:
242 
243  DtStateData* mySimObject;
246 
249 
251 
253  boost::signals2::connection mySimObjectRemovalConnection;
254  tbb::mutex myDeleteGuardMutex;
256  };
257 }
static DtNonVrfUUIDResolver * theNonVrfUUIDResolver
Definition: simObjectNetInterface.h:248
virtual bool init(const DtEntityIdentifier &id=DtEntityIdentifier())
Derived classes that need to perform virtual construction my override this function as desired...
Definition: simObjectNetInterface.h:110
tbb::spin_mutex myTickMutex
Definition: simObjectNetInterface.h:85
const DtStateData * vrfObject() const
Definition: simObjectNetInterface.h:217
DtStateData * nextFrameVrfObject()
Definition: simObjectNetInterface.h:222
Definition: netInterfaceParallelLock.h:16
DtSimObjectNetInterface * myNetInterface
Definition: simObjectNetInterface.h:84
tbb::mutex myDeleteGuardMutex
Definition: simObjectNetInterface.h:254
virtual ~ParallelContainer()
Definition: simObjectNetInterface.h:76
ParallelContainer(DtSimObjectNetInterface *sd)
Definition: simObjectNetInterface.h:68
Definition: simObjectNetInterface.h:65
DtVrfCallbackQueue::CallbackInterface::Ptr myParallelContainer
Definition: simObjectNetInterface.h:255
DtVrlinkNetworkInterface * myObjectManager
Definition: simObjectNetInterface.h:244
DtVrfCallbackQueue::CallbackInterface::Ptr parallelContainer()
Definition: simObjectNetInterface.h:89
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
static DtSimObjectNetInterfaceFactory * theFactory
Definition: simObjectNetInterface.h:247
API for writing callbacks.
Definition: vrfCallbackQueue.h:58
boost::signals2::connection mySimObjectRemovalConnection
Definition: simObjectNetInterface.h:253
binderNoArgs< _Fn > bind(const _Fn &_Func, const _Ty &_Left)
Definition: DtSTLUtilities.h:76
Definition: nonVrfUUIDResolver.h:24
bool myNeedsNetworkSetup
Definition: simObjectNetInterface.h:250
Class Description: DtSimObjectNetInterface.
Definition: simObjectNetInterface.h:50
static tbb::spin_rw_mutex thePublisherTickMutex
Definition: simObjectNetInterface.h:237
static tbb::spin_rw_mutex thePublisherCreationMutex
Definition: simObjectNetInterface.h:236
boost::signals2::connection myNetworkInterfaceDeletedConnection
Definition: simObjectNetInterface.h:86
virtual bool publishObject() const
Definition: simObjectNetInterface.h:156
DtStateRepository * myNetworkState
Definition: simObjectNetInterface.h:245
class DtSimObjectNetInterfaceFactory:
Definition: simObjectNetInterfaceFactory.h:26
DtSimObjectNetInterface *(* DtSimObjectNetIfaceCreatorFcn)(DtStateData *simObject, DtVrlinkNetworkInterface *mgr, bool publishObject)
Definition: simObjectNetInterfaceFactory.h:19
DtNetInterfaceParallelLock myLock
Definition: simObjectNetInterface.h:252
boost::signals2::signal< void()> signal_networkInterfaceDeleted
Definition: simObjectNetInterface.h:205
boost::shared_ptr< CallbackInterface > Ptr
Definition: vrfCallbackQueue.h:64

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)