VR-Exchange 2.2 API Documentation
Home
Modules
Namespaces
Classes
Files
Examples
Libraries
File List
File Members
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( virtualTranslatorName() )) \
105
{ \
106
printIncomingOutgoingStateReps(sr, newSr, virtualTranslatorName()); \
107
} \
108
\
109
if ( myBroker->brokerInitializer()->oneToOneMapping()) \
110
{ \
111
publisher->forceUpdate(); \
112
} \
113
if (!myBroker->isTranslatorDisabled( virtualTranslatorName() )) \
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
144
#define DT_TICK_ALL_PUBLISHERS(DtPublisherContainerType, DtBrokerObjectNamespace, DtPublisherContainer, DtPublisherType) \
145
for ( DtPublisherContainerType::iterator pubItr = \
146
DtPublisherContainer.begin(); pubItr != DtPublisherContainer.end(); ++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
161
#define DT_DEFINE_CREATE_PORTAL_INTERACTION(DtTranslatorClass,DtPortalInteractionType,DtInteractionType,DtObjectKind) \
162
void DtTranslatorClass::createPortalInteraction( const DtInteractionType& in ) \
163
{ \
164
DtPortalInteractionType out; \
165
out.setKind(DtObjectKind); \
166
\
167
translate( &out, in ); \
168
\
169
if (broker()->isTranslatorDebuggingOn( virtualTranslatorName() )) \
170
{ \
171
printIncomingOutgoingInteractions( in, out); \
172
} \
173
broker()->portalConnection()->send(out); \
174
}
175
176
#define DT_DEFINE_RECEIVE_PORTAL_INTERACTION(DtTranslatorClass,DtPortalInteractionType, DtProtocol) \
177
void DtTranslatorClass::receivePortalInteraction( \
178
const DtPortalInteractionType &inter, void *usr) \
179
{ \
180
DtTranslatorClass *trans = (DtTranslatorClass*)usr; \
181
trans->create##DtProtocol##Interaction(inter); \
182
}
183
184
185
Document ID: Generated on Mon Apr 15 17:15:50 EDT 2013 from SVN revision 126154
Copyright © 2005-2012 VT MÄK. All Rights Reserved (
www.mak.com
)