00001 // -*- C++ -*- 00020 #ifndef RTC_OUTPORTCONSUMER_H 00021 #define RTC_OUTPORTCONSUMER_H 00022 00023 #include <coil/Factory.h> 00024 #include <rtm/DataPortStatus.h> 00025 #include <rtm/CdrBufferBase.h> 00026 00027 namespace SDOPackage 00028 { 00029 class NVList; 00030 }; 00031 00032 namespace coil 00033 { 00034 class Properties; 00035 }; 00036 00037 namespace RTC 00038 { 00039 class ConnectorListeners; 00040 class ConnectorInfo; 00041 00168 class OutPortConsumer 00169 : public DataPortStatus 00170 { 00171 public: 00172 DATAPORTSTATUS_ENUM 00173 00188 virtual ~OutPortConsumer(void){}; 00189 00217 virtual void init(coil::Properties& prop) = 0; 00218 00244 virtual void setBuffer(CdrBufferBase* buffer) = 0; 00245 00276 virtual void setListener(ConnectorInfo& info, 00277 ConnectorListeners* listeners) = 0; 00278 00305 virtual ReturnCode get(cdrMemoryStream& data) = 0; 00306 00332 virtual bool subscribeInterface(const SDOPackage::NVList& properties) = 0; 00333 00357 virtual void unsubscribeInterface(const SDOPackage::NVList& properties) = 0; 00358 00359 protected: 00367 mutable Logger rtclog; 00368 00376 struct subscribe 00377 { 00378 subscribe(const SDOPackage::NVList& prop) : m_prop(prop) {} 00379 void operator()(OutPortConsumer* consumer) 00380 { 00381 consumer->subscribeInterface(m_prop); 00382 } 00383 const SDOPackage::NVList& m_prop; 00384 }; 00385 00393 struct unsubscribe 00394 { 00395 unsubscribe(const SDOPackage::NVList& prop) : m_prop(prop) {} 00396 void operator()(OutPortConsumer* consumer) 00397 { 00398 consumer->unsubscribeInterface(m_prop); 00399 } 00400 const SDOPackage::NVList& m_prop; 00401 }; 00402 }; 00403 00411 typedef ::coil::GlobalFactory<OutPortConsumer> OutPortConsumerFactory; 00412 00413 }; // namespace RTC 00414 #endif // RTC_OUTPORTCONSUMER_H 00415