00001 // -*- C++ -*- 00020 #ifndef RTC_OUTPORTPROVIDER_H 00021 #define RTC_OUTPORTPROVIDER_H 00022 00023 #include <string> 00024 00025 #include <coil/Factory.h> 00026 #include <rtm/BufferBase.h> 00027 #include <rtm/NVUtil.h> 00028 #include <rtm/SystemLogger.h> 00029 #include <rtm/DataPortStatus.h> 00030 #include <rtm/OutPortConnector.h> 00031 00032 namespace RTC 00033 { 00034 class ConnectorListeners; 00092 class OutPortProvider 00093 : public DataPortStatus 00094 { 00095 public: 00096 DATAPORTSTATUS_ENUM 00107 virtual ~OutPortProvider(void); 00108 00136 virtual void init(coil::Properties& prop); 00137 00163 virtual void setBuffer(CdrBufferBase* buffer) = 0; 00164 00172 virtual void setListener(ConnectorInfo& info, 00173 ConnectorListeners* listeners) = 0; 00174 00182 virtual void setConnector(OutPortConnector* connector) = 0; 00183 00207 virtual void publishInterfaceProfile(SDOPackage::NVList& properties); 00208 00234 virtual bool publishInterface(SDOPackage::NVList& properties); 00235 00236 protected: 00254 void setPortType(const char* port_type); 00255 00273 void setDataType(const char* data_type); 00274 00292 void setInterfaceType(const char* interface_type); 00293 00311 void setDataFlowType(const char* dataflow_type); 00312 00330 void setSubscriptionType(const char* subs_type); 00331 00332 protected: 00340 SDOPackage::NVList m_properties; 00348 mutable Logger rtclog; 00349 00350 private: 00351 std::string m_portType; 00352 std::string m_dataType; 00353 std::string m_interfaceType; 00354 std::string m_dataflowType; 00355 std::string m_subscriptionType; 00356 00357 00358 public: 00359 // functors 00367 struct publishInterfaceProfileFunc 00368 { 00369 publishInterfaceProfileFunc(SDOPackage::NVList& prop) : m_prop(prop) {} 00370 void operator()(OutPortProvider* provider) 00371 { 00372 provider->publishInterfaceProfile(m_prop); 00373 } 00374 SDOPackage::NVList& m_prop; 00375 }; 00376 00384 struct publishInterfaceFunc 00385 { 00386 publishInterfaceFunc(SDOPackage::NVList& prop) 00387 : m_prop(prop), provider_(0) {} 00388 void operator()(OutPortProvider* provider) 00389 { 00390 if (provider->publishInterface(m_prop)) 00391 { 00392 provider_ = provider; 00393 } 00394 } 00395 SDOPackage::NVList& m_prop; 00396 OutPortProvider* provider_; 00397 }; 00398 }; 00399 00400 typedef ::coil::GlobalFactory<OutPortProvider> OutPortProviderFactory; 00401 00402 }; // namespace RTC 00403 #endif // RTC_OUTPORTPROVIDER_H