VR-Exchange 2.9 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
tenaTranslator.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2016 MAK Technologies, Inc.
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 #pragma once
11 
12 // Disable warning about missing operators.
13 // Comparison and assignment operators are declared but not defined
14 // to prevent their usage, but this causes a warning in template classes.
15 #pragma warning( disable : 4661 )
16 
17 #include <tenaBroker/dllExport.h>
19 
22 
25 
26 #include <vl/globalObjectDesignator.h>
27 
28 // All TENA Translators must have the following template arguments:
29 // The integer define of the DtPortalMessageKind,
30 // The PortalObject this message translates,
31 // The Reflected Portal Object class the message translates
32 // The Reflected TENA Object class
33 // The reflected list of objects
34 // The state repository class of the TENA Object
35 // The publisher class of the TENA Object
36 #define TENA_TEMPLATE_LIST \
37  template \
38  < class T_PortalObject \
39  , class T_PortalReflectedObject \
40  , class T_TenaReflectedObject \
41  , class T_TenaReflectedObjectList \
42  , class T_TenaObjectStateRepository \
43  , class T_TenaObjectPublisher>
44 
45 #define TENA_TEMPLATE_FUNCTION \
46  T_PortalObject, T_PortalReflectedObject, \
47  T_TenaReflectedObject, T_TenaReflectedObjectList, \
48  T_TenaObjectStateRepository, T_TenaObjectPublisher
49 
50 class DtStateRepository;
51 
52 namespace MAKVrExchange
53 {
54 
55  class DtRequestTranslationDiagnosticMessage;
56 
57  namespace DtTenaBroker
58  {
59 
60  class DtTenaBroker;
61  class DtInteraction;
62  class DtReflectedObject;
63  class DtObjectPublisher;
64 
89  : public DtBaseObjectTranslator<T_PortalObject,T_PortalReflectedObject>
90  {
91  public:
92 
94  typedef enum
95  {
96  none = 0,
97  discover = 1,
98  update = 2,
99  remove = 3
100  } UpdateType;
101 
104 
107 
108  public:
109 
112  const DtString& name, DtPortalMessageKind kind );
113 
115  virtual ~DtTenaObjectTranslator();
116 
118  virtual void enableReflectTranslator( bool enabled );
119 
121  virtual void forceUpdateAll();
122 
124  virtual void tick();
125 
127  virtual bool isThrottlingRateOk( T_TenaObjectPublisher* publisher,
128  DtBrokerObject* brokerObj );
129 
130  virtual DtTenaBroker* tenaBroker();
131  virtual const DtTenaBroker* tenaBroker() const;
132 
134  virtual void shutdown();
135 
136  protected:
137 
140 
141  virtual void initializeTenaCallbacks();
142  virtual void removeTenaCallbacks();
143 
145 
148 
150  virtual DtBrokerObject* createBrokerObject( const DtReflectedObject* refObj );
152 
155  virtual DtBrokerObject* findBrokerObject( const DtReflectedObject* refObj );
156  virtual DtBrokerObject* findBrokerObject( const DtPortalReflectedObject* refObj );
157 
160  virtual DtBrokerObject* findBrokerObject( const DtString& objectName );
161 
165  virtual DtBrokerObject* releaseBrokerObject( const DtReflectedObject* refObj );
167 
169 
172 
175  static bool tenaDiscoveryCriteria( DtReflectedObject* refObj, void* usr );
176 
178  static void tenaObjectAddedCb( T_TenaReflectedObject* refObj, void* usr );
179 
181  static void tenaObjectUpdatedCb( T_TenaReflectedObject* refObj, void* usr );
182 
184  static void tenaObjectDeletedCb( T_TenaReflectedObject* refObj, void* usr );
185 
187 
190 
193  virtual bool isPortalDiscoverable( const DtPortalReflectedObject* refObj );
194 
197  virtual bool isTenaPublishable( DtBrokerObject* brokerObj,
198  const T_PortalReflectedObject* refObj );
199 
201 
204 
207  virtual bool isTenaDiscoverable( const DtReflectedObject* refObj );
208 
210 
214 
215  virtual void callObjectDiscoverCallbacks( const DtBrokerObject* obj );
216  virtual void callObjectUpdateCallbacks( const DtBrokerObject* obj );
217  virtual void callObjectRemoveCallbacks( const DtBrokerObject* obj );
218 
220 
229 
230  virtual void discoverTenaObject( T_TenaReflectedObject& obj );
231  virtual void discoverPortalObject( const T_PortalReflectedObject& obj );
232 
234 
242 
243  virtual void createTenaPublisher( DtBrokerObject* brokerObj );
244 
250  virtual DtString tenaObjectName( const T_PortalReflectedObject* refObj ) const;
251 
253  virtual DtEntityIdentifier mapIdentifier( const T_PortalReflectedObject* refObj,
254  const DtString& identifier );
255 
257  virtual DtEntityIdentifier mapObjectId( const DtEntityIdentifier& identifier );
258 
267  virtual DtObjectPublisher* instantiateTenaPublisher(
268  const T_PortalReflectedObject* refObj, const DtEntityIdentifier& name );
269 
274  virtual bool performTenaGlobalIdMapping( const DtObjectPublisher* publisher,
275  const T_PortalReflectedObject& refObj,
277  int systemId = DtGlobalIdMapper::NoSystemId,
278  int beamId = DtGlobalIdMapper::NoBeamId );
279 
280  virtual void createPortalPublisher( DtBrokerObject* brokerObj );
281 
287  virtual DtString portalObjectName( const T_TenaReflectedObject* refObj ) const;
288 
293  virtual bool performPortalGlobalIdMapping(
295  const T_TenaReflectedObject& refObj,
297  int systemId = DtGlobalIdMapper::NoSystemId,
298  int beamId = DtGlobalIdMapper::NoBeamId );
299 
301 
310 
311  virtual void receiveTenaUpdate( T_TenaReflectedObject& obj );
312  virtual void receivePortalUpdate( const T_PortalReflectedObject& obj );
313 
315 
324 
325  virtual void updateTenaBrokerObject( DtBrokerObject* brokerObj,
326  const T_TenaObjectStateRepository& sr );
327  virtual void updatePortalBrokerObject( DtBrokerObject* brokerObj,
328  const T_PortalObject& sr );
329 
331 
340  virtual void updateFilteredState( DtBrokerObject* brokerObj,
342  T_TenaReflectedObject* refObj );
343 
348  virtual bool filterLocation( const DtReflectedObject& refObj,
349  const DtVector& location );
350 
354 
355  virtual void removeTenaObject( const DtReflectedObject& refObj );
356  virtual void removePortalObject( const T_PortalReflectedObject& refObj );
357 
359 
364 
365  virtual void deleteTenaPublisher( DtBrokerObject* brokerObj );
366  virtual void deletePortalPublisher( DtBrokerObject* brokerObj );
367 
369 
371  virtual const DtGlobalObjectDesignator& convertGlobalId( const DtString& id );
372 
374  virtual const DtString& convertGlobalId( const DtGlobalObjectDesignator& id );
375 
377  virtual bool isEntityIdentifierValid( const DtEntityIdentifier& entityId ) const;
378 
380  static void requestTransDiagCb( const DtRequestTranslationDiagnosticMessage& msg, void* usr );
381 
384 
386  virtual void printIncomingOutgoingStateReps(
387  const DtPortalObject& incoming, const DtStateRepository& outgoing ) const;
388 
390  virtual void printIncomingOutgoingStateReps(
391  const DtStateRepository& incoming, const DtPortalObject& outgoing ) const;
392 
396  virtual void performPortalDebugging( const DtString& objectName );
397 
399  virtual void performPortalDebugging( const DtPortalObject& incoming,
400  const DtStateRepository& outgoing );
401 
403  virtual void performPortalDebugging( const DtStateRepository& incoming,
404  const DtPortalObject& outgoing );
405 
406  virtual void printDumpGuiToText( const DtBrokerObject& brokerObj,
407  UpdateType ut ) const;
408 
410  virtual unsigned int numObjects() const;
411 
412  public:
413 
416  virtual T_PortalObject* translate( T_PortalObject* destination,
417  const T_TenaObjectStateRepository& source,
418  const T_TenaReflectedObject& refObj ) = 0;
419 
422  virtual T_TenaObjectStateRepository* translate(
423  T_TenaObjectStateRepository* destination, const T_PortalObject& source,
424  const T_PortalReflectedObject& refObj ) = 0;
425 
426  private:
427 
430 
433 
435  bool operator == ( const DtTenaObjectTranslator& rightOperand ) const;
436 
438  bool operator != ( const DtTenaObjectTranslator& rightOperand ) const;
439 
440  protected:
441 
442  T_TenaReflectedObjectList* myTenaReflectedList;
443 
444  typedef std::pair<DtTime,bool> LocationFilteringInfo;
445  typedef std::map<const DtReflectedObject*,LocationFilteringInfo> LocationFilteringMap;
447 
448  typedef std::map<const DtReflectedObject*,DtBrokerObject*> TenaToPortalReflectedMap;
449  typedef std::map<const DtPortalReflectedObject*,DtBrokerObject*> PortalToTenaReflectedMap;
450 
453 
454  typedef std::set<DtString> TransDebugObjectNamesSet;
456 
457  };
458 
459 
476  template <class PortalInterType,class TenaInterType>
478  : public DtBaseInteractionTranslator<PortalInterType>
479  {
480  public:
481 
484 
487 
488  public:
489 
492  const DtString& name, DtPortalMessageKind kind );
493 
496 
498  virtual void enableReflectTranslator( bool enabled );
499 
500  virtual DtTenaBroker* tenaBroker();
501  virtual const DtTenaBroker* tenaBroker() const;
502 
504  virtual void shutdown();
505 
506  protected:
507 
510 
511  virtual void initializeTenaCallbacks();
512  virtual void removeTenaCallbacks();
513 
515 
519 
520  static void receiveTenaInteraction( TenaInterType* inter, void* usr );
521 
523 
531 
532  virtual void createInteraction( const PortalInterType& inter );
533  virtual void createPortalInteraction( const TenaInterType& inter );
534 
536 
539  virtual PortalInterType* translate( PortalInterType* destination,
540  const TenaInterType& source ) = 0;
541 
544  virtual TenaInterType* translate( TenaInterType* destination,
545  const PortalInterType& source ) = 0;
546 
548  virtual void printIncomingOutgoingInteractions( const DtPortalInteraction& incoming,
549  const DtInteraction& outgoing ) const;
550 
552  virtual void printIncomingOutgoingInteractions( const DtInteraction& incoming,
553  const DtPortalInteraction& outgoing ) const;
554 
556  virtual const DtGlobalObjectDesignator& convertGlobalId( const DtString& id );
557 
559  virtual const DtString& convertGlobalId( const DtGlobalObjectDesignator& id );
560 
561  virtual void printDumpGuiToText( const PortalInterType& inter );
562  virtual void printDumpGuiToText( const TenaInterType& inter );
563 
564  private:
565 
568 
571 
573  bool operator == ( const DtTenaInteractionTranslator& rightOperand ) const;
574 
576  bool operator != ( const DtTenaInteractionTranslator& rightOperand ) const;
577 
578  };
579 
580  }
581 }
582 
583 #define _tenaTranslator_INL_
584 #include <tenaBroker/tenaTranslator.inl>
585 #undef _tenaTranslator_INL_
TenaToPortalReflectedMap myPortalPublisherMap
Definition: tenaTranslator.h:451
static void tenaObjectUpdatedCb(T_TenaReflectedObject *refObj, void *usr)
Callback called when an object in the reflected list is updated.
bool operator!=(const DtTenaInteractionTranslator &rightOperand) const
Private Comparison Operator (Not implemented – Do Not Compare).
bool operator==(const DtTenaObjectTranslator &rightOperand) const
Private Comparison Operator (Not implemented – Do Not Compare).
virtual void createInteraction(const PortalInterType &inter)
This function is required for a translator to correctly publish objects from the portal to your proto...
Contains the templated DtPortalReflectedObjectManager types.
DtBaseInteractionTranslator< PortalInterType > BaseTranslatorClass
Typedef for the templated base class type.
Definition: tenaTranslator.h:486
std::map< const DtPortalReflectedObject *, DtBrokerObject * > PortalToTenaReflectedMap
Definition: tenaTranslator.h:449
virtual bool isTenaDiscoverable(const DtReflectedObject *refObj)
Creates broker object for reflected TENA object.
virtual void tick()
Ticks the publishers for the translated TENA and Portal objects.
virtual bool filterLocation(const DtReflectedObject &refObj, const DtVector &location)
Checks location filtering and returns the filtered state.
static void receiveTenaInteraction(TenaInterType *inter, void *usr)
virtual const DtGlobalObjectDesignator & convertGlobalId(const DtString &id)
Converts from PortalID to TENA ID (which is an Entity Identifier)
TransDebugObjectNamesSet myTransDebugNames
Definition: tenaTranslator.h:455
bool operator==(const DtTenaInteractionTranslator &rightOperand) const
Private Comparison Operator (Not implemented – Do Not Compare).
Used to request that brokers send translation diagnostic reports.
Definition: requestTransDiagnosticMessage.h:21
virtual DtString tenaObjectName(const T_PortalReflectedObject *refObj) const
Determines the name to use for the given reflected object.
Implements a DtBroker for the TENA Protocol.
Definition: tenaBroker.h:51
virtual DtEntityIdentifier mapObjectId(const DtEntityIdentifier &identifier)
Maps the entity IDs with respect to the remapTenaIds setting.
virtual void printIncomingOutgoingStateReps(const DtPortalObject &incoming, const DtStateRepository &outgoing) const
Print debug info for the given state reps.
static void tenaObjectAddedCb(T_TenaReflectedObject *refObj, void *usr)
Callback called when an object is added to the reflected list.
DtTenaInteractionTranslator< PortalInterType, TenaInterType > ParentClass
Typedef for the templated class type.
Definition: tenaTranslator.h:483
std::map< const DtReflectedObject *, LocationFilteringInfo > LocationFilteringMap
Definition: tenaTranslator.h:445
Provides container to hold pointers to Protocol/Portal objects.
Definition: brokerObject.h:24
DtTenaObjectTranslator(DtBroker *broker, const DtString &name, DtPortalMessageKind kind)
CTOR.
virtual void deleteTenaPublisher(DtBrokerObject *brokerObj)
static bool tenaDiscoveryCriteria(DtReflectedObject *refObj, void *usr)
The TENA reflected list&#39;s discovery condition callback.
virtual void shutdown()
Performs any virtual shutdown logic prior to deletion.
virtual void printDumpGuiToText(const DtBrokerObject &brokerObj, UpdateType ut) const
virtual bool performTenaGlobalIdMapping(const DtObjectPublisher *publisher, const T_PortalReflectedObject &refObj, DtGlobalIdMapper::ObjectType type=DtGlobalIdMapper::EntityType, int systemId=DtGlobalIdMapper::NoSystemId, int beamId=DtGlobalIdMapper::NoBeamId)
Maps the publisher&#39;s global ID to the reflected object&#39;s identifier.
T_TenaReflectedObjectList * myTenaReflectedList
Definition: tenaTranslator.h:442
virtual void removePortalObject(const T_PortalReflectedObject &refObj)
DtPortalObject are messages which also serve as state repositories for simulated objects.
Definition: pObject.h:23
ObjectType
Definition: tenaBroker/tenaBroker/globalIdMapper.h:55
virtual void printDumpGuiToText(const PortalInterType &inter)
virtual void shutdown()
Performs any virtual shutdown logic prior to deletion.
A simple template class to hold different types of State Repositories.
Definition: pObjectPublisher.h:68
DtBaseInteractionTranslator are responsible for translating messages for things that do not have stat...
Definition: baseInteractionTranslator.h:60
virtual bool isTenaPublishable(DtBrokerObject *brokerObj, const T_PortalReflectedObject *refObj)
Tests whether the object is publishable as a TENA object.
virtual void updateTenaBrokerObject(DtBrokerObject *brokerObj, const T_TenaObjectStateRepository &sr)
virtual void updatePortalBrokerObject(DtBrokerObject *brokerObj, const T_PortalObject &sr)
This callback is regarding an object Discovery.
Definition: tenaTranslator.h:98
An abstract interface for reflected objects.
Definition: pReflectedObject.h:31
DtBroker * broker() const
Broker Accessor.
Definition: translator.h:80
DtPortalInteractions are a special type of DtPortalMessages which are used to transmit simulation dat...
Definition: pInteraction.h:21
LocationFilteringMap myLocationFilteringMap
Definition: tenaTranslator.h:446
Contains the DtInteractionTranslator and DtBaseInteractionTranslator class declarations.
PortalToTenaReflectedMap myTenaPublisherMap
Definition: tenaTranslator.h:452
virtual void printIncomingOutgoingInteractions(const DtPortalInteraction &incoming, const DtInteraction &outgoing) const
Prints incoming and outgoing interactions (before and after translation) to DtInfo.
virtual void discoverTenaObject(T_TenaReflectedObject &obj)
std::map< const DtReflectedObject *, DtBrokerObject * > TenaToPortalReflectedMap
Definition: tenaTranslator.h:448
virtual void createPortalInteraction(const TenaInterType &inter)
virtual T_PortalObject * translate(T_PortalObject *destination, const T_TenaObjectStateRepository &source, const T_TenaReflectedObject &refObj)=0
Translates the given TENA object to a Portal object (abstract).
virtual void enableReflectTranslator(bool enabled)
Enables or disables the translator reflecting from TENA.
DtTenaInteractionTranslator(DtBroker *broker, const DtString &name, DtPortalMessageKind kind)
CTOR.
virtual bool isEntityIdentifierValid(const DtEntityIdentifier &entityId) const
Test whether entityId is a valid TENA AMO uniqueId.
virtual void removeTenaObject(const DtReflectedObject &refObj)
bool operator!=(const DtTenaObjectTranslator &rightOperand) const
Private Comparison Operator (Not implemented – Do Not Compare).
virtual bool isThrottlingRateOk(T_TenaObjectPublisher *publisher, DtBrokerObject *brokerObj)
Checks if the throttling rate is ok for the given publisher.
virtual DtBrokerObject * findBrokerObject(const DtReflectedObject *refObj)
Find the broker object for the given reflected object.
virtual DtString portalObjectName(const T_TenaReflectedObject *refObj) const
Determines the name to use for the given reflected object.
virtual DtBrokerObject * createBrokerObject(const DtReflectedObject *refObj)
Creates a broker object for the given reflected object.
Base class for all broker objects.
Definition: broker.h:58
DtBaseObjectTranslators provide common logic for translating objects.
Definition: baseObjectTranslator.h:106
virtual void performPortalDebugging(const DtString &objectName)
Build and send debugging message for GUI debugging.
virtual bool isPortalDiscoverable(const DtPortalReflectedObject *refObj)
Creates broker object for reflected Portal object.
Base class for all TENA object translators.
Definition: tenaTranslator.h:88
virtual void receivePortalUpdate(const T_PortalReflectedObject &obj)
Contains the DtObjectTranslator and DtBaseObjectTranslator class declarations.
#define TENA_TEMPLATE_LIST
Definition: tenaTranslator.h:36
static void tenaObjectDeletedCb(T_TenaReflectedObject *refObj, void *usr)
Callback called when an object in the reflected list is deleted.
virtual void enableReflectTranslator(bool enabled)
Enables or disables the translator reflecting objects from TENA.
UpdateType
Enums used with the ObjectAction callback.
Definition: tenaTranslator.h:94
DtTenaInteractionTranslator & operator=(const DtTenaInteractionTranslator &other)
Private Assignment Operator (Not implemented – Do Not Copy).
Base class for all TENA interaction translators.
Definition: tenaTranslator.h:477
virtual void callObjectDiscoverCallbacks(const DtBrokerObject *obj)
Template Instances of DtPortalObjectPublisherTemplate.
Definition: tenaBroker/tenaBroker/globalIdMapper.h:57
virtual void callObjectUpdateCallbacks(const DtBrokerObject *obj)
std::pair< DtTime, bool > LocationFilteringInfo
Definition: tenaTranslator.h:444
DtTenaObjectTranslator< TENA_TEMPLATE_FUNCTION > ParentClass
Typedef for the templated class type.
Definition: tenaTranslator.h:103
Definition: tenaBroker/tenaBroker/globalIdMapper.h:52
virtual void createPortalPublisher(DtBrokerObject *brokerObj)
Determines the name to use for the given reflected object.
virtual PortalInterType * translate(PortalInterType *destination, const TenaInterType &source)=0
Translates the given TENA interaction to a Portal interaction (abstract).
virtual const DtGlobalObjectDesignator & convertGlobalId(const DtString &id)
Converts from PortalID to TENA ID (which is an Entity Identifier)
virtual void discoverPortalObject(const T_PortalReflectedObject &obj)
Definition: tenaBroker/tenaBroker/globalIdMapper.h:53
virtual DtObjectPublisher * instantiateTenaPublisher(const T_PortalReflectedObject *refObj, const DtEntityIdentifier &name)
Instantiates the publisher for the given reflected object.
DtTenaObjectTranslator & operator=(const DtTenaObjectTranslator &other)
Private Assignment Operator (Not implemented – Do Not Copy).
DtPortalMessageKind
A List of message kinds distributed with the Portal.
Definition: pMessageKinds.h:23
virtual void forceUpdateAll()
Tells all publishers to send an update next tick.
virtual void callObjectRemoveCallbacks(const DtBrokerObject *obj)
virtual unsigned int numObjects() const
Returns the current number of objects.
static void requestTransDiagCb(const DtRequestTranslationDiagnosticMessage &msg, void *usr)
Static translation diagnostic request callback.
std::set< DtString > TransDebugObjectNamesSet
Definition: tenaTranslator.h:454
virtual DtBrokerObject * releaseBrokerObject(const DtReflectedObject *refObj)
Find the broker object for the given reflected object.
virtual DtEntityIdentifier mapIdentifier(const T_PortalReflectedObject *refObj, const DtString &identifier)
Maps the reflected object&#39;s global or entity identifier to a TENA id.
virtual void updateFilteredState(DtBrokerObject *brokerObj, DtPortalObjectPublisherTemplate< T_PortalObject > *publisher, T_TenaReflectedObject *refObj)
Ensures the given object is properly filtered.
virtual void createTenaPublisher(DtBrokerObject *brokerObj)
Determines the name to use for the given reflected object.
DtBaseObjectTranslator< T_PortalObject, T_PortalReflectedObject > BaseTranslatorClass
Typedef for the templated base class type.
Definition: tenaTranslator.h:106
virtual void receiveTenaUpdate(T_TenaReflectedObject &obj)
virtual bool performPortalGlobalIdMapping(const DtPortalObjectPublisherTemplate< T_PortalObject > *publisher, const T_TenaReflectedObject &refObj, DtGlobalIdMapper::ObjectType type=DtGlobalIdMapper::EntityType, int systemId=DtGlobalIdMapper::NoSystemId, int beamId=DtGlobalIdMapper::NoBeamId)
Maps the publisher&#39;s global ID to the reflected object&#39;s identifier.
virtual void deletePortalPublisher(DtBrokerObject *brokerObj)
virtual DtString name() const
Accessor for the translator&#39;s name.

Document ID: Generated on Tue Jun 25 16:45:35 EDT 2024 from SVN revision 267383
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)