Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

RtcSubscriber.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00013 #ifndef __RtcSubscriber_h__
00014 #define __RtcSubscriber_h__
00015 
00016 #include <ace/Task.h>
00017 #include <ace/Thread.h>
00018 #include <ace/Synch.h>
00019 #include "rtm/RtcOutPortBase.h"
00020 #include "rtm/RtcInPortBase.h"
00021 
00022 namespace RTM {
00023   //============================================================
00053   class SubscriberBase
00054         : public ACE_Task<ACE_MT_SYNCH>
00055   {
00056   public:
00076         SubscriberBase(OutPortBase* parent, InPort_ptr inport,
00077                                    const SubscriptionID id, SubscriberProfile profile);
00078 
00086         ~SubscriberBase();
00087         
00095         virtual int open(void *args);
00096 
00104         virtual int svc(void) = 0;
00105         
00113         virtual bool update() = 0;
00114         
00122         virtual void release();
00123 
00131         virtual SubscriberProfile get_profile();
00132 
00140         virtual InPort_ptr get_inport();
00141 
00149         virtual std::string get_id();
00150 
00151   protected:
00153         SubscriberProfile m_Profile;
00154         
00156         InPort_ptr m_pInPort;
00157         
00159         OutPortBase* m_pParent;
00160         
00162         //const SubscriptionID m_Id;
00163         std::string m_Id;
00164         
00165 
00166         struct NewData
00167         {
00168           NewData() : m_Cond(m_Mutex), m_Updated(false) {};
00169           bool m_Updated;
00170           ACE_Thread_Mutex m_Mutex;
00171           ACE_Condition<ACE_Thread_Mutex> m_Cond;
00172         };
00173 
00174         // A condition variable for data update notification 
00175         NewData m_NewData;
00176 
00177   };
00178 
00179 
00180   //============================================================
00187   class SubscriberOnce
00188         : public SubscriberBase 
00189   {
00190   public:
00191         SubscriberOnce(OutPortBase* parent, InPort_ptr inport,
00192                                    const SubscriptionID id, SubscriberProfile profile);
00193         virtual bool update();
00194         virtual int svc(void);
00195 
00196   };
00197   
00198 
00205   class SubscriberPeriodic
00206         : public SubscriberBase
00207   {
00208   public:
00209         SubscriberPeriodic(OutPortBase* parent, InPort_ptr inport,
00210                                            const SubscriptionID id, SubscriberProfile profile);
00211         virtual bool update();
00212         virtual int svc(void);
00213   };
00214 
00215 
00216   //============================================================
00223   class SubscriberNew
00224         : public SubscriberBase
00225   {
00226   public:
00227         SubscriberNew(OutPortBase* parent, InPort_ptr inport,
00228                                   const SubscriptionID id, SubscriberProfile profile);
00229         virtual bool update();
00230         virtual int svc(void);
00231   };
00232 
00233 
00234   //============================================================
00241   class SubscriberTriggerd
00242         : public SubscriberBase
00243   {
00244   public:
00245         SubscriberTriggerd(OutPortBase* parent, InPort_ptr inport,
00246                                            const SubscriptionID id, SubscriberProfile profile);
00247         virtual bool update(){};
00248         virtual int svc (void){};
00249   };
00250 
00251 
00252   //============================================================
00259   class SubscriberPeriodicNew
00260         : public SubscriberBase
00261   {
00262   public:
00263         SubscriberPeriodicNew(OutPortBase* parent, InPort_ptr inport,
00264                                                   const SubscriptionID id, SubscriberProfile profile);
00265         virtual bool update(){};
00266         virtual int svc (void){};
00267   };
00268 
00269 
00270   //============================================================
00277   class SubscriberNewPeriodic
00278         : public SubscriberBase
00279   {
00280   public:
00281         SubscriberNewPeriodic(OutPortBase* parent, InPort_ptr inport,
00282                                                   const SubscriptionID id, SubscriberProfile profile);
00283         virtual bool update(){};
00284         virtual int svc (void){};
00285   };
00286 
00287 
00288 
00289   //============================================================
00296   class SubscriberPeriodicTriggerd
00297         : public SubscriberBase
00298   {
00299   public:
00300         SubscriberPeriodicTriggerd(OutPortBase* parent, InPort_ptr inport,
00301                                                            const SubscriptionID id, SubscriberProfile profile);
00302         virtual bool update(){};
00303         virtual int svc (void){};
00304   };
00305 
00306 
00307 
00308   //============================================================
00315   class SubscriberTriggerdPeriodic
00316         : public SubscriberBase
00317   {
00318   public:
00319         SubscriberTriggerdPeriodic(OutPortBase* parent, InPort_ptr inport,
00320                                                            const SubscriptionID id, SubscriberProfile profile);
00321         virtual bool update(){};
00322         virtual int svc (void){};
00323   };
00324 
00325 
00326 
00327 
00328 
00329 }; // end of namespace RTM
00330 
00331 
00332 
00333 #endif // end of __RtcSubscriber_h__

Generated on Thu Dec 16 15:29:18 2004 for OpenRTM by doxygen 1.3.6