00001
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
00099 InPortBase(const char* name, const char* data_type);
00100
00114 virtual ~InPortBase(void);
00115
00123 void init(coil::Properties& prop);
00124
00132 virtual bool read() = 0;
00133
00141 coil::Properties& properties();
00142
00161 const std::vector<InPortConnector*>& connectors();
00162
00181 ConnectorInfoList getConnectorProfiles();
00182
00201 coil::vstring getConnectorIds();
00202
00221 coil::vstring getConnectorNames();
00222
00243 InPortConnector* getConnectorById(const char* id);
00244
00265 InPortConnector* getConnectorByName(const char* name);
00266
00289 bool getConnectorProfileById(const char* id,
00290 ConnectorInfo& prof);
00291
00314 bool getConnectorProfileByName(const char* name,
00315 ConnectorInfo& prof);
00316
00317
00334 virtual void activateInterfaces();
00335
00352 virtual void deactivateInterfaces();
00353
00429 void addConnectorDataListener(ConnectorDataListenerType listener_type,
00430 ConnectorDataListener* listener,
00431 bool autoclean = true);
00432
00433
00453 void removeConnectorDataListener(ConnectorDataListenerType listener_type,
00454 ConnectorDataListener* listener);
00455
00456
00509 void addConnectorListener(ConnectorListenerType callback_type,
00510 ConnectorListener* listener,
00511 bool autoclean = true);
00512
00532 void removeConnectorListener(ConnectorListenerType callback_type,
00533 ConnectorListener* listener);
00534
00552 bool isLittleEndian();
00553
00579 virtual ReturnCode_t
00580 connect(ConnectorProfile& connector_profile)
00581 throw (CORBA::SystemException);
00582
00583 protected:
00584
00613 virtual ReturnCode_t
00614 publishInterfaces(ConnectorProfile& connector_profile);
00615
00643 virtual ReturnCode_t
00644 subscribeInterfaces(const ConnectorProfile& connector_profile);
00645
00667 virtual void
00668 unsubscribeInterfaces(const ConnectorProfile& connector_profile);
00669
00670
00678 void initProviders();
00679
00687 void initConsumers();
00688
00709 bool checkEndian(const coil::Properties& prop, bool& littleEndian);
00710
00722 InPortProvider*
00723 createProvider(ConnectorProfile& cprof, coil::Properties& prop);
00724
00736 OutPortConsumer*
00737 createConsumer(const ConnectorProfile& cprof, coil::Properties& prop);
00738
00750 InPortConnector*
00751 createConnector(ConnectorProfile& cprof, coil::Properties& prop,
00752 InPortProvider* provider);
00764 InPortConnector*
00765 createConnector(const ConnectorProfile& cprof, coil::Properties& prop,
00766 OutPortConsumer* consumer);
00767
00768 protected:
00784 bool m_singlebuffer;
00792 CdrBufferBase* m_thebuffer;
00800 coil::Properties m_properties;
00808 coil::vstring m_providerTypes;
00816 coil::vstring m_consumerTypes;
00824 ConnectorList m_connectors;
00832 bool m_littleEndian;
00833
00841 ConnectorListeners m_listeners;
00842 };
00843 };
00844
00845 #endif // RTC_INPORTBASE_H