00001
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
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
00198
00206
00207
00215
00216
00224 inline bool is_running();
00225
00235 virtual void stop_thread();
00236
00237 protected:
00239
00240
00242
00243
00245 RTM::OutPortBase* m_pParent;
00246
00248
00249
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
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 };
00418
00419
00420
00421 #endif // end of __RtcSubscriber_h__