メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ

RtcSubscriber.h

説明を見る。
00001 // -*- C++ -*-
00019 /*
00020  * $Log: RtcSubscriber.h,v $
00021  * Revision 1.3  2005/05/27 07:36:44  n-ando
00022  * - InPort/OutPort interface was changed.
00023  *   InPort/OutPort share SubscriptionProfile structure.
00024  *   InPort uses SubsProfileBase object, OutPort uses SubscriberBase object.
00025  *
00026  * Revision 1.2  2005/05/16 06:39:02  n-ando
00027  * - Subscriber* classes were DLL exported for Windows port.
00028  *
00029  * Revision 1.1.1.1  2005/05/12 09:06:18  n-ando
00030  * Public release.
00031  *
00032  *
00033  */
00034 
00035 #ifndef RtcSubscriber_h
00036 #define RtcSubscriber_h
00037 
00038 #include <string>
00039 #include <list>
00040 #include <ace/Task.h>
00041 #include <ace/Thread.h>
00042 #include <ace/Synch.h>
00043 
00044 #include "rtm/RTC.h"
00045 #include "rtm/idl/RTCSubscriptionSkel.h"
00046 
00047 namespace RTM {
00048   class OutPortBase;
00049   
00050   class EXPORTS SubsProfileBase
00051   {
00052   public:
00053         SubsProfileBase(SubscriptionProfile& subs);
00054         virtual ~SubsProfileBase(){};
00055 
00056         virtual SubscriptionProfile getSubsProfile();
00057         virtual void setSubsProfile(SubscriptionProfile& subs);
00058 
00059         virtual SubscriptionType getType();
00060         virtual bool setType(SubscriptionType type);
00061 
00062         virtual SubscriptionID getId();
00063         virtual bool setId(const char* id);
00064         virtual bool setId(std::string id);
00065 
00066         virtual InPort_ptr getInPort();
00067         virtual bool setInPort(InPort_ptr in_port);
00068 
00069         virtual OutPort_ptr getOutPort();
00070         virtual bool setOutPort(OutPort_ptr out_port);
00071 
00072         virtual bool getEventBase();
00073         virtual bool setEventBase(bool event_base);
00074 
00075   protected:
00076         SubscriptionProfile m_Profile;
00077   };
00078 
00079 
00080   //============================================================
00110   class SubscriberBase
00111         : public SubsProfileBase, public ACE_Task<ACE_MT_SYNCH>
00112   {
00113   public:
00134         SubscriberBase(RTM::OutPortBase* parent, SubscriptionProfile& profile);
00135 
00143         ~SubscriberBase();
00144         
00152         virtual int open(void *args);
00153 
00161         virtual int close(unsigned long flags);
00162 
00170         virtual int svc(void) = 0;
00171         
00179         virtual bool update() = 0;
00180         
00188         virtual void release();
00189 
00197         //virtual SubscriberProfile get_profile();
00198 
00206         //virtual InPort_ptr get_inport();
00207 
00215         //virtual std::string get_id();
00216 
00224         inline bool is_running();
00225 
00235         virtual void stop_thread();
00236 
00237   protected:
00239         //      SubscriberProfile m_Profile;
00240         
00242         //      InPort_ptr m_pInPort;
00243         
00245         RTM::OutPortBase* m_pParent;
00246         
00248         //const SubscriptionID m_Id;
00249         //      std::string m_Id;
00250 
00252         bool m_Running;
00253 
00254         struct NewData
00255         {
00256           NewData() : m_Cond(m_Mutex), m_Updated(false) {};
00257           bool m_Updated;
00258           ACE_Thread_Mutex m_Mutex;
00259           ACE_Condition<ACE_Thread_Mutex> m_Cond;
00260         };
00261 
00262         // A condition variable for data update notification 
00263         NewData m_NewData;
00264 
00265   };
00266 
00267 
00268   //============================================================
00275   class EXPORTS SubscriberOnce
00276         : public SubscriberBase
00277   {
00278   public:
00279         SubscriberOnce(RTM::OutPortBase* parent,
00280                                    SubscriptionProfile& profile);
00281         virtual bool update();
00282         virtual int svc(void);
00283 
00284   };
00285   
00286 
00293   class EXPORTS SubscriberPeriodic
00294         : public SubscriberBase
00295   {
00296   public:
00297         SubscriberPeriodic(RTM::OutPortBase* parent,
00298                                            SubscriptionProfile& profile);
00299         virtual bool update();
00300         virtual int svc(void);
00301   };
00302 
00303 
00304   //============================================================
00311   class EXPORTS SubscriberNew
00312         : public SubscriberBase
00313   {
00314   public:
00315         SubscriberNew(RTM::OutPortBase* parent,
00316                                   SubscriptionProfile& profile);
00317         virtual bool update();
00318         virtual int svc(void);
00319   };
00320 
00321 
00322   //============================================================
00329   class EXPORTS SubscriberTriggerd
00330         : public SubscriberBase
00331   {
00332   public:
00333         SubscriberTriggerd(RTM::OutPortBase* parent,
00334                                            SubscriptionProfile& profile);
00335         virtual bool update(){return true;};
00336         virtual int svc (void){return 0;};
00337   };
00338 
00339 
00340   //============================================================
00347   class EXPORTS SubscriberPeriodicNew
00348         : public SubscriberBase
00349   {
00350   public:
00351         SubscriberPeriodicNew(RTM::OutPortBase* parent,
00352                                                   SubscriptionProfile& profile);
00353         virtual bool update(){return true;};
00354         virtual int svc (void){return 0;};
00355   };
00356 
00357 
00358   //============================================================
00365   class EXPORTS SubscriberNewPeriodic
00366         : public SubscriberBase
00367   {
00368   public:
00369         SubscriberNewPeriodic(RTM::OutPortBase* parent,
00370                                                   SubscriptionProfile& profile);
00371         virtual bool update(){return true;};
00372         virtual int svc (void){return 0;};
00373   };
00374 
00375 
00376 
00377   //============================================================
00384   class EXPORTS SubscriberPeriodicTriggerd
00385         : public SubscriberBase
00386   {
00387   public:
00388         SubscriberPeriodicTriggerd(RTM::OutPortBase* parent,
00389                                                            SubscriptionProfile& profile);
00390         virtual bool update(){return true;};
00391         virtual int svc (void){return 0;};
00392   };
00393 
00394 
00395 
00396   //============================================================
00403   class EXPORTS SubscriberTriggerdPeriodic
00404         : public SubscriberBase
00405   {
00406   public:
00407         SubscriberTriggerdPeriodic(RTM::OutPortBase* parent,
00408                                                            SubscriptionProfile& profile);
00409         virtual bool update(){return true;};
00410         virtual int svc (void){return 0;};
00411   };
00412 
00413 
00414 
00415 
00416 
00417 }; // end of namespace RTM
00418 
00419 
00420 
00421 #endif // end of __RtcSubscriber_h__

OpenRTMに対してSun Nov 5 06:15:05 2006に生成されました。  doxygen 1.4.1