WebLVC 1.8 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) 2017 MAK Technologies, Inc.
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 Wed Mar 12 15:05:17 EDT 2025 from SVN revision 274272
Copyright © 2005-2025 MAK Technologies. All Rights Reserved (
www.mak.com
)