7 #ifndef tObjectInterface_H_
8 #define tObjectInterface_H_
12 #include <TENA/Time/Includes.h>
13 #include <TENA/Middleware/SDO/ID.h>
38 DtTenaServantObject(
const DtTenaServantObject& other);
41 DtTenaServantObject& operator=(
const DtTenaServantObject& other);
45 DtTenaServantObject(){}
48 virtual ~DtTenaServantObject(){}
63 virtual ~DtObjectInterface();
66 virtual DtTenaServantObject* createServantObject(
DtExerciseConn* exConn) =0;
69 virtual void processServantCleanup(DtTenaServantObject* servantObject) =0;
72 virtual void subscribe() = 0;
79 bool useThresholding =
true) = 0;
83 virtual void decode(
const DtTenaServantObject* servant,
DtStateRepository* stateRep)
const = 0;
91 virtual void encode(DtTenaServantObject* servant,
const DtStateRepository* stateRep,
92 TENA::Time::Pointer timeForStamping,
bool forceUpdate =
false) =0;
110 virtual void setReflectedObjectCreationFunction(DtCreateReflectedObjFn fn);
116 virtual void clearDiscoveryCondition();
121 void setUseTenaTimeForSets(
bool yesNo);
124 bool useTenaTimeForSets()
const;
136 virtual void addPublishedObject(TENA::Middleware::SDO::ID sdoId);
139 virtual void removePublishedObject(TENA::Middleware::SDO::ID);
142 virtual bool isPublished(TENA::Middleware::SDO::ID sdoId)
const;
148 typedef std::list<DtReflectedObjectCallbackInfo> ReflectedObjectCallbackList;
150 ReflectedObjectCallbackList myAdditionCallbackList;
151 ReflectedObjectCallbackList myRemovalCallbackList;
153 DtCreateReflectedObjFn myCreateFunction;
154 std::set<TENA::Middleware::SDO::ID> myPublishedObjects;
156 void* myDiscoveryConditionParameter;
157 bool myUseTenaTimeForSets;
162 #define DtDEFINE_CALLBACKINFO(localName) \
164 class localName##CallbackInfo \
167 localName##CallbackInfo(DtExerciseConn* exConn, localName##Interface* ptr): \
169 myInterface(ptr) {} \
171 localName##Interface* interface() {return myInterface;}; \
172 DtExerciseConn* exConn() {return myExConn;} \
174 DtExerciseConn* myExConn; \
175 localName##Interface* myInterface; \
178 typedef DCT::Utils::SmartPtr<localName##CallbackInfo> localName##CallbackInfoPtr;
183 #define DtDEFINE_DISCOVERY_CALLBACK(localName, omNamespace) \
184 class localName##DiscoveryCallback : \
185 public virtual TENA::Middleware::Callback::Callback \
188 localName##DiscoveryCallback( \
189 omNamespace::ProxyPtr const &proxy, \
190 localName##CallbackInfoPtr const & cbInfo ): \
194 virtual ~localName##DiscoveryCallback(){} \
198 myCbInfo->interface()->processAddition(myProxy); \
199 myCbInfo->exConn()->incrementNumberOfMessagesProcessed(); \
203 localName##CallbackInfoPtr myCbInfo; \
204 omNamespace::ProxyPtr myProxy; \
210 #define DtDEFINE_DISC_CALLBACK_FACTORY(localName, omNamespace) \
211 class localName##DiscoveryCallbackFactory : \
212 public virtual omNamespace::DiscoveryCallbackFactory \
215 localName##DiscoveryCallbackFactory(localName##CallbackInfoPtr const & pc): \
216 myCallbackInfoPtr( pc ) {} \
218 virtual ~localName##DiscoveryCallbackFactory() {} \
220 std::auto_ptr< TENA::Middleware::Callback::Callback > create( \
221 omNamespace::ProxyPtr const & proxy) \
223 return std::auto_ptr< TENA::Middleware::Callback::Callback >( \
224 new localName##DiscoveryCallback( proxy, myCallbackInfoPtr ) ); \
228 localName##CallbackInfoPtr myCallbackInfoPtr; \
234 #define DtDEFINE_STATE_CHANGE_CALLBACK(localName, omNamespace) \
235 class localName##StateChangeCallback : \
236 public virtual TENA::Middleware::Callback::Callback \
239 localName##StateChangeCallback( \
240 omNamespace::ProxyPtr const &proxy, \
241 localName##CallbackInfoPtr const & cbInfo ): \
245 virtual ~localName##StateChangeCallback(){} \
249 myCbInfo->interface()->processUpdate(myProxy); \
250 myCbInfo->exConn()->incrementNumberOfMessagesProcessed(); \
254 localName##CallbackInfoPtr myCbInfo; \
255 omNamespace::ProxyPtr myProxy; \
261 #define DtDEFINE_STATE_CHANGE_CALLBACK_FACTORY(localName, omNamespace) \
262 class localName##StateChangeCallbackFactory : \
263 public virtual omNamespace::StateChangeCallbackFactory \
266 localName##StateChangeCallbackFactory( \
267 localName##CallbackInfoPtr const & pc): myCallbackInfoPtr( pc) { } \
269 virtual ~localName##StateChangeCallbackFactory() {} \
271 std::auto_ptr< TENA::Middleware::Callback::Callback > create( \
272 omNamespace::ProxyPtr const & proxy) \
274 return std::auto_ptr< TENA::Middleware::Callback::Callback >( \
275 new localName##StateChangeCallback( proxy, myCallbackInfoPtr ) ); \
278 localName##CallbackInfoPtr myCallbackInfoPtr; \
285 #define DtDEFINE_DESTRUCTION_CALLBACK(localName, omNamespace) \
286 class localName##DestructionCallback : \
287 public virtual TENA::Middleware::Callback::Callback \
290 localName##DestructionCallback( omNamespace::ProxyPtr const &proxy, \
291 localName##CallbackInfoPtr const & cbInfo ): \
295 virtual ~localName##DestructionCallback(){} \
299 myCbInfo->interface()->processRemoval(myProxy); \
300 myCbInfo->exConn()->incrementNumberOfMessagesProcessed(); \
304 localName##CallbackInfoPtr myCbInfo; \
305 omNamespace::ProxyPtr myProxy; \
311 #define DtDEFINE_DESTRUCTION_CALLBACK_FACTORY(localName, omNamespace) \
312 class localName##DestructionCallbackFactory : \
313 public virtual omNamespace::DestructionCallbackFactory \
316 localName##DestructionCallbackFactory( \
317 localName##CallbackInfoPtr const & pc): \
318 myCallbackInfoPtr( pc ) {} \
320 virtual ~localName##DestructionCallbackFactory() {} \
322 std::auto_ptr< TENA::Middleware::Callback::Callback > create( \
323 omNamespace::ProxyPtr const & proxy) \
325 return std::auto_ptr< TENA::Middleware::Callback::Callback >( \
326 new localName##DestructionCallback( proxy, myCallbackInfoPtr ) ); \
330 localName##CallbackInfoPtr myCallbackInfoPtr; \
336 #define DtDEFINE_SUB_INFO_IMPL(localName, omNamespace) \
337 class localName##SubscriptionInfoImpl : public omNamespace::SubscriptionInfo \
340 localName##SubscriptionInfoImpl(): \
341 omNamespace::SubscriptionInfo( \
342 omNamespace::DiscoveryCallbackFactoryPtr( \
343 new omNamespace::NullDiscoveryCallbackFactory), \
344 omNamespace::StateChangeCallbackFactoryPtr( \
345 new omNamespace::NullStateChangeCallbackFactory), \
346 omNamespace::DestructionCallbackFactoryPtr( \
347 new omNamespace::NullDestructionCallbackFactory)) \
351 localName##SubscriptionInfoImpl(localName##CallbackInfoPtr const &cbInfo): \
352 omNamespace::SubscriptionInfo( \
353 omNamespace::DiscoveryCallbackFactoryPtr( \
354 new localName##DiscoveryCallbackFactory(cbInfo)), \
355 omNamespace::StateChangeCallbackFactoryPtr( \
356 new localName##StateChangeCallbackFactory(cbInfo)), \
357 omNamespace::DestructionCallbackFactoryPtr( \
358 new localName##DestructionCallbackFactory(cbInfo))) \
362 virtual ~localName##SubscriptionInfoImpl() {} \
369 #define DtDEFINE_SUB_INFO_IMPL_WITH_INHERITANCE(localName, omNamespace, inhOmNamespace) \
370 class localName##SubscriptionInfoImpl : public omNamespace::SubscriptionInfo \
373 localName##SubscriptionInfoImpl(): \
374 omNamespace::SubscriptionInfo( \
375 omNamespace::DiscoveryCallbackFactoryPtr( \
376 new omNamespace::NullDiscoveryCallbackFactory), \
377 omNamespace::StateChangeCallbackFactoryPtr( \
378 new omNamespace::NullStateChangeCallbackFactory), \
379 omNamespace::DestructionCallbackFactoryPtr( \
380 new omNamespace::NullDestructionCallbackFactory), \
381 inhOmNamespace::SubscriptionInfoPtr()) \
385 localName##SubscriptionInfoImpl(localName##CallbackInfoPtr const &cbInfo): \
386 omNamespace::SubscriptionInfo( \
387 omNamespace::DiscoveryCallbackFactoryPtr( \
388 new localName##DiscoveryCallbackFactory(cbInfo)), \
389 omNamespace::StateChangeCallbackFactoryPtr( \
390 new localName##StateChangeCallbackFactory(cbInfo)), \
391 omNamespace::DestructionCallbackFactoryPtr( \
392 new localName##DestructionCallbackFactory(cbInfo)), \
393 inhOmNamespace::SubscriptionInfoPtr()) \
396 virtual ~localName##SubscriptionInfoImpl() {} \