OpenRTM
1.0.0
|
00001 // -*- C++ -*- 00020 #ifndef RTC_INPORTBASE_H 00021 #define RTC_INPORTBASE_H 00022 00023 #include <rtm/PortBase.h> 00024 #include <rtm/DataPortStatus.h> 00025 #include <rtm/CdrBufferBase.h> 00026 #include <rtm/ConnectorListener.h> 00027 00042 namespace RTC 00043 { 00044 class InPortProvider; 00045 class OutPortConsumer; 00046 class InPortConnector; 00047 00067 class InPortBase 00068 : public PortBase, public DataPortStatus 00069 { 00070 public: 00071 DATAPORTSTATUS_ENUM 00072 00073 typedef std::vector<InPortConnector*> ConnectorList; 00074 00094 InPortBase(const char* name, const char* data_type); 00095 00109 virtual ~InPortBase(void); 00110 00126 void init(coil::Properties& prop); 00127 00142 virtual bool read() = 0; 00143 00159 coil::Properties& properties(); 00160 00179 const std::vector<InPortConnector*>& connectors(); 00180 00199 ConnectorInfoList getConnectorProfiles(); 00200 00219 coil::vstring getConnectorIds(); 00220 00239 coil::vstring getConnectorNames(); 00240 00261 InPortConnector* getConnectorById(const char* id); 00262 00283 InPortConnector* getConnectorByName(const char* name); 00284 00307 bool getConnectorProfileById(const char* id, 00308 ConnectorInfo& prof); 00309 00332 bool getConnectorProfileByName(const char* name, 00333 ConnectorInfo& prof); 00334 00335 00352 virtual void activateInterfaces(); 00353 00370 virtual void deactivateInterfaces(); 00371 00447 void addConnectorDataListener(ConnectorDataListenerType listener_type, 00448 ConnectorDataListener* listener, 00449 bool autoclean = true); 00450 00451 00471 void removeConnectorDataListener(ConnectorDataListenerType listener_type, 00472 ConnectorDataListener* listener); 00473 00474 00527 void addConnectorListener(ConnectorListenerType callback_type, 00528 ConnectorListener* listener, 00529 bool autoclean = true); 00530 00550 void removeConnectorListener(ConnectorListenerType callback_type, 00551 ConnectorListener* listener); 00552 00570 bool isLittleEndian(); 00571 00597 virtual ReturnCode_t 00598 connect(ConnectorProfile& connector_profile) 00599 throw (CORBA::SystemException); 00600 00601 protected: 00602 00631 virtual ReturnCode_t 00632 publishInterfaces(ConnectorProfile& connector_profile); 00633 00661 virtual ReturnCode_t 00662 subscribeInterfaces(const ConnectorProfile& connector_profile); 00663 00685 virtual void 00686 unsubscribeInterfaces(const ConnectorProfile& connector_profile); 00687 00688 00696 void initProviders(); 00697 00705 void initConsumers(); 00706 00738 bool checkEndian(const coil::Properties& prop, bool& littleEndian); 00739 00751 InPortProvider* 00752 createProvider(ConnectorProfile& cprof, coil::Properties& prop); 00753 00765 OutPortConsumer* 00766 createConsumer(const ConnectorProfile& cprof, coil::Properties& prop); 00767 00779 InPortConnector* 00780 createConnector(ConnectorProfile& cprof, coil::Properties& prop, 00781 InPortProvider* provider); 00793 InPortConnector* 00794 createConnector(const ConnectorProfile& cprof, coil::Properties& prop, 00795 OutPortConsumer* consumer); 00796 00797 protected: 00813 bool m_singlebuffer; 00821 CdrBufferBase* m_thebuffer; 00829 coil::Properties m_properties; 00837 coil::vstring m_providerTypes; 00845 coil::vstring m_consumerTypes; 00853 ConnectorList m_connectors; 00861 bool m_littleEndian; 00862 00870 ConnectorListeners m_listeners; 00871 }; 00872 }; // namespace RTC 00873 00874 #endif // RTC_INPORTBASE_H