00001 // -*- C++ -*- 00020 #ifndef InPortConsumer_h 00021 #define 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 00091 //InPortConsumer(); 00092 00106 virtual ~InPortConsumer(void){}; 00107 00122 virtual void init(coil::Properties& prop) = 0; 00123 00137 virtual ReturnCode put(const cdrMemoryStream& data) = 0; 00138 00162 virtual void publishInterfaceProfile(SDOPackage::NVList& properties) = 0; 00163 00187 virtual bool subscribeInterface(const SDOPackage::NVList& properties) = 0; 00188 00206 virtual void unsubscribeInterface(const SDOPackage::NVList& properties) = 0; 00207 00215 struct publishInterfaceProfileFunc 00216 { 00217 publishInterfaceProfileFunc(SDOPackage::NVList& prop) : m_prop(prop) {} 00218 void operator()(InPortConsumer* consumer) 00219 { 00220 consumer->publishInterfaceProfile(m_prop); 00221 } 00222 SDOPackage::NVList& m_prop; 00223 }; 00224 00232 struct subscribeInterfaceFunc 00233 { 00234 subscribeInterfaceFunc(SDOPackage::NVList& prop) : m_prop(prop) {} 00235 bool operator()(InPortConsumer* consumer) 00236 { 00237 return consumer->subscribeInterface(m_prop); 00238 } 00239 SDOPackage::NVList& m_prop; 00240 }; 00241 00242 00243 }; 00244 00245 typedef ::coil::GlobalFactory<InPortConsumer> InPortConsumerFactory; 00246 }; // namespace RTC 00247 00248 template class ::coil::GlobalFactory<RTC::InPortConsumer>; 00249 00250 #endif // InPortConsumer_h