VR-Exchange 2.8 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
pMacros.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2017 VT MAK
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 // Note that these macros may be out of date.
11 
12 // The first 5 functions in this macro must be defined in your CXX file. the next 3 are automatically defined by the DT_DEFINE macro
13 #define DT_DECLARE_PORTAL_CALLBACKS(DtBrokerObjectNamespace,DtPortalReflectedObjType) \
14  virtual void createPortalPublisher(DtBrokerObjectNamespace::DtBrokerObject* brokerObject); \
15  virtual bool isPortalPublishable(const DtBrokerObjectNamespace::DtBrokerObject* brokerObject) const; \
16  virtual void deletePortalPublisher(DtBrokerObjectNamespace::DtBrokerObject* brokerObject); \
17  virtual void discoverPortalObject(const DtPortalReflectedObjType &obj); \
18  virtual void receivePortalUpdate(const DtPortalReflectedObjType &obj); \
19  \
20  static void portalObjectAddedCb(const DtPortalReflectedObjType &obj, void *ud); \
21  static void portalObjectUpdatedCb(const DtPortalReflectedObjType &obj, void *ud); \
22  static void portalObjectDeletedCb(const DtPortalReflectedObjType &obj, void *ud);
23 
24 
25 #define DT_DEFINE_CREATE_PORTAL_PUBLISHER(DtTranslatorClass,DtBrokerObjectNamespace,DtPortalObjectType,DtReflectedObject) \
26  void DtTranslatorClass::createPortalPublisher( DtBrokerObjectNamespace::DtBrokerObject *brokerObject ) \
27 { \
28  MAKVrExchange::DtPortalObjectPublisherTemplate<DtPortalObjectType> *publisher = \
29  new MAKVrExchange::DtPortalObjectPublisherTemplate<DtPortalObjectType>(broker()->portalConnection()); \
30  \
31  const DtReflectedObject* reflectedObj = \
32  static_cast<const DtReflectedObject*>( brokerObject->reflectedObjPtr() ); \
33  \
34  publisher->sr()->setIdentifier(reflectedObj->globalId()); \
35  brokerObject->setPublisherPtr(publisher); \
36 }
37 
38 #define DT_DEFINE_IS_PORTAL_PUBLISHABLE(DtTranslatorClass, DtBrokerObjectNamespace, Protocol) \
39 bool DtTranslatorClass::isPortalPublishable( const DtBrokerObjectNamespace::DtBrokerObject *brokerObject ) const \
40 { \
41  assert( brokerObject->protocol() == DtBrokerObjectNamespace::DtBrokerObject::Protocol );\
42  return true;\
43 }
44 
45 #define DT_DEFINE_DELETE_PORTAL_PUBLISHER(DtTranslatorClass, DtBrokerObjectNamespace, DtPortalObjectType) \
46 void DtTranslatorClass::deletePortalPublisher(DtBrokerObjectNamespace::DtBrokerObject* brokerObject) \
47 { \
48  MAKVrExchange::DtPortalObjectPublisherTemplate<DtPortalObjectType> *publisher = \
49  static_cast<MAKVrExchange::DtPortalObjectPublisherTemplate<DtPortalObjectType> *>(brokerObject->publisherPtr()); \
50  \
51  if (publisher) \
52  { \
53  DtDELETE( publisher ); \
54  brokerObject->setPublisherPtr( publisher ); \
55  } \
56 }
57 
58 #define DT_DEFINE_DISCOVER_PORTAL_OBJECT(DtTranslatorClass,DtBrokerObjectNamespace,DtPortalReflectedObjType,DtProtocol) \
59 void DtTranslatorClass::discoverPortalObject(const DtPortalReflectedObjType &refObj) \
60 { \
61  DtBrokerObjectNamespace::DtBrokerObject* brokerObject = findBrokerObject(&refObj); \
62  if (!brokerObject) \
63  { \
64  brokerObject = createBrokerObject(&refObj); \
65  } \
66  \
67  brokerObject->setLastUpdate(myBroker->simTime()); \
68  brokerObject->setObjectName(refObj.sr()->identifier()); \
69  brokerObject->setIsDiscovered(true); \
70  \
71  create##DtProtocol##Publisher( brokerObject ); \
72  \
73  refObj.addUpdateCallback(DtTranslatorClass::portalObjectUpdatedCb, this); \
74  receivePortalUpdate(refObj); \
75 }
76 
77 #define DT_DEFINE_RECEIVE_PORTAL_UPDATE(DtTranslatorClass, DtBrokerObjectNamespace, DtPortalReflectedObjType, \
78  DtPortalObjType, DtProtocolPublisher, DtProtocolStateRepository,DtProtocol) \
79 void DtTranslatorClass::receivePortalUpdate(const DtPortalReflectedObjType &refObj) \
80 { \
81  DtBrokerObjectNamespace::DtBrokerObject* brokerObject = findBrokerObject(&refObj); \
82  assert( brokerObject ); \
83  \
84  brokerObject->setLastUpdate(myBroker->simTime()); \
85  \
86  const DtPortalObjType &sr = *(refObj.sr()); \
87  \
88  if (!brokerObject->isPublishable()) \
89  { \
90  brokerObject->setIsPublishable( is##DtProtocol##Publishable( brokerObject )); \
91  } \
92  \
93  callObjectUpdateCallbacks( brokerObject ); \
94  \
95  if (brokerObject->isDropped()) \
96  { \
97  return; \
98  } \
99  \
100  DtProtocolPublisher *publisher = \
101  static_cast<DtProtocolPublisher*>( brokerObject->publisherPtr() ); \
102  assert(publisher); \
103  \
104  DtProtocolStateRepository &newSr = * \
105  static_cast<DtProtocolStateRepository*>(publisher->sr()); \
106  \
107  translate( &newSr, sr, refObj ); \
108  \
109  if ( myBroker->isTranslatorDebuggingOn(name()) ) \
110  { \
111  printIncomingOutgoingStateReps( sr, newSr ); \
112  } \
113  \
114  if ( myBroker->brokerInitializer()->oneToOneMapping() ) \
115  { \
116  publisher->forceUpdate(); \
117  } \
118  if ( isPublishEnabled() ) \
119  { \
120  publisher->tick(); \
121  } \
122  performPortalDebugging( sr, newSr ); \
123 }
124 
125 
126 #define DT_DEFINE_PORTAL_CALLBACKS( DtTranslatorClass, DtPortalReflectedObjType, DtTemplates ) \
127  DtTemplates \
128 void DtTranslatorClass::portalObjectAddedCb( const DtPortalReflectedObjType& reflectedObj, void* ud ) \
129 { \
130  DtTranslatorClass* et = (DtTranslatorClass*) ud; \
131  et->discoverPortalObject( reflectedObj ); \
132 }; \
133  \
134  DtTemplates \
135 void DtTranslatorClass::portalObjectUpdatedCb( const DtPortalReflectedObjType& reflectedObj, void* ud ) \
136 { \
137  DtTranslatorClass* et = (DtTranslatorClass*) ud; \
138  et->receivePortalUpdate( reflectedObj ); \
139 }; \
140  \
141  DtTemplates \
142 void DtTranslatorClass::portalObjectDeletedCb( const DtPortalReflectedObjType& reflectedObj, void* ud ) \
143 { \
144  DtTranslatorClass* et = (DtTranslatorClass*) ud; \
145  et->removePortalObject( &reflectedObj ); \
146 }
147 
148 #define DT_TICK_ALL_PUBLISHERS(DtPublisherContainerType, DtBrokerObjectNamespace, DtPublisherContainer, DtPublisherType) \
149  DtPublisherContainerType::iterator pubItr = DtPublisherContainer.begin(); \
150  DtPublisherContainerType::iterator pubEnd = DtPublisherContainer.end(); \
151  for ( ; pubItr != pubEnd; ++pubItr ) \
152  { \
153  DtBrokerObjectNamespace::DtBrokerObject* brokerObject = pubItr->second; \
154  DtPublisherType* publisher = static_cast<DtPublisherType*>( brokerObject->publisherPtr() ); \
155  if ( publisher && brokerObject->isPublishable() ) \
156  { \
157  publisher->tick(); \
158  } \
159  }
160 
161 #define DT_DECLARE_INTERACTION_PORTAL_CALLBACKS(DtPortalInteractionType,DtInteractionType) \
162  virtual void createPortalInteraction( const DtInteractionType& incomming ); \
163  static void receivePortalInteraction( const DtPortalInteractionType& inter, void* usr );
164 
165 #define DT_DEFINE_CREATE_PORTAL_INTERACTION( DtTranslatorClass, DtPortalInteractionType, DtInteractionType, DtObjectKind ) \
166 void DtTranslatorClass::createPortalInteraction( const DtInteractionType& in ) \
167 { \
168  DtPortalInteractionType out; \
169  out.setKind( DtObjectKind ); \
170 \
171  translate( &out, in ); \
172 \
173  if ( broker()->isTranslatorDebuggingOn(name()) ) \
174  { \
175  printIncomingOutgoingInteractions( in, out ); \
176  } \
177  broker()->portalConnection()->send( out ); \
178 }
179 
180 #define DT_DEFINE_RECEIVE_PORTAL_INTERACTION( DtTranslatorClass, DtPortalInteractionType, DtProtocol ) \
181 void DtTranslatorClass::receivePortalInteraction( \
182  const DtPortalInteractionType& inter, void* usr ) \
183 { \
184  DtTranslatorClass* trans = (DtTranslatorClass*) usr; \
185  trans->create##DtProtocol##Interaction( inter ); \
186 }

Document ID: Generated on Tue Aug 16 16:15:26 EDT 2022 from SVN revision 245901
Copyright © 2005-2022 MAK Technologies. All Rights Reserved (www.mak.com)