VR-Link API Documentation for HLA 1.3
 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) 2014 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 
30 {
32  DtTimeReflectedObjectIdKey(DtTime timeValue, const DtObjectId& idValue);
33 
36 
39 };
40 
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, 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 
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
437 
441 
442  std::vector<RTI::ObjectClassHandle> myHandleList;
451 
452 protected:
453 
454  static bool theAutoSubscribeFlag;
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 
479 {
480  return myWaitList.size() > 0 ? (DtReflectedObject*)myWaitList.begin()->second : nullptr;
481 }
482 
484 {
485  return myWaitList.size() > 0 ? (DtReflectedObject*)myWaitList.rend()->second : nullptr;
486 }
487 
489 {
490  return myWaitList.size();
491 }
492 
494 {
496 }
497 
499 {
501 }
502 
504 {
506 }
507 
509 {
511 }
512 
514 {
516 }
517 
519 {
521 }
522 
524 {
526 }
527 
529 {
530  return theRequestUpdateFlags;
531 }
532 
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 
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
class DtReflectedObjectList
Definition: reflectedObjectListHLA.h:58
DtHashList myObjectListByName
Definition: reflectedObjectListHLA.h:426
DtTimeReflectedObjectIdKey(DtTime timeValue, const DtObjectId &idValue)
Constructor.
static bool theRequestWhenInitializedFlag
Definition: reflectedObjectListHLA.h:457
static bool requestClassUpdateFlag()
Set/Get flag that determines whether we request updates from all objects of the object classes we sub...
Definition: reflectedObjectListHLA.h:513
std::map< DtObjectId, DtReflectedObject * > DtRefHlaObjectMap
Definition: reflectedObjectListHLA.h:47
Instances of DtExerciseConn are used to provide an application&#39;s interface or connection to the netwo...
Definition: exerciseConnHLA.h:61
DtIntrusiveList myWaitlistAddedCallbacks
Definition: reflectedObjectListHLA.h:445
virtual DtReflectedObject * firstWaitingObj() const
Get the first/last object in the wait list.
Definition: reflectedObjectListHLA.h:478
static bool requestWhenInitializedFlag()
Set/Get flag that determines whether we request updates for wait listed objects only when all known V...
Definition: reflectedObjectListHLA.h:523
static DtTime defaultWaitListRefreshPeriod()
Set/Get the default wait list refresh period.
Definition: reflectedObjectListHLA.h:508
#define DT_DLL_VL
Definition: vlMachineTypes.h:108
virtual DtReflectedObject * lastWaitingObj() const
Get the first/last object in the wait list.
Definition: reflectedObjectListHLA.h:483
virtual int numberObjectsWaiting() const
Return the number of objects in the wait list.
Definition: reflectedObjectListHLA.h:488
DtList myTimedOutObjectList
Definition: reflectedObjectListHLA.h:438
DtTime myTimeoutInterval
Definition: reflectedObjectListHLA.h:439
static bool theRequestClassUpdateFlag
Definition: reflectedObjectListHLA.h:455
DtIntrusiveList myObjectRemovedCallbacks
Definition: reflectedObjectListHLA.h:444
Map key used to store reflected objects by time that allows removal by key with both the key&#39;s time a...
Definition: reflectedObjectListHLA.h:29
This file contains typedefs used to represent objects in a protocol neutral way.
std::set< DtDDMRegionSP > DtDDMRegionSet
Definition: region13.h:34
virtual DtReflectedObject * firstObj() const
Get the first/last object in the list.
Definition: reflectedObjectListHLA.h:468
DtRefHlaObjectTimeMap myRefreshList
Definition: reflectedObjectListHLA.h:433
DtRefHlaObjectMap myWaitList
Definition: reflectedObjectListHLA.h:431
An intrusive list is a list that assumes that the elements that you add are pointers to instances of ...
Definition: vlList.h:196
virtual bool isTimeoutProcessing() const
Get whether or not timeout processing occurs.
Definition: reflectedObjectListHLA.h:533
Instances of DtHlaObject are used to represent HLA objects which are communicated across the network...
Definition: hlaObject.h:58
DtList is deprecated, please use std::list&lt;T&gt;.
Definition: vlList.h:71
static DtTime theDefaultWaitListRefreshPeriod
Definition: reflectedObjectListHLA.h:460
bool(* DtDiscoveryCondition)(DtReflectedObject *refObj, void *usr)
Definition: reflectedObjectListHLA.h:46
DtObjectId id
Definition: reflectedObjectListHLA.h:38
class DtReflectedObject:
Definition: reflectedObjectHLA.h:36
DtDDMRegionSet mySubscribedRegions
Definition: reflectedObjectListHLA.h:449
void * myDiscoveryConditionParameter
Definition: reflectedObjectListHLA.h:448
DtDiscoveryCondition myDiscoveryCondition
Definition: reflectedObjectListHLA.h:447
DtRefHlaObjectMap myDiscoveryList
Definition: reflectedObjectListHLA.h:432
DtTime time
Definition: reflectedObjectListHLA.h:37
std::map< DtTimeReflectedObjectIdKey, DtReflectedObject * > DtRefHlaObjectTimeMap
Definition: reflectedObjectListHLA.h:48
virtual DtTime timeoutInterval() const
Set/Get the remote object timeout period.
Definition: reflectedObjectListHLA.h:538
DtIntrusiveList myWaitlistRemovedCallbacks
Definition: reflectedObjectListHLA.h:446
static bool theDefaultWaitListRefreshFlag
Definition: reflectedObjectListHLA.h:459
static bool theRequestObjectUpdateFlag
Definition: reflectedObjectListHLA.h:456
bool myWaitListRefreshEnabled
Definition: reflectedObjectListHLA.h:434
static bool requestObjectUpdateFlag()
Set/Get flag that determines whether we request updates from an object as we discover it...
Definition: reflectedObjectListHLA.h:518
DtString myUpdateRateTag
Definition: reflectedObjectListHLA.h:450
DtHashlist is deprecated and provided for backwards compatibility only.
Definition: vlHashlist.h:69
DtTime myNextRequestTime
Definition: reflectedObjectListHLA.h:435
DtObjectId instances are used to represent RTI::ObjectInstances in VR-Link.
Definition: objectId.h:38
DtTime myWaitListRefreshPeriod
Definition: reflectedObjectListHLA.h:436
virtual bool waitListRefreshEnabled() const
Set whether or not we will resend request updates for objects which remain on wait list because they ...
Definition: reflectedObjectListHLA.h:498
bool operator<(const DtTimeReflectedObjectIdKey &left, const DtTimeReflectedObjectIdKey &right)
Compare 2 time ID keys.
Definition: reflectedObjectListHLA.h:548
DtIntrusiveList myObjectAddedCallbacks
Definition: reflectedObjectListHLA.h:443
virtual DtExerciseConn * exerciseConn() const
Get my exerciseConn.
Definition: reflectedObjectListHLA.h:463
virtual DtTime waitListRefreshPeriod() const
Set/Get the wait list refresh period.
Definition: reflectedObjectListHLA.h:493
void(* DtReflectedObjectCallbackFunction)(DtReflectedObject *obj, void *userData)
Callback function that takes a DtReflectedObject and user data.
Definition: reflectedObjectCallbackInfo.h:19
virtual DtReflectedObject * lastObj() const
Get the first/last object in the list.
Definition: reflectedObjectListHLA.h:473
DtReal DtTime
A definition of DtTime.
Definition: vlTime.h:19
static bool defaultWaitListRefreshFlag()
Set/Get the default wait list enabled flag value.
Definition: reflectedObjectListHLA.h:503
Instances of DtString are used to represent strings.
Definition: vlString.h:29
DtRefHlaObjectMap myObjectList
Definition: reflectedObjectListHLA.h:425
class DtStateMsg:
Definition: stateMsgHLA.h:32
static bool requestUpdateFlags()
Get flag that indicates if any requests are enabled (class, object, or initialized) ...
Definition: reflectedObjectListHLA.h:528
bool myTimeoutProcessingFlag
Definition: reflectedObjectListHLA.h:440
DtExerciseConn * myExConn
Definition: reflectedObjectListHLA.h:424
static bool theAutoSubscribeFlag
Definition: reflectedObjectListHLA.h:454
std::vector< RTI::ObjectClassHandle > myHandleList
Definition: reflectedObjectListHLA.h:442
static bool theRequestUpdateFlags
Definition: reflectedObjectListHLA.h:458

Document ID: Generated on Wed Mar 27 02:04:30 EDT 2024 from SVN revision 264570
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)