VR-Link API Documentation for DIS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
reflectedObjectListHLA.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 1992-2025 MAK Technologies, Inc
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 #pragma once
11 
12 #if DtHLA
13 
14 
17 #include <vl/objectIdHashlist.h>
18 #include <vl/region.h>
19 #include <vector>
20 
21 class DtStateMsg;
22 class DtHlaObject;
23 class DtExerciseConn;
24 class DtReflectedObject;
25 
29 struct DtTimeReflectedObjectIdKey
30 {
32  DtTimeReflectedObjectIdKey(DtTime timeValue, const DtObjectId& idValue);
33 
35  DtTimeReflectedObjectIdKey(const DtReflectedObject* object);
36 
37  DtTime time;
38  DtObjectId id;
39 };
40 
42 bool operator<(const DtTimeReflectedObjectIdKey& left, const DtTimeReflectedObjectIdKey& right);
44 bool operator< (const DtTimeReflectedObjectIdKey& left, DtTime right);
45 
46 typedef bool(*DtDiscoveryCondition)(DtReflectedObject* refObj, void* usr);
47 typedef std::map<DtObjectId, DtReflectedObject*> DtRefHlaObjectMap;
48 typedef std::map<DtTimeReflectedObjectIdKey, DtReflectedObject*> DtRefHlaObjectTimeMap;
49 
50 
59 {
60 public:
61 
64  const DtDDMRegionSet* regionSetToUse = 0,
65  const DtString& updateRateTag = DtString("") );
66 
68  virtual ~DtReflectedObjectList();
69 
70 private:
71 
74 
76  DtReflectedObjectList& operator=(const DtReflectedObjectList& orig);
77 
78 public:
79 
81  virtual DtReflectedObject* lookupObj(
82 #if DtHLA_1516
83  RTI::ObjectInstanceHandle id);
84 #else
85  RTI::ObjectHandle id);
86 #endif
87 
89  virtual DtReflectedObject* lookupObj(const DtGlobalObjectDesignator& objName);
90 
92 
93  virtual DtReflectedObject* firstObj() const;
94  virtual DtReflectedObject* lastObj() const;
96 
98  virtual int count() const;
99 
101  virtual DtExerciseConn *exerciseConn() const;
102 
112  virtual void manageObjectClass(RTI::ObjectClassHandle handle);
113 
122  virtual bool removeObject(const DtObjectId& id);
123 
125  virtual void addObjectAdditionCallback(
126  DtReflectedObjectCallbackFunction cb, void* userData);
127  virtual void removeObjectAdditionCallback(
128  DtReflectedObjectCallbackFunction cb, void* userData);
129 
131  virtual void addObjectRemovalCallback(
132  DtReflectedObjectCallbackFunction cb, void* userData);
133  virtual void removeObjectRemovalCallback(
134  DtReflectedObjectCallbackFunction cb, void* userData);
135 
137  virtual void print();
138 
140  virtual void printWaitList();
141 
144  virtual void setTimeoutProcessing(bool onOff);
145 
147  virtual bool isTimeoutProcessing() const;
148 
150 
151  virtual void setTimeoutInterval(DtTime time);
152  virtual DtTime timeoutInterval() const;
154 
157  virtual bool requestsEnabled() const;
158 
161 
162  virtual void setWaitListRefreshEnabled(bool on);
163  virtual bool waitListRefreshEnabled() const;
165 
167 
168  virtual void setWaitListRefreshPeriod(DtTime period);
169  virtual DtTime waitListRefreshPeriod() const;
171 
173 
174  virtual DtReflectedObject* firstWaitingObj() const;
175  virtual DtReflectedObject* lastWaitingObj() const;
177 
179  virtual int numberObjectsWaiting() const;
180 
182  virtual void checkDiscoveryConditionForWaitList();
183 
185  virtual DtTime nextRequestTime() const;
186 
189  virtual void setDiscoveryCondition(DtDiscoveryCondition fn, void* usr);
190 
193  virtual void clearDiscoveryCondition();
194 
196  virtual const DtDDMRegionSet& subscribedRegions();
197 
204  virtual void addWaitlistAdditionCallback(
205  DtReflectedObjectCallbackFunction cb, void* userData);
206  virtual void removeWaitlistAdditionCallback(
207  DtReflectedObjectCallbackFunction cb, void* userData);
208 
213  virtual void addWaitlistRemovalCallback(
214  DtReflectedObjectCallbackFunction cb, void* userData);
215  virtual void removeWaitlistRemovalCallback(
216  DtReflectedObjectCallbackFunction cb, void* userData);
217 
218 public:
219 
223 
224  static void setAutoSubscribeFlag(bool flag);
225  static bool autoSubscribeFlag();
227 
231 
232  static void setRequestClassUpdateFlag(bool onOff);
233  static bool requestClassUpdateFlag();
235 
238 
239  static void setRequestObjectUpdateFlag(bool onOff);
240  static bool requestObjectUpdateFlag();
242 
246 
247  static void setRequestWhenInitializedFlag(bool onOff);
248  static bool requestWhenInitializedFlag();
250 
252 
253  static void setDefaultWaitListRefreshFlag(bool onOff);
254  static bool defaultWaitListRefreshFlag();
256 
258 
259  static void setDefaultWaitListRefreshPeriod(DtTime period);
260  static DtTime defaultWaitListRefreshPeriod();
262 
264  static bool requestUpdateFlags();
265 
267  static void findDiscoveredObjectsCb(void* usr);
268 
269 protected:
270 
273  virtual void processDiscoverObject(DtHlaObject* obj);
274 
277  virtual void processRemoveObject(DtHlaObject* obj);
278 
281  virtual void processTimedOutObjectReflect(const DtStateMsg& msg,
282  DtHlaObject* obj);
283 
287  virtual void doTimeouts();
288 
290  // or any objects which have not met their discovery criteria yet.
291  virtual void doRequestUpdates();
292 
295  virtual DtReflectedObject* newReflectedObject(DtHlaObject* obj) const = 0;
296 
299  virtual void removeAndDelete(DtReflectedObject* obj, const char* msg = nullptr);
300 
306  virtual void objectAdded(DtReflectedObject* object);
307 
310  virtual bool shouldBeTimedOut(DtReflectedObject* object);
311 
315  virtual void timeOutObject(DtReflectedObject* object);
316 
319  virtual void unTimeOutObject(DtHlaObject* obj);
320 
323  virtual void addObjectClass(RTI::ObjectClassHandle handle);
324 
327  virtual void addObjectClassByName(const char* className);
328 
331  virtual void init(const DtList* handleList);
332 
335  void emptyLists();
336 
339  void emptyCallbackLists();
340 
342  virtual void processObjectAdditionCallbacks(
343  DtReflectedObject* object);
344  virtual void processObjectRemovalCallbacks(
345  DtReflectedObject* object);
346 
348  virtual void processWaitlistAdditionCallbacks(
349  DtReflectedObject* object);
350  virtual void processWaitlistRemovalCallbacks(
351  DtReflectedObject* object);
352 
357  virtual void findAlreadyDiscoveredObjects();
358 
359  virtual void checkDiscoveryCondition(DtReflectedObject* refObj);
360 
363  virtual bool readyToAdd(DtReflectedObject* obj);
364 
366  virtual void addToObjectList(DtReflectedObject* refObj);
367 
369  virtual void addToWaitList(DtReflectedObject* refObj);
370 
372  virtual void removeFromWaitList(DtReflectedObject* refObj);
373 
375  virtual void addToRefreshList(DtReflectedObject* refObj, DtTime timeToRefresh);
376 
378  virtual DtReflectedObject* lookupObjInWaitList(
379 #if DtHLA_1516
380  RTI::ObjectInstanceHandle id);
381 #else
382  RTI::ObjectHandle id);
383 #endif
384 
386  virtual DtReflectedObject* lookupObjInWaitList(
387  const DtGlobalObjectDesignator& name);
388 
389  void unsubscribeRegions();
390 
391 #if DtHLA_1516_EVOLVED
392  const DtString& updateRateSubscriptionName() const;
395 #endif
396 
397 protected:
398 
401  static void discoverObjectCb(DtHlaObject* hlaObj, void* rel);
402 
405  static void removeObjectCb(DtHlaObject* hlaObj, void* rel);
406 
409  static void timedOutObjectReflectCb(const DtStateMsg& msg,
410  DtHlaObject* obj,
411  void* usr);
412 
414  static void doTimeoutsPostDrainCb(void* usr);
415 
417  static void doRequestUpdatesPostDrainCb(void* usr);
418 
420  static void postUpdateCb(DtReflectedObject* obj, void* usr);
421 
422 protected:
423 
424  DtExerciseConn* myExConn;
425  DtRefHlaObjectMap myObjectList;
426  DtHashList myObjectListByName;
427 
428  // When an object is unable to be discovered due to not meeting discovery criteria
429  // it is placed on wait list and initially on discovery request list.
430  // If object instance requests are enabled, after first request it is moved to refresh list
431  DtRefHlaObjectMap myWaitList;
432  DtRefHlaObjectMap myDiscoveryList;
433  DtRefHlaObjectTimeMap myRefreshList;
434  bool myWaitListRefreshEnabled;
435  DtTime myNextRequestTime;
436  DtTime myWaitListRefreshPeriod;
437 
438  DtList myTimedOutObjectList;
439  DtTime myTimeoutInterval;
440  bool myTimeoutProcessingFlag;
441 
442  std::vector<RTI::ObjectClassHandle> myHandleList;
443  DtIntrusiveList myObjectAddedCallbacks;
444  DtIntrusiveList myObjectRemovedCallbacks;
445  DtIntrusiveList myWaitlistAddedCallbacks;
446  DtIntrusiveList myWaitlistRemovedCallbacks;
447  DtDiscoveryCondition myDiscoveryCondition;
448  void* myDiscoveryConditionParameter;
449  DtDDMRegionSet mySubscribedRegions;
450  DtString myUpdateRateTag;
451 
452 protected:
453 
454  static bool theAutoSubscribeFlag;
455  static bool theRequestClassUpdateFlag;
456  static bool theRequestObjectUpdateFlag;
457  static bool theRequestWhenInitializedFlag;
458  static bool theRequestUpdateFlags;
459  static bool theDefaultWaitListRefreshFlag;
460  static DtTime theDefaultWaitListRefreshPeriod;
461 };
462 
464 {
465  return myExConn;
466 }
467 
469 {
470  return myObjectList.size() > 0 ? (DtReflectedObject* ) myObjectList.begin()->second : nullptr;
471 }
472 
474 {
475  return myObjectList.size() > 0 ? (DtReflectedObject* ) myObjectList.rend()->second : nullptr;
476 }
477 
478 inline DtReflectedObject* DtReflectedObjectList::firstWaitingObj() const
479 {
480  return myWaitList.size() > 0 ? (DtReflectedObject*)myWaitList.begin()->second : nullptr;
481 }
482 
483 inline DtReflectedObject* DtReflectedObjectList::lastWaitingObj() const
484 {
485  return myWaitList.size() > 0 ? (DtReflectedObject*)myWaitList.rend()->second : nullptr;
486 }
487 
488 inline int DtReflectedObjectList::numberObjectsWaiting() const
489 {
490  return myWaitList.size();
491 }
492 
493 inline DtTime DtReflectedObjectList::waitListRefreshPeriod() const
494 {
495  return myWaitListRefreshPeriod;
496 }
497 
498 inline bool DtReflectedObjectList::waitListRefreshEnabled() const
499 {
500  return myWaitListRefreshEnabled;
501 }
502 
503 inline bool DtReflectedObjectList::defaultWaitListRefreshFlag()
504 {
505  return theDefaultWaitListRefreshFlag;
506 }
507 
508 inline DtTime DtReflectedObjectList::defaultWaitListRefreshPeriod()
509 {
510  return theDefaultWaitListRefreshPeriod;
511 }
512 
513 inline bool DtReflectedObjectList::requestClassUpdateFlag()
514 {
515  return theRequestClassUpdateFlag;
516 }
517 
518 inline bool DtReflectedObjectList::requestObjectUpdateFlag()
519 {
520  return theRequestObjectUpdateFlag;
521 }
522 
523 inline bool DtReflectedObjectList::requestWhenInitializedFlag()
524 {
525  return theRequestWhenInitializedFlag;
526 }
527 
528 inline bool DtReflectedObjectList::requestUpdateFlags()
529 {
530  return theRequestUpdateFlags;
531 }
532 
533 inline bool DtReflectedObjectList::isTimeoutProcessing() const
534 {
536 }
537 
539 {
540  return myTimeoutInterval;
541 }
542 
543 inline bool operator<(const DtTimeReflectedObjectIdKey& left, DtTime right)
544 {
545  return left.time < right;
546 }
547 
548 inline bool operator<(const DtTimeReflectedObjectIdKey& left, const DtTimeReflectedObjectIdKey& right)
549 {
550  if (left.time < right.time) return true;
551  if (left.time > right.time) return false;
552 
553  // time are equal, compare Id
554  return (left.id < right.id);
555 }
556 
557 
558 #endif
Instances of DtReflectedObjectList are lists of instances of classes derived from DtReflectedObject...
Definition: reflectedObjectListDIS.h:38
bool(* DtDiscoveryCondition)(DtReflectedObject *refObj, void *usr)
Definition: reflectedObjectListDIS.h:30
Instances of DtExerciseConn are used to provide an application&#39;s interface or connection to the netwo...
Definition: exerciseConnDIS.h:62
virtual DtReflectedObject * firstObj() const
Get the first/last object in the list.
#define DT_DLL_VL
Definition: vlMachineTypes.h:108
DtIntrusiveList myWaitList
Definition: reflectedObjectListDIS.h:214
DtTime myTimeoutInterval
Definition: reflectedObjectListDIS.h:218
virtual DtExerciseConn * exerciseConn() const
Get my exerciseConn.
This file contains typedefs used to represent objects in a protocol neutral way.
An intrusive list is a list that assumes that the elements that you add are pointers to instances of ...
Definition: vlList.h:196
DtList is deprecated, please use std::list&lt;T&gt;.
Definition: vlList.h:71
Instances of DtReflectedObject are used to represent a simulation entity reflected across a network (...
Definition: reflectedObjectDIS.h:34
Instances of DtEntityIdentifier are used as a unique ID for entities in DIS.
Definition: entityIdentifier.h:31
virtual DtReflectedObject * lastObj() const
virtual DtTime timeoutInterval()
DtHashlist is deprecated and provided for backwards compatibility only.
Definition: vlHashlist.h:69
void(* DtReflectedObjectCallbackFunction)(DtReflectedObject *obj, void *userData)
Callback function that takes a DtReflectedObject and user data.
Definition: reflectedObjectCallbackInfo.h:19
Instances of DtString are used to represent strings.
Definition: vlString.h:36
DtIntrusiveList myObjectList
Definition: reflectedObjectListDIS.h:213
const bool operator<(const DtU128 &lhs, const DtU128 &rhs)
Instances of DtStateMsg are used to represent state data communicated via the network in a DIS (as op...
Definition: stateMsgDIS.h:21
bool myTimeoutProcessingFlag
Definition: reflectedObjectListDIS.h:221
DtExerciseConn * myExConn
Definition: reflectedObjectListDIS.h:208

Document ID: Generated on Thu Oct 16 00:12:25 EDT 2025 from SVN revision 280738
Copyright © 1992-2025 MAK Technologies. All Rights Reserved (www.mak.com)