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 MAK Technologies, Inc
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 
16 
20 
22 class DT_DLL_VL DtStateMsg;
23 class DT_DLL_VL DtVrlRtiAmbassador;
25 
26 
27 
28 // ----------------------------------- DtParameterCbInfo -----------------------
29 // this class is only used by DtHlaObject for passing params to static
30 // callback fns. This is useed to make a copy of an AttributeHandleSet.
31 class DT_DLL_VL DtParameterCbInfo
32 {
33 public:
34 
35  DtParameterCbInfo( DtHlaObject* obj, const RTI::AttributeHandleSet& set );
36 
37  virtual ~DtParameterCbInfo();
38 
39 public:
40  DtHlaObject* myObj;
41 #if DtHLA_1516
42  RTI::AttributeHandleSet mySet;
43 #else
44  RTI::AttributeHandleSet* mySet;
45 #endif
46 };
47 
58 class DT_DLL_VL DtHlaObject
59 {
60 public:
61 
66  DtHlaObject( DtExerciseConn* conn,
67 #if DtHLA_1516
68  RTI::ObjectInstanceHandle id,
69 #else
70  RTI::ObjectHandle id,
71 #endif
72  const char* name,
73  DtObjClassDesc& classDesc,
74  bool reflecting = false);
75 
80  DtHlaObject( DtExerciseConn* conn,
81  const char* name,
82  DtObjClassDesc& classDesc,
83  bool reflecting = false);
84 
87  virtual ~DtHlaObject();
88 
89 protected:
90 
92  DtHlaObject();
93 
95  DtHlaObject( const DtHlaObject& src );
96 
98  DtHlaObject& operator=( const DtHlaObject& src );
99 
100 public:
101 
103 #if DtHLA_1516
104  virtual inline const RTI::ObjectInstanceHandle& objectId() const;
105 #else
106  virtual inline const RTI::ObjectHandle& objectId() const;
107 #endif
108 
110  virtual inline const RTI::AttributeHandleSet& attrHandleSet();
111 
114  virtual inline const RTI::AttributeHandleSet& requestedAttributes();
115 
117  virtual inline RTI::ObjectClassHandle objectClassHandle() const;
118 
120  virtual inline const char* name() const;
121 
124  inline int numAttributes() const;
125 
127  virtual inline DtExerciseConn* exerciseConn() const;
128 
130  virtual inline DtObjClassDesc& classDesc() const;
131 
135 
139  virtual void setupUpdating();
140 
145  virtual bool update();
146 
157  virtual void generateUpdate(
158  const RTI::AttributeHandleSet& eligibileAttrs,
159  const RTI::AttributeHandleSet& requiredAttrs,
160  DtStateMsg* msg );
161 
164  virtual void cleanupFromUpdating();
165 
169  virtual void processProvideUpdate(
170  const RTI::AttributeHandleSet& set );
171 
172 
175  virtual void clearRequestedAttributes();
176 
179  virtual inline const RTI::AttributeHandleSet& ownedAttributes();
180 
187  virtual void forceUpdate();
188  virtual void forceUpdate( const RTI::AttributeHandleSet& set );
189 
191  virtual void clearForcedAttributes();
192 
197  virtual const RTI::AttributeHandleSet& attributesNeededByFederation();
198 
201  virtual const RTI::AttributeHandleSet& eligibleAttributes();
202 
205  virtual const RTI::AttributeHandleSet& requiredAttributes();
206 
210  bool classNeededByFederation();
211 
215  void setupClassForUpdating();
216 
220 
222  virtual void setupReflecting();
223 
227  virtual void callReflect( const DtStateMsg& msg );
228 
234  virtual void callReflectLocal( const DtStateMsg& msg );
235 
239  virtual void reflectLocal( const DtStateMsg& msg ) = 0;
240 
243  virtual void cleanupFromReflecting();
244 
247  virtual void requestUpdate( RTI::AttributeHandleSet* attrs = 0 );
248 
250  virtual void addRemoveObjectCb( DtRemoveObjectCb cb, void* usr );
251 
254  virtual void removeRemoveObjectCb( DtRemoveObjectCb cb, void* usr );
255 
257  virtual void addPostReflectCb( DtObjectReflectAttributeValuesCb cb,
258  void* usr );
259 
261  virtual void removePostReflectCb( DtObjectReflectAttributeValuesCb cb,
262  void* usr );
263 
266  virtual void processRemoveObject();
267 
269 
273  virtual DtOwnershipHandler* setOwnershipHandler( DtOwnershipHandler* handler );
274 
278  virtual void unconditionalDivest( const RTI::AttributeHandleSet& attrs );
279 
285  virtual void negotiatedDivest( const RTI::AttributeHandleSet& attrs );
286 
292  virtual void divestAttributes( const RTI::AttributeHandleSet& attrs,
293  bool ifAvailable = false );
294 
300  virtual void divestObject(bool ifAvailable = false);
301 
304  virtual void cancelNegotiatedDivest( const RTI::AttributeHandleSet& attrs );
305 
306 
312  virtual void acquireAttributes( const RTI::AttributeHandleSet& attrs,
313  bool ifAvailable = false );
314 
320  virtual void acquireObject( bool ifAvailable = false );
321 
326  virtual void cancelAcquireAttributes( const RTI::AttributeHandleSet& attrs );
327 
330  virtual inline DtTime lastSimTimeUpdateReceived() const;
331 
332  virtual inline DtTime lastReceivedTimeStamp() const;
333 
335  virtual inline void setLastSimTimeUpdateReceived( DtTime tm );
336 
337  virtual inline void setLastReceivedTimeStamp( DtTime tm );
338 
339 protected:
340 
341 #if DtHLA_1516
342 
344  virtual void copyToLocalAndRemote(const RTI::AttributeHandleValueMap& sourceList,
345  const RTI::AttributeHandleSet& neededByRemote, const RTI::AttributeHandleSet& neededByLocal,
346  RTI::AttributeHandleValueMap& toRemoteList, RTI::AttributeHandleValueMap& toLocalList);
347 
349  virtual bool handlesMatch(const RTI::AttributeHandleValueMap& handleValueMap,
350  const RTI::AttributeHandleSet& handleSet) const;
351 
353  virtual void clearUpdatedAttributes(const RTI::AttributeHandleValueMap& sourceList);
354 
355 #else
356 
358  virtual bool handlesMatch(const RTI::AttributeHandleValuePairSet& handleValueSet,
359  const RTI::AttributeHandleSet& handleSet) const;
360 
362  virtual void copyToLocalAndRemote(const RTI::AttributeHandleValuePairSet& sourceList,
363  const RTI::AttributeHandleSet& neededByRemote, const RTI::AttributeHandleSet& neededByLocal,
364  RTI::AttributeHandleValuePairSet& toRemoteList, RTI::AttributeHandleValuePairSet& toLocalList);
365 
367  virtual void clearUpdatedAttributes(const RTI::AttributeHandleValuePairSet& sourceList);
368 
369 #endif
370 
371 public:
372 
376  virtual void printMsg( const DtStateMsg& msg,
377  bool fullReport = false ) const;
378 
382  virtual void localSubscriptionChanged();
383 
386  virtual void publicationChanged();
387 
388 
389 #if DtHLA_1516_EVOLVED
390  virtual const DtString& lastProducingFederate() const;
393 #endif
394 
395 
397  virtual void processRequestAssumption(
398  const RTI::AttributeHandleSet& attrs,
399 #if DtHLA_1516
400  const RTI::VariableLengthData &tag
401 #else
402  const char* tag
403 #endif
404  );
405 
407  virtual void processRequestRelease(
408  const RTI::AttributeHandleSet& attrs,
409 #if DtHLA_1516
410  const RTI::VariableLengthData &tag
411 #else
412  const char* tag
413 #endif
414  );
415 
418  virtual void processAttributeAcquisition(
419  const RTI::AttributeHandleSet& attrs );
420 
423  virtual void processAttributeDivestiture(
424  const RTI::AttributeHandleSet& attrs );
425 
427  virtual void processConfirmAcquisitionCancellation(
428  const RTI::AttributeHandleSet& attrs );
429 
430 
431 
432 protected:
433 
434  friend class DtHlaObjectManager;
435 
439  virtual void reflect( const DtStateMsg& msg ) = 0;
440 
443  void wipeRemoveList();
444 
446  virtual void clearRemoveList();
447 
450  void wipeReflectList();
451 
453  virtual void applyPostReflectCallbacks( const DtStateMsg& msg );
454 
456  virtual void loseOwnership( const RTI::AttributeHandleSet& attrs) ;
457 
459  virtual void gainOwnership( const RTI::AttributeHandleSet& attrs,
460  bool notifyOwnershipManagement = true );
461 
463  virtual void processUpdatesOff( const RTI::AttributeHandleSet& set );
464 
467  void processUpdatesOn( const RTI::AttributeHandleSet& set );
468 
472 #if !DtHLA_1516
473  virtual bool known() const;
474 #endif
475 
478  virtual void dumpRtiException(const char *functionName,
479  const RTI::Exception *exc) const;
480 
484  virtual void computeEligible();
485 
489  virtual void justRegistered();
490 
491 
492 #if DtHLA_1516_EVOLVED
493  virtual void setLastProducingFederate(const DtString& fedName);
496 #endif
497 
500  virtual void addHandlesToSet(RTI::AttributeHandleSet& destinationSet,
501  const RTI::AttributeHandleSet& sourceSet);
502 
503 
504 public:
506  static void ownerAcquisitionIfAvailableCb( void* usr );
507  static void ownerAcquisitionCb( void* usr );
508  static void negotiatedDivestitureCb( void* usr );
509  static void unconditionalDivestitureCb( void* usr );
510 
511 protected:
514  static void reflectAttributeValuesCb( const DtStateMsg& stateMsg,
515  void* hlaObj );
516 
518  static void updatesOnCb(
519 #if DtHLA_1516
520  RTI::ObjectInstanceHandle handle,
521 #else
522  RTI::ObjectHandle handle,
523 #endif
524  const RTI::AttributeHandleSet& attributeSet,
525  void* usr );
526 
528  static void updatesOffCb(
529 #if DtHLA_1516
530  RTI::ObjectInstanceHandle handle,
531 #else
532  RTI::ObjectHandle handle,
533 #endif
534  const RTI::AttributeHandleSet& attributeSet,
535  void* usr );
536 
537 
538 protected:
539 
540  char* myName;
541 
542  DtExerciseConn* myExConn;
543  bool myReflecting;
544  bool myUpdating;
545  DtList myRemoveCbList;
546  DtList myReflectCbList;
547  DtListItem* myRemoveCbListNextPtr;
548  DtListItem* myReflectCbListNextPtr;
549  DtTime myLastSimTimeUpdateReceived;
550  DtTime myLastReceivedTimeStamp;
551  DtObjClassDesc &myClassDesc;
552 
554  enum SplitUpdateDiscriminant
555  {
556  UpdateBothLocalAndRemote,
557  UpdateRemoteOnly,
558  UpdateLocalOnly,
559  UpdateSplit
560  };
562  SplitUpdateDiscriminant mySplitUpdate;
563 
564 #if DtHLA_1516_EVOLVED
565  DtString myLastProducingFederate;
566 #endif
567 
568 
569 #if DtHLA_1516
570  RTI::ObjectInstanceHandle myObjectId;
571 #else
572  RTI::ObjectHandle myObjectId;
573 #endif
574  RTI::AttributeHandleSet* myEligibleAttrs;
580 
583  RTI::AttributeHandleSet* myNeededAttrs;
584 
587  RTI::AttributeHandleSet* myOwnedAttributes;
588 
590  RTI::AttributeHandleSet* myRequestedAttributes;
591 
593  RTI::AttributeHandleSet* myForcedAttributes;
594 
596  RTI::AttributeHandleSet* myRequiredAttributes;
597  bool myUpdateRequiredAttributes;
598 
601  RTI::AttributeHandleSet* mySelfReflectSplitAttrs;
602 
604  RTI::AttributeHandleSet* myEligibleNeeded;
605 
607  RTI::AttributeHandleSet* myEligibleSubscribed;
608 
610  RTI::AttributeHandleSet* myScratchAttributes;
611 
612  DtOwnershipHandler* myOwnershipHandler;
613 
614 };
615 
616 #if DtHLA_1516
617 inline const RTI::ObjectInstanceHandle& DtHlaObject::objectId() const
618 #else
619 inline const RTI::ObjectHandle& DtHlaObject::objectId() const
620 #endif
621 {
622  return myObjectId;
623 }
624 
625 inline const RTI::AttributeHandleSet& DtHlaObject::attrHandleSet()
626 {
627  return myClassDesc.attrHandleSet();
628 }
629 
630 inline const RTI::AttributeHandleSet& DtHlaObject::requestedAttributes()
631 {
632  return *myRequestedAttributes;
633 }
634 inline RTI::ObjectClassHandle DtHlaObject::objectClassHandle() const
635 {
636  return myClassDesc.handle();
637 }
638 
639 inline const char* DtHlaObject::name() const
640 {
641  return myName;
642 }
643 
644 inline int DtHlaObject::numAttributes() const
645 {
646  return myClassDesc.numAttributes() ;
647 }
648 
649 inline DtExerciseConn* DtHlaObject::exerciseConn() const
650 {
651  return myExConn;
652 }
653 
654 inline DtObjClassDesc& DtHlaObject::classDesc() const
655 {
656  return myClassDesc;
657 }
658 
659 inline const RTI::AttributeHandleSet& DtHlaObject::ownedAttributes()
660 {
661  return *myOwnedAttributes;
662 }
663 
664 inline DtTime DtHlaObject::lastSimTimeUpdateReceived() const
665 {
666  return myLastSimTimeUpdateReceived;
667 }
668 
669 inline void DtHlaObject::setLastSimTimeUpdateReceived( DtTime a_tm )
670 {
671  myLastSimTimeUpdateReceived = a_tm;
672 }
673 
674 inline DtTime DtHlaObject::lastReceivedTimeStamp() const
675 {
676  return myLastReceivedTimeStamp;
677 }
678 
679 inline void DtHlaObject::setLastReceivedTimeStamp( DtTime a_tm )
680 {
681  myLastReceivedTimeStamp = a_tm;
682 }
683 
684 
685 #endif
686 
687 #endif
688 
Instances of DtExerciseConn are used to provide an application&#39;s interface or connection to the netwo...
Definition: exerciseConnDIS.h:62
#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 Thu Sep 19 02:12:35 EDT 2024 from SVN revision 269601
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)