19 #include <TENA/Middleware/SDO/ID.h>
20 #include <TENA/Time/Includes.h>
22 #include <vlutil/vlMachineTypes.h>
26 class DtStateRepository;
28 namespace MAKVrExchange
31 namespace DtTenaBroker
43 DtTenaServantObject(){}
46 virtual ~DtTenaServantObject(){}
51 DtTenaServantObject(
const DtTenaServantObject& other );
54 DtTenaServantObject& operator = (
const DtTenaServantObject& other );
68 DtObjectInterface(DtExerciseConn *conn);
71 virtual ~DtObjectInterface();
74 virtual DtTenaServantObject* createServantObject( DtExerciseConn* exConn ) = 0;
77 virtual void processServantCleanup( DtTenaServantObject* servantObject ) = 0;
80 virtual void subscribe() = 0;
86 virtual bool needUpdate(
const DtStateRepository& rep,
87 const DtStateRepository& asSeenBy,
bool useThresholding =
true ) = 0;
91 virtual void decode(
const DtTenaServantObject* servant,
92 DtStateRepository* stateRep )
const = 0;
100 virtual void encode( DtTenaServantObject* servant,
const DtStateRepository* stateRep,
101 TENA::Time::Pointer timeForStamping,
bool forceUpdate =
false ) = 0;
104 virtual DtReflectedObject *createReflectedObject()
const = 0;
107 virtual void addObjectAdditionCallback( DtReflectedObjectCallbackFunction cb,
void* userData);
110 virtual void removeObjectAdditionCallback( DtReflectedObjectCallbackFunction cb,
void* userData);
113 virtual void addObjectRemovalCallback( DtReflectedObjectCallbackFunction cb,
void* userData);
116 virtual void removeObjectRemovalCallback( DtReflectedObjectCallbackFunction cb,
void* userData);
119 virtual void setReflectedObjectCreationFunction(DtCreateReflectedObjFn fn);
122 virtual void setDiscoveryCondition(DtDiscoveryCondition fn,
void* usr);
125 virtual void clearDiscoveryCondition();
130 void setUseTenaTimeForSets(
bool yesNo);
133 bool useTenaTimeForSets()
const;
138 virtual void executeAdditionCallbacks(DtReflectedObject* refObject);
141 virtual void executeRemovalCallbacks(DtReflectedObject* refObject);
145 virtual void addPublishedObject(TENA::Middleware::SDO::ID sdoId);
148 virtual void removePublishedObject(TENA::Middleware::SDO::ID);
151 virtual bool isPublished(TENA::Middleware::SDO::ID sdoId)
const;
153 bool readyToAdd(DtReflectedObject* obj);
157 typedef std::list<DtReflectedObjectCallbackInfo> ReflectedObjectCallbackList;
159 ReflectedObjectCallbackList myAdditionCallbackList;
160 ReflectedObjectCallbackList myRemovalCallbackList;
161 DtExerciseConn *myExConn;
162 DtCreateReflectedObjFn myCreateFunction;
163 std::set<TENA::Middleware::SDO::ID> myPublishedObjects;
164 DtDiscoveryCondition myDiscoveryCondition;
165 void* myDiscoveryConditionParameter;
166 bool myUseTenaTimeForSets;
175 #define DtDEFINE_CALLBACKINFO(localName) \
177 class localName##CallbackInfo \
180 localName##CallbackInfo(DtExerciseConn* exConn, localName##Interface* ptr): \
182 myInterface(ptr) {} \
184 localName##Interface* interface() {return myInterface;}; \
185 DtExerciseConn* exConn() {return myExConn;} \
187 DtExerciseConn* myExConn; \
188 localName##Interface* myInterface; \
191 typedef DCT::Utils::SmartPtr<localName##CallbackInfo> localName##CallbackInfoPtr;
196 #define DtDEFINE_DISCOVERY_CALLBACK(localName, omNamespace) \
197 class localName##DiscoveryCallback : \
198 public virtual TENA::Middleware::Callback::Callback \
201 localName##DiscoveryCallback( \
202 omNamespace::ProxyPtr const &proxy, \
203 localName##CallbackInfoPtr const & cbInfo ): \
207 virtual ~localName##DiscoveryCallback(){} \
211 myCbInfo->interface()->processAddition(myProxy); \
212 myCbInfo->exConn()->incrementNumberOfMessagesProcessed(); \
216 localName##CallbackInfoPtr myCbInfo; \
217 omNamespace::ProxyPtr myProxy; \
223 #define DtDEFINE_DISC_CALLBACK_FACTORY(localName, omNamespace) \
224 class localName##DiscoveryCallbackFactory : \
225 public virtual omNamespace::DiscoveryCallbackFactory \
228 localName##DiscoveryCallbackFactory(localName##CallbackInfoPtr const & pc): \
229 myCallbackInfoPtr( pc ) {} \
231 virtual ~localName##DiscoveryCallbackFactory() {} \
233 std::auto_ptr< TENA::Middleware::Callback::Callback > create( \
234 omNamespace::ProxyPtr const & proxy) \
236 return std::auto_ptr< TENA::Middleware::Callback::Callback >( \
237 new localName##DiscoveryCallback( proxy, myCallbackInfoPtr ) ); \
241 localName##CallbackInfoPtr myCallbackInfoPtr; \
247 #define DtDEFINE_STATE_CHANGE_CALLBACK(localName, omNamespace) \
248 class localName##StateChangeCallback : \
249 public virtual TENA::Middleware::Callback::Callback \
252 localName##StateChangeCallback( \
253 omNamespace::ProxyPtr const &proxy, \
254 localName##CallbackInfoPtr const & cbInfo ): \
258 virtual ~localName##StateChangeCallback(){} \
262 myCbInfo->interface()->processUpdate(myProxy); \
263 myCbInfo->exConn()->incrementNumberOfMessagesProcessed(); \
267 localName##CallbackInfoPtr myCbInfo; \
268 omNamespace::ProxyPtr myProxy; \
274 #define DtDEFINE_STATE_CHANGE_CALLBACK_FACTORY(localName, omNamespace) \
275 class localName##StateChangeCallbackFactory : \
276 public virtual omNamespace::StateChangeCallbackFactory \
279 localName##StateChangeCallbackFactory( \
280 localName##CallbackInfoPtr const & pc): myCallbackInfoPtr( pc) { } \
282 virtual ~localName##StateChangeCallbackFactory() {} \
284 std::auto_ptr< TENA::Middleware::Callback::Callback > create( \
285 omNamespace::ProxyPtr const & proxy) \
287 return std::auto_ptr< TENA::Middleware::Callback::Callback >( \
288 new localName##StateChangeCallback( proxy, myCallbackInfoPtr ) ); \
291 localName##CallbackInfoPtr myCallbackInfoPtr; \
298 #define DtDEFINE_DESTRUCTION_CALLBACK(localName, omNamespace) \
299 class localName##DestructionCallback : \
300 public virtual TENA::Middleware::Callback::Callback \
303 localName##DestructionCallback( omNamespace::ProxyPtr const &proxy, \
304 localName##CallbackInfoPtr const & cbInfo ): \
308 virtual ~localName##DestructionCallback(){} \
312 myCbInfo->interface()->processRemoval(myProxy); \
313 myCbInfo->exConn()->incrementNumberOfMessagesProcessed(); \
317 localName##CallbackInfoPtr myCbInfo; \
318 omNamespace::ProxyPtr myProxy; \
324 #define DtDEFINE_DESTRUCTION_CALLBACK_FACTORY(localName, omNamespace) \
325 class localName##DestructionCallbackFactory : \
326 public virtual omNamespace::DestructionCallbackFactory \
329 localName##DestructionCallbackFactory( \
330 localName##CallbackInfoPtr const & pc): \
331 myCallbackInfoPtr( pc ) {} \
333 virtual ~localName##DestructionCallbackFactory() {} \
335 std::auto_ptr< TENA::Middleware::Callback::Callback > create( \
336 omNamespace::ProxyPtr const & proxy) \
338 return std::auto_ptr< TENA::Middleware::Callback::Callback >( \
339 new localName##DestructionCallback( proxy, myCallbackInfoPtr ) ); \
343 localName##CallbackInfoPtr myCallbackInfoPtr; \
349 #define DtDEFINE_SUB_INFO_IMPL(localName, omNamespace) \
350 class localName##SubscriptionInfoImpl : public omNamespace::SubscriptionInfo \
353 localName##SubscriptionInfoImpl(): \
354 omNamespace::SubscriptionInfo( \
355 omNamespace::DiscoveryCallbackFactoryPtr( \
356 new omNamespace::NullDiscoveryCallbackFactory), \
357 omNamespace::StateChangeCallbackFactoryPtr( \
358 new omNamespace::NullStateChangeCallbackFactory), \
359 omNamespace::DestructionCallbackFactoryPtr( \
360 new omNamespace::NullDestructionCallbackFactory)) \
364 localName##SubscriptionInfoImpl(localName##CallbackInfoPtr const &cbInfo): \
365 omNamespace::SubscriptionInfo( \
366 omNamespace::DiscoveryCallbackFactoryPtr( \
367 new localName##DiscoveryCallbackFactory(cbInfo)), \
368 omNamespace::StateChangeCallbackFactoryPtr( \
369 new localName##StateChangeCallbackFactory(cbInfo)), \
370 omNamespace::DestructionCallbackFactoryPtr( \
371 new localName##DestructionCallbackFactory(cbInfo))) \
375 virtual ~localName##SubscriptionInfoImpl() {} \
382 #define DtDEFINE_SUB_INFO_IMPL_WITH_INHERITANCE(localName, omNamespace, inhOmNamespace) \
383 class localName##SubscriptionInfoImpl : public omNamespace::SubscriptionInfo \
386 localName##SubscriptionInfoImpl(): \
387 omNamespace::SubscriptionInfo( \
388 omNamespace::DiscoveryCallbackFactoryPtr( \
389 new omNamespace::NullDiscoveryCallbackFactory), \
390 omNamespace::StateChangeCallbackFactoryPtr( \
391 new omNamespace::NullStateChangeCallbackFactory), \
392 omNamespace::DestructionCallbackFactoryPtr( \
393 new omNamespace::NullDestructionCallbackFactory), \
394 inhOmNamespace::SubscriptionInfoPtr()) \
398 localName##SubscriptionInfoImpl(localName##CallbackInfoPtr const &cbInfo): \
399 omNamespace::SubscriptionInfo( \
400 omNamespace::DiscoveryCallbackFactoryPtr( \
401 new localName##DiscoveryCallbackFactory(cbInfo)), \
402 omNamespace::StateChangeCallbackFactoryPtr( \
403 new localName##StateChangeCallbackFactory(cbInfo)), \
404 omNamespace::DestructionCallbackFactoryPtr( \
405 new localName##DestructionCallbackFactory(cbInfo)), \
406 inhOmNamespace::SubscriptionInfoPtr()) \
409 virtual ~localName##SubscriptionInfoImpl() {} \