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 close(unsigned long flags);
00105 
00113         virtual int svc(void) = 0;
00114         
00122         virtual bool update() = 0;
00123         
00131         virtual void release();
00132 
00140         virtual SubscriberProfile get_profile();
00141 
00149         virtual InPort_ptr get_inport();
00150 
00158         virtual std::string get_id();
00159 
00167         inline bool is_running();
00168 
00178         virtual void stop_thread();
00179 
00180   protected:
00182         SubscriberProfile m_Profile;
00183         
00185         InPort_ptr m_pInPort;
00186         
00188         OutPortBase* m_pParent;
00189         
00191         //const SubscriptionID m_Id;
00192         std::string m_Id;
00193 
00195         bool m_Running;
00196 
00197         struct NewData
00198         {
00199           NewData() : m_Cond(m_Mutex), m_Updated(false) {};
00200           bool m_Updated;
00201           ACE_Thread_Mutex m_Mutex;
00202           ACE_Condition<ACE_Thread_Mutex> m_Cond;
00203         };
00204 
00205         // A condition variable for data update notification 
00206         NewData m_NewData;
00207 
00208   };
00209 
00210 
00211   //============================================================
00218   class SubscriberOnce
00219         : public SubscriberBase 
00220   {
00221   public:
00222         SubscriberOnce(OutPortBase* parent, InPort_ptr inport,
00223                                    const SubscriptionID id, SubscriberProfile profile);
00224         virtual bool update();
00225         virtual int svc(void);
00226 
00227   };
00228   
00229 
00236   class SubscriberPeriodic
00237         : public SubscriberBase
00238   {
00239   public:
00240         SubscriberPeriodic(OutPortBase* parent, InPort_ptr inport,
00241                                            const SubscriptionID id, SubscriberProfile profile);
00242         virtual bool update();
00243         virtual int svc(void);
00244   };
00245 
00246 
00247   //============================================================
00254   class SubscriberNew
00255         : public SubscriberBase
00256   {
00257   public:
00258         SubscriberNew(OutPortBase* parent, InPort_ptr inport,
00259                                   const SubscriptionID id, SubscriberProfile profile);
00260         virtual bool update();
00261         virtual int svc(void);
00262   };
00263 
00264 
00265   //============================================================
00272   class SubscriberTriggerd
00273         : public SubscriberBase
00274   {
00275   public:
00276         SubscriberTriggerd(OutPortBase* parent, InPort_ptr inport,
00277                                            const SubscriptionID id, SubscriberProfile profile);
00278         virtual bool update(){};
00279         virtual int svc (void){};
00280   };
00281 
00282 
00283   //============================================================
00290   class SubscriberPeriodicNew
00291         : public SubscriberBase
00292   {
00293   public:
00294         SubscriberPeriodicNew(OutPortBase* parent, InPort_ptr inport,
00295                                                   const SubscriptionID id, SubscriberProfile profile);
00296         virtual bool update(){};
00297         virtual int svc (void){};
00298   };
00299 
00300 
00301   //============================================================
00308   class SubscriberNewPeriodic
00309         : public SubscriberBase
00310   {
00311   public:
00312         SubscriberNewPeriodic(OutPortBase* parent, InPort_ptr inport,
00313                                                   const SubscriptionID id, SubscriberProfile profile);
00314         virtual bool update(){};
00315         virtual int svc (void){};
00316   };
00317 
00318 
00319 
00320   //============================================================
00327   class SubscriberPeriodicTriggerd
00328         : public SubscriberBase
00329   {
00330   public:
00331         SubscriberPeriodicTriggerd(OutPortBase* parent, InPort_ptr inport,
00332                                                            const SubscriptionID id, SubscriberProfile profile);
00333         virtual bool update(){};
00334         virtual int svc (void){};
00335   };
00336 
00337 
00338 
00339   //============================================================
00346   class SubscriberTriggerdPeriodic
00347         : public SubscriberBase
00348   {
00349   public:
00350         SubscriberTriggerdPeriodic(OutPortBase* parent, InPort_ptr inport,
00351                                                            const SubscriptionID id, SubscriberProfile profile);
00352         virtual bool update(){};
00353         virtual int svc (void){};
00354   };
00355 
00356 
00357 
00358 
00359 
00360 }; // end of namespace RTM
00361 
00362 
00363 
00364 #endif // end of __RtcSubscriber_h__

Generated on Wed Apr 6 14:22:22 2005 for OpenRTM by doxygen 1.3.6