VR-Link API Documentation for DIS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
hlaObject.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 1992-2010 VT MAK
3 ** All rights reserved.
4 *******************************************************************************/
5 #ifndef hlaObject_H_
6 #define hlaObject_H_
7 
8 #if DtHLA
9 
10 
11 #include <vlutil/vlMachineTypes.h>
12 #include "removeObjectCbInfo.h"
14 #include "objClassDesc.h"
15 
19 
21 class DT_DLL_VL DtStateMsg;
22 class DT_DLL_VL DtVrlRtiAmbassador;
24 
25 
26 
27 // ----------------------------------- DtParameterCbInfo -----------------------
28 // this class is only used by DtHlaObject for passing params to static
29 // callback fns. This is useed to make a copy of an AttributeHandleSet.
30 class DT_DLL_VL DtParameterCbInfo
31 {
32 public:
33  DtParameterCbInfo( DtHlaObject* obj, const RTI::AttributeHandleSet& set );
34 
35  virtual ~DtParameterCbInfo();
36 
37 public:
38  DtHlaObject* myObj;
39 #if DtHLA_1516
40  RTI::AttributeHandleSet mySet;
41 #else
42  RTI::AttributeHandleSet* mySet;
43 #endif
44 };
45 
56 class DT_DLL_VL DtHlaObject
57 {
58 public:
59 
64  DtHlaObject( DtExerciseConn* conn,
65 #if DtHLA_1516
66  RTI::ObjectInstanceHandle id,
67 #else
68  RTI::ObjectHandle id,
69 #endif
70  const char* name,
71  DtObjClassDesc& classDesc,
72  bool reflecting = false);
73 
78  DtHlaObject( DtExerciseConn* conn,
79  const char* name,
80  DtObjClassDesc& classDesc,
81  bool reflecting = false);
82 
85  virtual ~DtHlaObject();
86 
87 protected:
88 
90  DtHlaObject();
91 
93  DtHlaObject( const DtHlaObject& src );
94 
96  DtHlaObject& operator=( const DtHlaObject& src );
97 
98 public:
99 
101 #if DtHLA_1516
102  virtual inline const RTI::ObjectInstanceHandle& objectId() const;
103 #else
104  virtual inline const RTI::ObjectHandle& objectId() const;
105 #endif
106 
108  virtual inline const RTI::AttributeHandleSet& attrHandleSet();
109 
112  virtual inline const RTI::AttributeHandleSet& requestedAttributes();
113 
115  virtual inline RTI::ObjectClassHandle objectClassHandle() const;
116 
118  virtual inline const char* name() const;
119 
122  inline int numAttributes() const;
123 
125  virtual inline DtExerciseConn* exerciseConn() const;
126 
128  virtual inline DtObjClassDesc& classDesc() const;
129 
133 
137  virtual void setupUpdating();
138 
143  virtual void update();
144 
155  virtual void generateUpdate(
156  const RTI::AttributeHandleSet& eligibileAttrs,
157  const RTI::AttributeHandleSet& requiredAttrs,
158  DtStateMsg* msg );
159 
162  virtual void cleanupFromUpdating();
163 
167  virtual void processProvideUpdate(
168  const RTI::AttributeHandleSet& set );
169 
170 
173  virtual void clearRequestedAttributes();
174 
177  virtual inline const RTI::AttributeHandleSet& ownedAttributes();
178 
185  virtual void forceUpdate();
186  virtual void forceUpdate( const RTI::AttributeHandleSet& set );
187 
189  virtual void clearForcedAttributes();
190 
195  virtual const RTI::AttributeHandleSet& attributesNeededByFederation();
196 
199  virtual const RTI::AttributeHandleSet& eligibleAttributes();
200 
203  virtual const RTI::AttributeHandleSet& requiredAttributes();
204 
208  bool classNeededByFederation();
209 
213  void setupClassForUpdating();
214 
218 
220  virtual void setupReflecting();
221 
225  virtual void callReflect( const DtStateMsg& msg );
226 
232  virtual void callReflectLocal( const DtStateMsg& msg );
233 
237  virtual void reflectLocal( const DtStateMsg& msg ) = 0;
238 
241  virtual void cleanupFromReflecting();
242 
245  virtual void requestUpdate( RTI::AttributeHandleSet* attrs = 0 );
246 
248  virtual void addRemoveObjectCb( DtRemoveObjectCb cb, void* usr );
249 
252  virtual void removeRemoveObjectCb( DtRemoveObjectCb cb, void* usr );
253 
255  virtual void addPostReflectCb( DtObjectReflectAttributeValuesCb cb,
256  void* usr );
257 
259  virtual void removePostReflectCb( DtObjectReflectAttributeValuesCb cb,
260  void* usr );
261 
264  virtual void processRemoveObject();
265 
267 
271  virtual DtOwnershipHandler* setOwnershipHandler( DtOwnershipHandler* handler );
272 
276  virtual void unconditionalDivest( const RTI::AttributeHandleSet& attrs );
277 
283  virtual void negotiatedDivest( const RTI::AttributeHandleSet& attrs );
284 
290  virtual void divestAttributes( const RTI::AttributeHandleSet& attrs,
291  bool ifAvailable = false );
292 
298  virtual void divestObject(bool ifAvailable = false);
299 
302  virtual void cancelNegotiatedDivest( const RTI::AttributeHandleSet& attrs );
303 
304 
310  virtual void acquireAttributes( const RTI::AttributeHandleSet& attrs,
311  bool ifAvailable = false );
312 
318  virtual void acquireObject( bool ifAvailable = false );
319 
324  virtual void cancelAcquireAttributes( const RTI::AttributeHandleSet& attrs );
325 
328  virtual inline DtTime lastSimTimeUpdateReceived() const;
329 
330  virtual inline DtTime lastReceivedTimeStamp() const;
331 
333  virtual inline void setLastSimTimeUpdateReceived( DtTime tm );
334 
335  virtual inline void setLastReceivedTimeStamp( DtTime tm );
336 
337 protected:
338 
339 #if DtHLA_1516
340 
342  virtual void copyToLocalAndRemote(const RTI::AttributeHandleValueMap& sourceList,
343  const RTI::AttributeHandleSet& neededByRemote, const RTI::AttributeHandleSet& neededByLocal,
344  RTI::AttributeHandleValueMap& toRemoteList, RTI::AttributeHandleValueMap& toLocalList);
345 
347  virtual bool handlesMatch(const RTI::AttributeHandleValueMap& handleValueMap,
348  const RTI::AttributeHandleSet& handleSet) const;
349 
351  virtual void clearUpdatedAttributes(const RTI::AttributeHandleValueMap& sourceList);
352 
353 #else
354 
356  virtual bool handlesMatch(const RTI::AttributeHandleValuePairSet& handleValueSet,
357  const RTI::AttributeHandleSet& handleSet) const;
358 
360  virtual void copyToLocalAndRemote(const RTI::AttributeHandleValuePairSet& sourceList,
361  const RTI::AttributeHandleSet& neededByRemote, const RTI::AttributeHandleSet& neededByLocal,
362  RTI::AttributeHandleValuePairSet& toRemoteList, RTI::AttributeHandleValuePairSet& toLocalList);
363 
365  virtual void clearUpdatedAttributes(const RTI::AttributeHandleValuePairSet& sourceList);
366 
367 #endif
368 
369 public:
370 
374  virtual void printMsg( const DtStateMsg& msg,
375  bool fullReport = false ) const;
376 
380  virtual void localSubscriptionChanged();
381 
384  virtual void publicationChanged();
385 
386 
387 #if DtHLA_1516_EVOLVED
388  virtual const DtString& lastProducingFederate() const;
391 #endif
392 
393 
395  virtual void processRequestAssumption(
396  const RTI::AttributeHandleSet& attrs,
397 #if DtHLA_1516
398  const RTI::VariableLengthData &tag
399 #else
400  const char* tag
401 #endif
402  );
403 
405  virtual void processRequestRelease(
406  const RTI::AttributeHandleSet& attrs,
407 #if DtHLA_1516
408  const RTI::VariableLengthData &tag
409 #else
410  const char* tag
411 #endif
412  );
413 
416  virtual void processAttributeAcquisition(
417  const RTI::AttributeHandleSet& attrs );
418 
421  virtual void processAttributeDivestiture(
422  const RTI::AttributeHandleSet& attrs );
423 
425  virtual void processConfirmAcquisitionCancellation(
426  const RTI::AttributeHandleSet& attrs );
427 
428 
429 
430 protected:
431 
432  friend class DtHlaObjectManager;
433 
437  virtual void reflect( const DtStateMsg& msg ) = 0;
438 
441  void wipeRemoveList();
442 
444  virtual void clearRemoveList();
445 
448  void wipeReflectList();
449 
451  virtual void applyPostReflectCallbacks( const DtStateMsg& msg );
452 
454  virtual void loseOwnership( const RTI::AttributeHandleSet& attrs) ;
455 
457  virtual void gainOwnership( const RTI::AttributeHandleSet& attrs,
458  bool notifyOwnershipManagement = true );
459 
461  virtual void processUpdatesOff( const RTI::AttributeHandleSet& set );
462 
465  void processUpdatesOn( const RTI::AttributeHandleSet& set );
466 
470 #if !DtHLA_1516
471  virtual bool known() const;
472 #endif
473 
476  virtual void dumpRtiException(const char *functionName,
477  const RTI::Exception *exc) const;
478 
482  virtual void computeEligible();
483 
487  virtual void justRegistered();
488 
489 
490 #if DtHLA_1516_EVOLVED
491  virtual void setLastProducingFederate(const DtString& fedName);
494 #endif
495 
498  virtual void addHandlesToSet(RTI::AttributeHandleSet& destinationSet,
499  const RTI::AttributeHandleSet& sourceSet);
500 
501 public:
503  static void ownerAcquisitionIfAvailableCb( void* usr );
504  static void ownerAcquisitionCb( void* usr );
505  static void negotiatedDivestitureCb( void* usr );
506  static void unconditionalDivestitureCb( void* usr );
507 
508 protected:
511  static void reflectAttributeValuesCb( const DtStateMsg& stateMsg,
512  void* hlaObj );
513 
515  static void updatesOnCb(
516 #if DtHLA_1516
517  RTI::ObjectInstanceHandle handle,
518 #else
519  RTI::ObjectHandle handle,
520 #endif
521  const RTI::AttributeHandleSet& attributeSet,
522  void* usr );
523 
525  static void updatesOffCb(
526 #if DtHLA_1516
527  RTI::ObjectInstanceHandle handle,
528 #else
529  RTI::ObjectHandle handle,
530 #endif
531  const RTI::AttributeHandleSet& attributeSet,
532  void* usr );
533 
534 
535 protected:
536 
537  char* myName;
538 
539  DtExerciseConn* myExConn;
540  bool myReflecting;
541  bool myUpdating;
542  DtList myRemoveCbList;
543  DtList myReflectCbList;
544  DtListItem* myRemoveCbListNextPtr;
545  DtListItem* myReflectCbListNextPtr;
546  DtTime myLastSimTimeUpdateReceived;
547  DtTime myLastReceivedTimeStamp;
548  DtObjClassDesc &myClassDesc;
549 
551  enum SplitUpdateDiscriminant
552  {
553  UpdateBothLocalAndRemote,
554  UpdateRemoteOnly,
555  UpdateLocalOnly,
556  UpdateSplit
557  };
559  SplitUpdateDiscriminant mySplitUpdate;
560 
561 #if DtHLA_1516_EVOLVED
562  DtString myLastProducingFederate;
563 #endif
564 
565 
566 #if DtHLA_1516
567  RTI::ObjectInstanceHandle myObjectId;
568 #else
569  RTI::ObjectHandle myObjectId;
570 #endif
571  RTI::AttributeHandleSet* myEligibleAttrs;
577 
580  RTI::AttributeHandleSet* myNeededAttrs;
581 
584  RTI::AttributeHandleSet* myOwnedAttributes;
585 
587  RTI::AttributeHandleSet* myRequestedAttributes;
588 
590  RTI::AttributeHandleSet* myForcedAttributes;
591 
593  RTI::AttributeHandleSet* myRequiredAttributes;
594  bool myUpdateRequiredAttributes;
595 
598  RTI::AttributeHandleSet* mySelfReflectSplitAttrs;
599 
601  RTI::AttributeHandleSet* myEligibleNeeded;
602 
604  RTI::AttributeHandleSet* myEligibleSubscribed;
605 
607  RTI::AttributeHandleSet* myScratchAttributes;
608 
609  DtOwnershipHandler* myOwnershipHandler;
610 
611 };
612 
613 #if DtHLA_1516
614 inline const RTI::ObjectInstanceHandle& DtHlaObject::objectId() const
615 #else
616 inline const RTI::ObjectHandle& DtHlaObject::objectId() const
617 #endif
618 {
619  return myObjectId;
620 }
621 
622 inline const RTI::AttributeHandleSet& DtHlaObject::attrHandleSet()
623 {
624  return myClassDesc.attrHandleSet();
625 }
626 
627 inline const RTI::AttributeHandleSet& DtHlaObject::requestedAttributes()
628 {
629  return *myRequestedAttributes;
630 }
631 inline RTI::ObjectClassHandle DtHlaObject::objectClassHandle() const
632 {
633  return myClassDesc.handle();
634 }
635 
636 inline const char* DtHlaObject::name() const
637 {
638  return myName;
639 }
640 
641 inline int DtHlaObject::numAttributes() const
642 {
643  return myClassDesc.numAttributes() ;
644 }
645 
646 inline DtExerciseConn* DtHlaObject::exerciseConn() const
647 {
648  return myExConn;
649 }
650 
651 inline DtObjClassDesc& DtHlaObject::classDesc() const
652 {
653  return myClassDesc;
654 }
655 
656 inline const RTI::AttributeHandleSet& DtHlaObject::ownedAttributes()
657 {
658  return *myOwnedAttributes;
659 }
660 
661 inline DtTime DtHlaObject::lastSimTimeUpdateReceived() const
662 {
663  return myLastSimTimeUpdateReceived;
664 }
665 
666 inline void DtHlaObject::setLastSimTimeUpdateReceived( DtTime a_tm )
667 {
668  myLastSimTimeUpdateReceived = a_tm;
669 }
670 
671 inline DtTime DtHlaObject::lastReceivedTimeStamp() const
672 {
673  return myLastReceivedTimeStamp;
674 }
675 
676 inline void DtHlaObject::setLastReceivedTimeStamp( DtTime a_tm )
677 {
678  myLastReceivedTimeStamp = a_tm;
679 }
680 
681 
682 #endif
683 
684 #endif
685 
Instances of DtExerciseConn are used to provide an application&#39;s interface or connection to the netwo...
Definition: exerciseConnDIS.h:61
#define DT_DLL_VL
Definition: vlMachineTypes.h:108
DtList is deprecated, please use std::list&lt;T&gt;.
Definition: vlList.h:71
This is a base class meant to encapsulate user callbacks on ownership management services.
Definition: ownershipHandlerDIS.h:39
lint -e266
Definition: vlList.h:25
Instances of DtString are used to represent strings.
Definition: vlString.h:29
Instances of DtStateMsg are used to represent state data communicated via the network in a DIS (as op...
Definition: stateMsgDIS.h:21
This file contains typedefs for machine dependant types.

Document ID: Generated on Tue Aug 10 00:12:31 EDT 2021 from SVN revision 232765
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)