VR-Link API Documentation for HLA 1516
tObjectInterface.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 *********************************************************************/
00005 
00006 
00007 #ifndef tObjectInterface_H_
00008 #define tObjectInterface_H_
00009 
00010 #if DtTENA
00011 
00012 #include <TENA/Time/Includes.h>
00013 #include <TENA/Middleware/SDO/ID.h>
00014 
00015 #include <vlutil/vlMachineTypes.h>
00016 #include "refObjCbInfo.h"
00017 #include "tReflectedObj.h"
00018 #include "tRefObjList.h"
00019 #include <list>
00020 
00025 
00026 class DT_DLL_VL DtExerciseConn;
00027 class DT_DLL_VL DtStateRepository;
00028 
00029 
00030 
00033 class DT_DLL_VL DtTenaServantObject
00034 {
00035 
00036 private:
00038    DtTenaServantObject(const DtTenaServantObject& other);
00039 
00041    DtTenaServantObject& operator=(const DtTenaServantObject& other);
00042 
00043 public:
00045    DtTenaServantObject(){}
00046 
00048    virtual ~DtTenaServantObject(){}
00049 
00050 };
00051 
00056 class DT_DLL_VL DtObjectInterface 
00057 {
00058 public:
00060    DtObjectInterface(DtExerciseConn *conn);
00061 
00063    virtual ~DtObjectInterface();
00064 
00066    virtual DtTenaServantObject* createServantObject(DtExerciseConn* exConn) =0;
00067    
00069    virtual void processServantCleanup(DtTenaServantObject* servantObject) =0;
00070    
00072    virtual void subscribe() = 0;
00073 
00078    virtual bool needUpdate(const DtStateRepository& rep, const DtStateRepository& asSeenBy,
00079       bool useThresholding = true) = 0;
00080    
00083    virtual void decode(const DtTenaServantObject* servant, DtStateRepository* stateRep)const = 0;
00084    
00091    virtual void encode(DtTenaServantObject* servant, const DtStateRepository* stateRep,
00092                        TENA::Time::Pointer timeForStamping, bool forceUpdate = false) =0;
00093 
00095    virtual DtReflectedObject *createReflectedObject()const =0;
00096 
00098    virtual void addObjectAdditionCallback( DtReflectedObjectCallbackFunction cb, void* userData);
00099    
00101    virtual void removeObjectAdditionCallback( DtReflectedObjectCallbackFunction cb, void* userData);
00102    
00104    virtual void addObjectRemovalCallback( DtReflectedObjectCallbackFunction cb, void* userData);
00105    
00107    virtual void removeObjectRemovalCallback( DtReflectedObjectCallbackFunction cb, void* userData);
00108 
00110    virtual void setReflectedObjectCreationFunction(DtCreateReflectedObjFn fn);
00111    
00113    virtual void setDiscoveryCondition(DtDiscoveryCondition fn, void* usr);
00114    
00116    virtual void clearDiscoveryCondition();
00117 
00121    void setUseTenaTimeForSets(bool yesNo);
00122 
00124    bool useTenaTimeForSets() const;
00125 
00126 protected:
00127 
00129    virtual void executeAdditionCallbacks(DtReflectedObject* refObject);
00130 
00132    virtual void executeRemovalCallbacks(DtReflectedObject* refObject);
00133 
00136    virtual void addPublishedObject(TENA::Middleware::SDO::ID sdoId);
00137 
00139    virtual void removePublishedObject(TENA::Middleware::SDO::ID);
00140 
00142    virtual bool isPublished(TENA::Middleware::SDO::ID sdoId) const;
00143 
00144    bool readyToAdd(DtReflectedObject* obj);
00145 
00146 
00147 protected:
00148     typedef std::list<DtReflectedObjectCallbackInfo> ReflectedObjectCallbackList;
00149 
00150     ReflectedObjectCallbackList myAdditionCallbackList;
00151     ReflectedObjectCallbackList myRemovalCallbackList;
00152     DtExerciseConn *myExConn;
00153     DtCreateReflectedObjFn myCreateFunction;
00154     std::set<TENA::Middleware::SDO::ID> myPublishedObjects;
00155     DtDiscoveryCondition myDiscoveryCondition;
00156     void* myDiscoveryConditionParameter;
00157     bool myUseTenaTimeForSets;
00158 };
00159 
00162 #define DtDEFINE_CALLBACKINFO(localName)                                       \
00163                                                                                \
00164 class localName##CallbackInfo                                                  \
00165 {                                                                              \
00166 public:                                                                        \
00167    localName##CallbackInfo(DtExerciseConn* exConn, localName##Interface* ptr): \
00168       myExConn(exConn),                                                        \
00169       myInterface(ptr) {}                                                      \
00170                                                                                \
00171    localName##Interface* interface() {return myInterface;};                    \
00172    DtExerciseConn* exConn() {return myExConn;}                                 \
00173 protected:                                                                     \
00174    DtExerciseConn*       myExConn;                                             \
00175    localName##Interface* myInterface;                                          \
00176 };                                                                             \
00177                                                                                \
00178 typedef DCT::Utils::SmartPtr<localName##CallbackInfo> localName##CallbackInfoPtr;
00179 
00183 #define DtDEFINE_DISCOVERY_CALLBACK(localName, omNamespace)                    \
00184 class localName##DiscoveryCallback :                                           \
00185    public virtual TENA::Middleware::Callback::Callback                         \
00186 {                                                                              \
00187 public:                                                                        \
00188    localName##DiscoveryCallback(                                               \
00189       omNamespace::ProxyPtr const &proxy,                                      \
00190       localName##CallbackInfoPtr const & cbInfo ):                             \
00191          myCbInfo(cbInfo),                                                     \
00192          myProxy(proxy) { }                                                    \
00193                                                                                \
00194       virtual ~localName##DiscoveryCallback(){}                                \
00195                                                                                \
00196       void execute()                                                           \
00197       {                                                                        \
00198          myCbInfo->interface()->processAddition(myProxy);                      \
00199          myCbInfo->exConn()->incrementNumberOfMessagesProcessed();             \
00200       }                                                                        \
00201                                                                                \
00202 protected:                                                                     \
00203    localName##CallbackInfoPtr  myCbInfo;                                       \
00204    omNamespace::ProxyPtr myProxy;                                              \
00205 };
00206 
00210 #define DtDEFINE_DISC_CALLBACK_FACTORY(localName, omNamespace)                 \
00211 class localName##DiscoveryCallbackFactory :                                    \
00212    public virtual omNamespace::DiscoveryCallbackFactory                        \
00213 {                                                                              \
00214 public:                                                                        \
00215    localName##DiscoveryCallbackFactory(localName##CallbackInfoPtr const & pc): \
00216       myCallbackInfoPtr( pc ) {}                                               \
00217                                                                                \
00218    virtual ~localName##DiscoveryCallbackFactory() {}                           \
00219                                                                                \
00220    std::auto_ptr< TENA::Middleware::Callback::Callback > create(               \
00221       omNamespace::ProxyPtr const & proxy)                                     \
00222    {                                                                           \
00223       return std::auto_ptr< TENA::Middleware::Callback::Callback >(            \
00224          new localName##DiscoveryCallback( proxy, myCallbackInfoPtr ) );       \
00225    }                                                                           \
00226                                                                                \
00227 protected:                                                                     \
00228    localName##CallbackInfoPtr myCallbackInfoPtr;                               \
00229 };
00230 
00234 #define DtDEFINE_STATE_CHANGE_CALLBACK(localName, omNamespace)                 \
00235 class localName##StateChangeCallback :                                         \
00236    public virtual TENA::Middleware::Callback::Callback                         \
00237 {                                                                              \
00238 public:                                                                        \
00239    localName##StateChangeCallback(                                             \
00240       omNamespace::ProxyPtr const &proxy,                                      \
00241       localName##CallbackInfoPtr const & cbInfo ):                             \
00242          myCbInfo(cbInfo),                                                     \
00243          myProxy(proxy) { }                                                    \
00244                                                                                \
00245    virtual ~localName##StateChangeCallback(){}                                 \
00246                                                                                \
00247    void execute()                                                              \
00248    {                                                                           \
00249       myCbInfo->interface()->processUpdate(myProxy);                           \
00250       myCbInfo->exConn()->incrementNumberOfMessagesProcessed();                \
00251    }                                                                           \
00252                                                                                \
00253 protected:                                                                     \
00254    localName##CallbackInfoPtr  myCbInfo;                                       \
00255    omNamespace::ProxyPtr myProxy;                                              \
00256 };
00257 
00261 #define DtDEFINE_STATE_CHANGE_CALLBACK_FACTORY(localName, omNamespace)         \
00262 class localName##StateChangeCallbackFactory :                                  \
00263    public virtual omNamespace::StateChangeCallbackFactory                      \
00264 {                                                                              \
00265 public:                                                                        \
00266    localName##StateChangeCallbackFactory(                                      \
00267       localName##CallbackInfoPtr const & pc): myCallbackInfoPtr( pc) { }       \
00268                                                                                \
00269    virtual ~localName##StateChangeCallbackFactory() {}                         \
00270                                                                                \
00271    std::auto_ptr< TENA::Middleware::Callback::Callback > create(               \
00272       omNamespace::ProxyPtr const & proxy)                                     \
00273    {                                                                           \
00274       return std::auto_ptr< TENA::Middleware::Callback::Callback >(            \
00275          new localName##StateChangeCallback( proxy, myCallbackInfoPtr ) );     \
00276    }                                                                           \
00277 protected:                                                                     \
00278    localName##CallbackInfoPtr myCallbackInfoPtr;                               \
00279 };
00280 
00281 
00285 #define DtDEFINE_DESTRUCTION_CALLBACK(localName, omNamespace)                  \
00286 class localName##DestructionCallback :                                         \
00287    public virtual TENA::Middleware::Callback::Callback                         \
00288 {                                                                              \
00289 public:                                                                        \
00290    localName##DestructionCallback( omNamespace::ProxyPtr const &proxy,         \
00291       localName##CallbackInfoPtr const & cbInfo ):                             \
00292          myCbInfo(cbInfo),                                                     \
00293          myProxy(proxy) { }                                                    \
00294                                                                                \
00295    virtual ~localName##DestructionCallback(){}                                 \
00296                                                                                \
00297    void execute()                                                              \
00298    {                                                                           \
00299       myCbInfo->interface()->processRemoval(myProxy);                          \
00300       myCbInfo->exConn()->incrementNumberOfMessagesProcessed();                \
00301    }                                                                           \
00302                                                                                \
00303 protected:                                                                     \
00304    localName##CallbackInfoPtr  myCbInfo;                                       \
00305    omNamespace::ProxyPtr myProxy;                                              \
00306 };
00307 
00311 #define DtDEFINE_DESTRUCTION_CALLBACK_FACTORY(localName, omNamespace)          \
00312 class localName##DestructionCallbackFactory :                                  \
00313    public virtual omNamespace::DestructionCallbackFactory                      \
00314 {                                                                              \
00315 public:                                                                        \
00316    localName##DestructionCallbackFactory(                                      \
00317       localName##CallbackInfoPtr const & pc):                                  \
00318          myCallbackInfoPtr( pc ) {}                                            \
00319                                                                                \
00320    virtual ~localName##DestructionCallbackFactory() {}                         \
00321                                                                                \
00322    std::auto_ptr< TENA::Middleware::Callback::Callback > create(               \
00323       omNamespace::ProxyPtr const & proxy)                                     \
00324    {                                                                           \
00325       return std::auto_ptr< TENA::Middleware::Callback::Callback >(            \
00326          new localName##DestructionCallback( proxy, myCallbackInfoPtr ) );     \
00327    }                                                                           \
00328                                                                                \
00329 protected:                                                                     \
00330    localName##CallbackInfoPtr myCallbackInfoPtr;                               \
00331 };
00332 
00336 #define DtDEFINE_SUB_INFO_IMPL(localName, omNamespace)                         \
00337 class localName##SubscriptionInfoImpl : public omNamespace::SubscriptionInfo   \
00338 {                                                                              \
00339 public:                                                                        \
00340    localName##SubscriptionInfoImpl():                                          \
00341       omNamespace::SubscriptionInfo(                                           \
00342          omNamespace::DiscoveryCallbackFactoryPtr(                             \
00343             new omNamespace::NullDiscoveryCallbackFactory),                    \
00344          omNamespace::StateChangeCallbackFactoryPtr(                           \
00345             new omNamespace::NullStateChangeCallbackFactory),                  \
00346          omNamespace::DestructionCallbackFactoryPtr(                           \
00347             new omNamespace::NullDestructionCallbackFactory))                  \
00348    {                                                                           \
00349    }                                                                           \
00350                                                                                \
00351    localName##SubscriptionInfoImpl(localName##CallbackInfoPtr const &cbInfo):  \
00352       omNamespace::SubscriptionInfo(                                           \
00353          omNamespace::DiscoveryCallbackFactoryPtr(                             \
00354             new localName##DiscoveryCallbackFactory(cbInfo)),                  \
00355          omNamespace::StateChangeCallbackFactoryPtr(                           \
00356             new localName##StateChangeCallbackFactory(cbInfo)),                \
00357          omNamespace::DestructionCallbackFactoryPtr(                           \
00358             new localName##DestructionCallbackFactory(cbInfo)))                \
00359    {                                                                           \
00360    }                                                                           \
00361                                                                                \
00362    virtual ~localName##SubscriptionInfoImpl() {}                               \
00363 };
00364 
00369 #define DtDEFINE_SUB_INFO_IMPL_WITH_INHERITANCE(localName, omNamespace, inhOmNamespace) \
00370 class localName##SubscriptionInfoImpl : public omNamespace::SubscriptionInfo            \
00371 {                                                                                       \
00372 public:                                                                                 \
00373    localName##SubscriptionInfoImpl():                                                   \
00374       omNamespace::SubscriptionInfo(                                                    \
00375          omNamespace::DiscoveryCallbackFactoryPtr(                                      \
00376             new omNamespace::NullDiscoveryCallbackFactory),                             \
00377          omNamespace::StateChangeCallbackFactoryPtr(                                    \
00378             new omNamespace::NullStateChangeCallbackFactory),                           \
00379          omNamespace::DestructionCallbackFactoryPtr(                                    \
00380             new omNamespace::NullDestructionCallbackFactory),                           \
00381          inhOmNamespace::SubscriptionInfoPtr())                                         \
00382       {                                                                                 \
00383       }                                                                                 \
00384                                                                                         \
00385    localName##SubscriptionInfoImpl(localName##CallbackInfoPtr const &cbInfo):           \
00386       omNamespace::SubscriptionInfo(                                                    \
00387          omNamespace::DiscoveryCallbackFactoryPtr(                                      \
00388             new localName##DiscoveryCallbackFactory(cbInfo)),                           \
00389          omNamespace::StateChangeCallbackFactoryPtr(                                    \
00390             new localName##StateChangeCallbackFactory(cbInfo)),                         \
00391          omNamespace::DestructionCallbackFactoryPtr(                                    \
00392             new  localName##DestructionCallbackFactory(cbInfo)),                        \
00393          inhOmNamespace::SubscriptionInfoPtr())                                         \
00394       {                                                                                 \
00395       }                                                                                 \
00396       virtual ~localName##SubscriptionInfoImpl() {}                                     \
00397 };
00398 
00399 
00400 #endif
00401 #endif
00402 

Document ID: Generated on Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)