00001 // -*- C++ -*- 00020 #ifndef RTC_INPORTCONSUMER_H 00021 #define RTC_INPORTCONSUMER_H 00022 00023 #include <coil/Factory.h> 00024 #include <rtm/DataPortStatus.h> 00025 00026 namespace coil 00027 { 00028 class Properties; 00029 }; 00030 00031 namespace SDOPackage 00032 { 00033 class NVList; 00034 }; 00035 00036 class cdrMemoryStream; 00037 00038 namespace RTC 00039 { 00073 class InPortConsumer 00074 : public DataPortStatus 00075 { 00076 public: 00077 DATAPORTSTATUS_ENUM 00078 00092 virtual ~InPortConsumer(void){}; 00093 00108 virtual void init(coil::Properties& prop) = 0; 00109 00143 virtual ReturnCode put(const cdrMemoryStream& data) = 0; 00144 00168 virtual void publishInterfaceProfile(SDOPackage::NVList& properties) = 0; 00169 00193 virtual bool subscribeInterface(const SDOPackage::NVList& properties) = 0; 00194 00212 virtual void unsubscribeInterface(const SDOPackage::NVList& properties) = 0; 00213 00221 struct publishInterfaceProfileFunc 00222 { 00223 publishInterfaceProfileFunc(SDOPackage::NVList& prop) : m_prop(prop) {} 00224 void operator()(InPortConsumer* consumer) 00225 { 00226 consumer->publishInterfaceProfile(m_prop); 00227 } 00228 SDOPackage::NVList& m_prop; 00229 }; 00230 00238 struct subscribeInterfaceFunc 00239 { 00240 subscribeInterfaceFunc(SDOPackage::NVList& prop) : m_prop(prop) {} 00241 bool operator()(InPortConsumer* consumer) 00242 { 00243 return consumer->subscribeInterface(m_prop); 00244 } 00245 SDOPackage::NVList& m_prop; 00246 }; 00247 00248 00249 }; 00250 00251 typedef ::coil::GlobalFactory<InPortConsumer> InPortConsumerFactory; 00252 }; // namespace RTC 00253 00254 template class ::coil::GlobalFactory<RTC::InPortConsumer>; 00255 00256 #endif // RTC_INPORTCONSUMER_H