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

RtcSubscriber.h

説明を見る。
00001 // -*- C++ -*-
00019 /*
00020  * $Log: RtcSubscriber.h,v $
00021  * Revision 1.1.1.1  2005/05/12 09:06:18  n-ando
00022  * Public release.
00023  *
00024  *
00025  */
00026 
00027 #ifndef RtcSubscriber_h
00028 #define RtcSubscriber_h
00029 
00030 #include <ace/Task.h>
00031 #include <ace/Thread.h>
00032 #include <ace/Synch.h>
00033 #include "rtm/RtcOutPortBase.h"
00034 #include "rtm/RtcInPortBase.h"
00035 
00036 namespace RTM {
00037   //============================================================
00067   class SubscriberBase
00068         : public ACE_Task<ACE_MT_SYNCH>
00069   {
00070   public:
00090         SubscriberBase(OutPortBase* parent, InPort_ptr inport,
00091                                    const SubscriptionID id, SubscriberProfile profile);
00092 
00100         ~SubscriberBase();
00101         
00109         virtual int open(void *args);
00110 
00118         virtual int close(unsigned long flags);
00119 
00127         virtual int svc(void) = 0;
00128         
00136         virtual bool update() = 0;
00137         
00145         virtual void release();
00146 
00154         virtual SubscriberProfile get_profile();
00155 
00163         virtual InPort_ptr get_inport();
00164 
00172         virtual std::string get_id();
00173 
00181         inline bool is_running();
00182 
00192         virtual void stop_thread();
00193 
00194   protected:
00196         SubscriberProfile m_Profile;
00197         
00199         InPort_ptr m_pInPort;
00200         
00202         OutPortBase* m_pParent;
00203         
00205         //const SubscriptionID m_Id;
00206         std::string m_Id;
00207 
00209         bool m_Running;
00210 
00211         struct NewData
00212         {
00213           NewData() : m_Cond(m_Mutex), m_Updated(false) {};
00214           bool m_Updated;
00215           ACE_Thread_Mutex m_Mutex;
00216           ACE_Condition<ACE_Thread_Mutex> m_Cond;
00217         };
00218 
00219         // A condition variable for data update notification 
00220         NewData m_NewData;
00221 
00222   };
00223 
00224 
00225   //============================================================
00232   class SubscriberOnce
00233         : public SubscriberBase 
00234   {
00235   public:
00236         SubscriberOnce(OutPortBase* parent, InPort_ptr inport,
00237                                    const SubscriptionID id, SubscriberProfile profile);
00238         virtual bool update();
00239         virtual int svc(void);
00240 
00241   };
00242   
00243 
00250   class SubscriberPeriodic
00251         : public SubscriberBase
00252   {
00253   public:
00254         SubscriberPeriodic(OutPortBase* parent, InPort_ptr inport,
00255                                            const SubscriptionID id, SubscriberProfile profile);
00256         virtual bool update();
00257         virtual int svc(void);
00258   };
00259 
00260 
00261   //============================================================
00268   class SubscriberNew
00269         : public SubscriberBase
00270   {
00271   public:
00272         SubscriberNew(OutPortBase* parent, InPort_ptr inport,
00273                                   const SubscriptionID id, SubscriberProfile profile);
00274         virtual bool update();
00275         virtual int svc(void);
00276   };
00277 
00278 
00279   //============================================================
00286   class SubscriberTriggerd
00287         : public SubscriberBase
00288   {
00289   public:
00290         SubscriberTriggerd(OutPortBase* parent, InPort_ptr inport,
00291                                            const SubscriptionID id, SubscriberProfile profile);
00292         virtual bool update(){};
00293         virtual int svc (void){};
00294   };
00295 
00296 
00297   //============================================================
00304   class SubscriberPeriodicNew
00305         : public SubscriberBase
00306   {
00307   public:
00308         SubscriberPeriodicNew(OutPortBase* parent, InPort_ptr inport,
00309                                                   const SubscriptionID id, SubscriberProfile profile);
00310         virtual bool update(){};
00311         virtual int svc (void){};
00312   };
00313 
00314 
00315   //============================================================
00322   class SubscriberNewPeriodic
00323         : public SubscriberBase
00324   {
00325   public:
00326         SubscriberNewPeriodic(OutPortBase* parent, InPort_ptr inport,
00327                                                   const SubscriptionID id, SubscriberProfile profile);
00328         virtual bool update(){};
00329         virtual int svc (void){};
00330   };
00331 
00332 
00333 
00334   //============================================================
00341   class SubscriberPeriodicTriggerd
00342         : public SubscriberBase
00343   {
00344   public:
00345         SubscriberPeriodicTriggerd(OutPortBase* parent, InPort_ptr inport,
00346                                                            const SubscriptionID id, SubscriberProfile profile);
00347         virtual bool update(){};
00348         virtual int svc (void){};
00349   };
00350 
00351 
00352 
00353   //============================================================
00360   class SubscriberTriggerdPeriodic
00361         : public SubscriberBase
00362   {
00363   public:
00364         SubscriberTriggerdPeriodic(OutPortBase* parent, InPort_ptr inport,
00365                                                            const SubscriptionID id, SubscriberProfile profile);
00366         virtual bool update(){};
00367         virtual int svc (void){};
00368   };
00369 
00370 
00371 
00372 
00373 
00374 }; // end of namespace RTM
00375 
00376 
00377 
00378 #endif // end of __RtcSubscriber_h__

OpenRTMに対してMon May 23 03:13:42 2005に生成されました。 doxygen 1.3.6