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