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 00072 class OutPortConsumer 00073 : public DataPortStatus 00074 { 00075 public: 00076 DATAPORTSTATUS_ENUM 00077 00092 virtual ~OutPortConsumer(void){}; 00093 00121 virtual void init(coil::Properties& prop) = 0; 00122 00148 virtual void setBuffer(CdrBufferBase* buffer) = 0; 00156 virtual void setListener(ConnectorInfo& info, 00157 ConnectorListeners* listeners) = 0; 00158 00185 virtual ReturnCode get(cdrMemoryStream& data) = 0; 00186 00212 virtual bool subscribeInterface(const SDOPackage::NVList& properties) = 0; 00213 00237 virtual void unsubscribeInterface(const SDOPackage::NVList& properties) = 0; 00238 00239 protected: 00247 mutable Logger rtclog; 00248 00256 struct subscribe 00257 { 00258 subscribe(const SDOPackage::NVList& prop) : m_prop(prop) {} 00259 void operator()(OutPortConsumer* consumer) 00260 { 00261 consumer->subscribeInterface(m_prop); 00262 } 00263 const SDOPackage::NVList& m_prop; 00264 }; 00265 00273 struct unsubscribe 00274 { 00275 unsubscribe(const SDOPackage::NVList& prop) : m_prop(prop) {} 00276 void operator()(OutPortConsumer* consumer) 00277 { 00278 consumer->unsubscribeInterface(m_prop); 00279 } 00280 const SDOPackage::NVList& m_prop; 00281 }; 00282 }; 00283 00284 typedef ::coil::GlobalFactory<OutPortConsumer> OutPortConsumerFactory; 00285 00286 }; // namespace RTC 00287 #endif // OutPortConsumer_h 00288