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 VT MAK
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 DtTime nextRequestTime() const;
183 
186  virtual void setDiscoveryCondition(DtDiscoveryCondition fn, void* usr);
187 
190  virtual void clearDiscoveryCondition();
191 
193  virtual const DtDDMRegionSet& subscribedRegions();
194 
195 public:
196 
200 
201  static void setAutoSubscribeFlag(bool flag);
202  static bool autoSubscribeFlag();
204 
208 
209  static void setRequestClassUpdateFlag(bool onOff);
210  static bool requestClassUpdateFlag();
212 
215 
216  static void setRequestObjectUpdateFlag(bool onOff);
217  static bool requestObjectUpdateFlag();
219 
223 
224  static void setRequestWhenInitializedFlag(bool onOff);
225  static bool requestWhenInitializedFlag();
227 
229 
230  static void setDefaultWaitListRefreshFlag(bool onOff);
231  static bool defaultWaitListRefreshFlag();
233 
235 
236  static void setDefaultWaitListRefreshPeriod(DtTime period);
237  static DtTime defaultWaitListRefreshPeriod();
239 
241  static bool requestUpdateFlags();
242 
244  static void findDiscoveredObjectsCb(void* usr);
245 
246 protected:
247 
250  virtual void processDiscoverObject(DtHlaObject* obj);
251 
254  virtual void processRemoveObject(DtHlaObject* obj);
255 
258  virtual void processTimedOutObjectReflect(const DtStateMsg& msg,
259  DtHlaObject* obj);
260 
264  virtual void doTimeouts();
265 
267  // or any objects which have not met their discovery criteria yet.
268  virtual void doRequestUpdates();
269 
272  virtual DtReflectedObject* newReflectedObject(DtHlaObject* obj) const = 0;
273 
276  virtual void removeAndDelete(DtReflectedObject* obj, char* msg = nullptr);
277 
283  virtual void objectAdded(DtReflectedObject* object);
284 
287  virtual bool shouldBeTimedOut(DtReflectedObject* object);
288 
292  virtual void timeOutObject(DtReflectedObject* object);
293 
296  virtual void unTimeOutObject(DtHlaObject* obj);
297 
300  virtual void addObjectClass(RTI::ObjectClassHandle handle);
301 
304  virtual void addObjectClassByName(const char* className);
305 
308  virtual void init(const DtList* handleList);
309 
312  void emptyLists();
313 
316  void emptyCallbackLists();
317 
319  virtual void processObjectAdditionCallbacks(
320  DtReflectedObject* object);
321  virtual void processObjectRemovalCallbacks(
322  DtReflectedObject* object);
323 
328  virtual void findAlreadyDiscoveredObjects();
329 
330  virtual void checkDiscoveryCondition(DtReflectedObject* refObj);
331 
334  virtual bool readyToAdd(DtReflectedObject* obj);
335 
337  virtual void addToObjectList(DtReflectedObject* refObj);
338 
340  virtual void addToWaitList(DtReflectedObject* refObj);
341 
343  virtual void removeFromWaitList(DtReflectedObject* refObj);
344 
346  virtual void addToRefreshList(DtReflectedObject* refObj, DtTime timeToRefresh);
347 
349  virtual DtReflectedObject* lookupObjInWaitList(
350 #if DtHLA_1516
351  RTI::ObjectInstanceHandle id);
352 #else
353  RTI::ObjectHandle id);
354 #endif
355 
357  virtual DtReflectedObject* lookupObjInWaitList(
358  const DtGlobalObjectDesignator& name);
359 
360  void unsubscribeRegions();
361 
362 #if DtHLA_1516_EVOLVED
363  const DtString& updateRateSubscriptionName() const;
366 #endif
367 
368 protected:
369 
372  static void discoverObjectCb(DtHlaObject* hlaObj, void* rel);
373 
376  static void removeObjectCb(DtHlaObject* hlaObj, void* rel);
377 
380  static void timedOutObjectReflectCb(const DtStateMsg& msg,
381  DtHlaObject* obj,
382  void* usr);
383 
385  static void doTimeoutsPostDrainCb(void* usr);
386 
388  static void doRequestUpdatesPostDrainCb(void* usr);
389 
391  static void postUpdateCb(DtReflectedObject* obj, void* usr);
392 
393 protected:
394 
398 
399  // When an object is unable to be discovered due to not meeting discovery criteria
400  // it is placed on wait list and initially on discovery request list.
401  // If object instance requests are enabled, after first request it is moved to refresh list
408 
412 
413  std::vector<RTI::ObjectClassHandle> myHandleList;
420 
421 protected:
422 
423  static bool theAutoSubscribeFlag;
430 };
431 
433 {
434  return myExConn;
435 }
436 
438 {
439  return myObjectList.size() > 0 ? (DtReflectedObject* ) myObjectList.begin()->second : nullptr;
440 }
441 
443 {
444  return myObjectList.size() > 0 ? (DtReflectedObject* ) myObjectList.rend()->second : nullptr;
445 }
446 
448 {
449  return myWaitList.size() > 0 ? (DtReflectedObject*)myWaitList.begin()->second : nullptr;
450 }
451 
453 {
454  return myWaitList.size() > 0 ? (DtReflectedObject*)myWaitList.rend()->second : nullptr;
455 }
456 
458 {
459  return myWaitList.size();
460 }
461 
463 {
465 }
466 
468 {
470 }
471 
473 {
475 }
476 
478 {
480 }
481 
483 {
485 }
486 
488 {
490 }
491 
493 {
495 }
496 
498 {
499  return theRequestUpdateFlags;
500 }
501 
503 {
505 }
506 
508 {
509  return myTimeoutInterval;
510 }
511 
512 inline bool operator<(const DtTimeReflectedObjectIdKey& left, DtTime right)
513 {
514  return left.time < right;
515 }
516 
518 {
519  if (left.time < right.time) return true;
520  if (left.time > right.time) return false;
521 
522  // time are equal, compare Id
523  return (left.id < right.id);
524 }
525 
526 
527 #endif
class DtReflectedObjectList
Definition: reflectedObjectListHLA.h:58
DtHashList myObjectListByName
Definition: reflectedObjectListHLA.h:397
DtTimeReflectedObjectIdKey(DtTime timeValue, const DtObjectId &idValue)
Constructor.
static bool theRequestWhenInitializedFlag
Definition: reflectedObjectListHLA.h:426
static bool requestClassUpdateFlag()
Set/Get flag that determines whether we request updates from all objects of the object classes we sub...
Definition: reflectedObjectListHLA.h:482
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:60
virtual DtReflectedObject * firstWaitingObj() const
Get the first/last object in the wait list.
Definition: reflectedObjectListHLA.h:447
static bool requestWhenInitializedFlag()
Set/Get flag that determines whether we request updates for wait listed objects only when all known V...
Definition: reflectedObjectListHLA.h:492
static DtTime defaultWaitListRefreshPeriod()
Set/Get the default wait list refresh period.
Definition: reflectedObjectListHLA.h:477
#define DT_DLL_VL
Definition: vlMachineTypes.h:108
virtual DtReflectedObject * lastWaitingObj() const
Get the first/last object in the wait list.
Definition: reflectedObjectListHLA.h:452
virtual int numberObjectsWaiting() const
Return the number of objects in the wait list.
Definition: reflectedObjectListHLA.h:457
DtList myTimedOutObjectList
Definition: reflectedObjectListHLA.h:409
DtTime myTimeoutInterval
Definition: reflectedObjectListHLA.h:410
static bool theRequestClassUpdateFlag
Definition: reflectedObjectListHLA.h:424
DtIntrusiveList myObjectRemovedCallbacks
Definition: reflectedObjectListHLA.h:415
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:437
DtRefHlaObjectTimeMap myRefreshList
Definition: reflectedObjectListHLA.h:404
DtRefHlaObjectMap myWaitList
Definition: reflectedObjectListHLA.h:402
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:502
Instances of DtHlaObject are used to represent HLA objects which are communicated across the network...
Definition: hlaObject.h:56
DtList is deprecated, please use std::list&lt;T&gt;.
Definition: vlList.h:71
static DtTime theDefaultWaitListRefreshPeriod
Definition: reflectedObjectListHLA.h:429
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:418
void * myDiscoveryConditionParameter
Definition: reflectedObjectListHLA.h:417
DtDiscoveryCondition myDiscoveryCondition
Definition: reflectedObjectListHLA.h:416
DtRefHlaObjectMap myDiscoveryList
Definition: reflectedObjectListHLA.h:403
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:507
static bool theDefaultWaitListRefreshFlag
Definition: reflectedObjectListHLA.h:428
static bool theRequestObjectUpdateFlag
Definition: reflectedObjectListHLA.h:425
bool myWaitListRefreshEnabled
Definition: reflectedObjectListHLA.h:405
static bool requestObjectUpdateFlag()
Set/Get flag that determines whether we request updates from an object as we discover it...
Definition: reflectedObjectListHLA.h:487
DtString myUpdateRateTag
Definition: reflectedObjectListHLA.h:419
DtHashlist is deprecated and provided for backwards compatibility only.
Definition: vlHashlist.h:69
DtTime myNextRequestTime
Definition: reflectedObjectListHLA.h:406
DtObjectId instances are used to represent RTI::ObjectInstances in VR-Link.
Definition: objectId.h:38
DtTime myWaitListRefreshPeriod
Definition: reflectedObjectListHLA.h:407
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:467
bool operator<(const DtTimeReflectedObjectIdKey &left, const DtTimeReflectedObjectIdKey &right)
Compare 2 time ID keys.
Definition: reflectedObjectListHLA.h:517
DtIntrusiveList myObjectAddedCallbacks
Definition: reflectedObjectListHLA.h:414
virtual DtExerciseConn * exerciseConn() const
Get my exerciseConn.
Definition: reflectedObjectListHLA.h:432
virtual DtTime waitListRefreshPeriod() const
Set/Get the wait list refresh period.
Definition: reflectedObjectListHLA.h:462
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:442
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:472
Instances of DtString are used to represent strings.
Definition: vlString.h:29
DtRefHlaObjectMap myObjectList
Definition: reflectedObjectListHLA.h:396
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:497
bool myTimeoutProcessingFlag
Definition: reflectedObjectListHLA.h:411
DtExerciseConn * myExConn
Definition: reflectedObjectListHLA.h:395
static bool theAutoSubscribeFlag
Definition: reflectedObjectListHLA.h:423
std::vector< RTI::ObjectClassHandle > myHandleList
Definition: reflectedObjectListHLA.h:413
static bool theRequestUpdateFlags
Definition: reflectedObjectListHLA.h:427

Document ID: Generated on Mon Apr 25 03:39:01 EDT 2022 from SVN revision 242502
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)