VR-Exchange 2.1 API Documentation
Home
Modules
Namespaces
Classes
Files
Examples
Libraries
File List
File Members
include
hlaBroker
hMacros.h
Go to the documentation of this file.
1
/*********************************************************************
2
** Copyright (c) 2012 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_HLA_CALLBACKS(DtHlaReflectedObjType) \
9
virtual void createHlaPublisher(MAKVrExchange::DtHlaBroker::DtBrokerObject* brokerObject); \
10
virtual bool isHlaPublishable(const MAKVrExchange::DtHlaBroker::DtBrokerObject* brokerObject) const; \
11
virtual void deleteHlaPublisher(MAKVrExchange::DtHlaBroker::DtBrokerObject* brokerObject); \
12
virtual void discoverHlaObject(DtHlaReflectedObjType *obj); \
13
virtual void receiveHlaUpdate(DtHlaReflectedObjType *obj); \
14
\
15
static void hlaObjectAddedCb(DtHlaReflectedObjType *obj, void *ud); \
16
static void hlaObjectUpdatedCb(DtHlaReflectedObjType *obj, void *ud); \
17
static void hlaObjectDeletedCb(DtHlaReflectedObjType *obj, void *ud);
18
19
20
#define DT_DEFINE_CREATE_HLA_PUBLISHER(DtTranslatorClass,DtPortalReflectedObjType,DtHlaPublisher) \
21
void DtTranslatorClass::createHlaPublisher(MAKVrExchange::DtHlaBroker::DtBrokerObject* brokerObject) \
22
{ \
23
const DtPortalReflectedObjType* reflectedObj = \
24
static_cast<const DtPortalReflectedObjType*>( brokerObject->reflectedObjPtr() ); \
25
assert(reflectedObj); \
26
DtString objectName = reflectedObj->sr()->identifier().c_str(); \
27
\
28
DtHlaPublisher* publisher = NULL; \
29
try \
30
{ \
31
publisher = new DtHlaPublisher( broker()->hlaConnection(), objectName); \
32
if(publisher->name() != objectName) \
33
{ \
34
broker()->globalIdMapper()->add(objectName,publisher->name()); \
35
} \
36
} \
37
catch (RTI::Exception&) \
38
{ \
39
try \
40
{ \
41
DtWarn << "Illegal Object Name: " << objectName << " Trying to publish with new name."; \
42
publisher = new DtHlaPublisher( broker()->hlaConnection()); \
43
\
44
if(publisher) \
45
{ \
46
broker()->globalIdMapper()->add(objectName,publisher->name()); \
47
} \
48
} \
49
catch (RTI::Exception& ex) \
50
{ \
51
DtWarn << "Caught RTI Exception: "; \
52
DtWarn << ex << "\n"; \
53
} \
54
} \
55
DtCATCH_AND_WARN(DtWarn) \
56
\
57
brokerObject->setPublisherPtr( publisher ); \
58
\
59
if (publisher==NULL) \
60
{ \
61
DtWarn << "Dropping: " << objectName << "\n"; \
62
brokerObject->setIsDropped( true ); \
63
} \
64
}
65
66
#define DT_DEFINE_IS_HLA_PUBLISHABLE(DtTranslatorClass, DtPortalReflectedObjType) \
67
bool DtTranslatorClass::isHlaPublishable( const MAKVrExchange::DtHlaBroker::DtBrokerObject *brokerObject ) const \
68
{ \
69
assert( brokerObject->protocol() == MAKVrExchange::DtHlaBroker::DtBrokerObject::portal ); \
70
const DtPortalReflectedObjType* reflectedObj = \
71
static_cast<const DtPortalReflectedObjType*>( brokerObject->reflectedObjPtr() ); \
72
assert(reflectedObj); \
73
return true; \
74
}
75
76
#define DT_DEFINE_DELETE_HLA_PUBLISHER(DtTranslatorClass, DtHlaPublisher) \
77
void DtTranslatorClass::deleteHlaPublisher(MAKVrExchange::DtHlaBroker::DtBrokerObject* brokerObject) \
78
{ \
79
DtHlaPublisher *publisher = \
80
static_cast<DtHlaPublisher *>( brokerObject->publisherPtr() ); \
81
\
82
if (publisher) \
83
{ \
84
DtDELETE( publisher ); \
85
brokerObject->setPublisherPtr( publisher ); \
86
} \
87
}
88
89
#define DT_DEFINE_DISCOVER_HLA_OBJECT(DtTranslatorClass, DtHlaReflectedObjType,DtProtocol) \
90
void DtTranslatorClass::discoverHlaObject(DtHlaReflectedObjType *refObj) \
91
{ \
92
MAKVrExchange::DtHlaBroker::DtBrokerObject* brokerObject = findBrokerObject(refObj); \
93
if (!brokerObject) \
94
{ \
95
brokerObject = createBrokerObject(refObj); \
96
} \
97
brokerObject->setLastUpdate(myBroker->simTime()); \
98
brokerObject->setObjectName(refObj->globalId()); \
99
brokerObject->setIsDiscovered(true); \
100
\
101
createPortalPublisher( brokerObject ); \
102
\
103
refObj->addPostUpdateCallback( \
104
DtTranslatorClass::hlaObjectUpdatedCb, this); \
105
receive##DtProtocol##Update(refObj); \
106
}
107
108
#define DT_DEFINE_RECEIVE_HLA_UPDATE(DtTranslatorClass, DtHlaReflectedObjType, \
109
DtHlaStateRepository, DtPortalObjectType, DtObjectKind) \
110
void DtTranslatorClass::receiveHlaUpdate(DtHlaReflectedObjType *refObj) \
111
{ \
112
MAKVrExchange::DtHlaBroker::DtBrokerObject* brokerObject = findBrokerObject(refObj); \
113
assert( brokerObject ); \
114
\
115
DtHlaStateRepository &sr = * \
116
static_cast<DtHlaStateRepository*>(refObj->sr()); \
117
\
118
brokerObject->setLastUpdate(myBroker->simTime()); \
119
if (!brokerObject->isPublishable()) \
120
{ \
121
brokerObject->setIsPublishable(isPortalPublishable( brokerObject )); \
122
} \
123
\
124
callObjectUpdateCallbacks( brokerObject ); \
125
\
126
if (brokerObject->isDropped()) \
127
{ \
128
return; \
129
} \
130
\
131
MAKVrExchange::DtPortalObjectPublisherTemplate<DtPortalObjectType>*publisher = \
132
static_cast<MAKVrExchange::DtPortalObjectPublisherTemplate<DtPortalObjectType>*> \
133
( brokerObject->publisherPtr() ); \
134
\
135
DtPortalObjectType& newSr = *(publisher->sr()); \
136
newSr.setKind(DtObjectKind); \
137
\
138
translate( &newSr, sr, *refObj ); \
139
\
140
if( myBroker->brokerInitializer()->oneToOneMapping() ) \
141
{ \
142
publisher->forceUpdate(); \
143
} \
144
\
145
if (myBroker->isTranslatorDebuggingOn( virtualTranslatorName() )) \
146
{ \
147
printIncomingOutgoingStateReps(sr, newSr, virtualTranslatorName()); \
148
} \
149
}
150
151
#define DT_DEFINE_HLA_CALLBACKS(DtTranslatorClass, DtHlaReflectedObjType, DtTemplates) \
152
DtTemplates \
153
void DtTranslatorClass::hlaObjectAddedCb(DtHlaReflectedObjType *reflectedObj, void *ud) \
154
{ \
155
DtTranslatorClass *et = (DtTranslatorClass*)ud; \
156
et->discoverHlaObject(reflectedObj); \
157
}; \
158
\
159
DtTemplates \
160
void DtTranslatorClass::hlaObjectUpdatedCb(DtHlaReflectedObjType *reflectedObj, void *ud) \
161
{ \
162
DtTranslatorClass *et = (DtTranslatorClass*)ud; \
163
et->receiveHlaUpdate(reflectedObj); \
164
}; \
165
\
166
DtTemplates \
167
void DtTranslatorClass::hlaObjectDeletedCb(DtHlaReflectedObjType *reflectedObj, void *ud) \
168
{ \
169
DtTranslatorClass *et = (DtTranslatorClass*)ud; \
170
et->removeHlaObject(reflectedObj); \
171
}
172
173
#define DT_DECLARE_INTERACTION_HLA_CALLBACKS(DtPortalInteractionType,DtInteractionType) \
174
virtual void createHlaInteraction(const DtPortalInteractionType& in); \
175
static void receiveHlaInteraction(DtInteractionType *inter, void *usr);
176
177
178
#define DT_DEFINE_CREATE_HLA_INTERACTION(DtTranslatorClass,DtPortalInteractionType,DtInteractionType) \
179
void DtTranslatorClass::createHlaInteraction(const DtPortalInteractionType& in) \
180
{ \
181
DtInteractionType out; \
182
out.setExConn(myBroker->hlaConnection(),0); \
183
\
184
translate( &out, in ); \
185
\
186
if (myBroker->isTranslatorDebuggingOn( virtualTranslatorName() )) \
187
{ \
188
printIncomingOutgoingInteractions( in, out); \
189
}\
190
myBroker->hlaConnection()->sendStamped(out); \
191
}
192
193
194
#define DT_DEFINE_RECEIVE_HLA_INTERACTION(DtTranslatorClass,DtInteractionType) \
195
void DtTranslatorClass::receiveHlaInteraction(DtInteractionType *inter, void *usr) \
196
{ \
197
DtTranslatorClass *trans = (DtTranslatorClass*)usr; \
198
trans->createPortalInteraction(*inter); \
199
}
200
201
202
Document ID: Generated on Tue Aug 7 22:07:13 EDT 2012 from SVN revision 117874
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (
www.mak.com
)