00001
00020 #ifndef OutPortBase_h
00021 #define OutPortBase_h
00022
00023 #include <vector>
00024 #include <string>
00025
00026 #include <coil/Properties.h>
00027 #include <coil/stringutil.h>
00028
00029 #include <rtm/PortBase.h>
00030 #include <rtm/InPortConsumer.h>
00031 #include <rtm/OutPortProvider.h>
00032 #include <rtm/ConnectorBase.h>
00033 #include <rtm/CdrBufferBase.h>
00034 #include <rtm/SystemLogger.h>
00035
00036 namespace RTC
00037 {
00038 class PublisherBase;
00039 class ConnectorBase;
00040 class OutPortConnector;
00225 class OutPortBase
00226 : public PortBase, public DataPortStatus
00227 {
00228 public:
00229 DATAPORTSTATUS_ENUM
00230
00231 typedef std::vector<OutPortConnector*> ConnectorList;
00232
00250 OutPortBase(const char* name, const char* data_type);
00251
00268 virtual ~OutPortBase(void);
00269
00284 void init(coil::Properties& prop);
00285
00304 const char* name() const;
00305
00324 coil::Properties& properties();
00325
00344 const std::vector<OutPortConnector*>& connectors();
00345
00364 ConnectorBase::ProfileList getConnectorProfiles();
00365
00384 coil::vstring getConnectorIds();
00385
00404 coil::vstring getConnectorNames();
00405
00428 bool getConnectorProfileById(const char* id,
00429 ConnectorBase::Profile& prof);
00430
00453 bool getConnectorProfileByName(const char* name,
00454 ConnectorBase::Profile& prof);
00455
00477 bool publishInterfaceProfiles(SDOPackage::NVList& properties);
00478
00497
00498
00523
00524
00548
00549
00550
00551 virtual void onConnect(const char* id, PublisherBase* publisher){};
00552 virtual void onDisconnect(const char* id){};
00553
00570 virtual void activateInterfaces();
00571
00588 virtual void deactivateInterfaces();
00589
00590 protected:
00605 void configure();
00606
00653 virtual ReturnCode_t
00654 publishInterfaces(ConnectorProfile& connector_profile);
00655
00694 virtual ReturnCode_t
00695 subscribeInterfaces(const ConnectorProfile& connector_profile);
00696
00728 virtual void
00729 unsubscribeInterfaces(const ConnectorProfile& connector_profile);
00730
00738 void initProviders();
00739
00747 void initConsumers();
00748
00756 OutPortProvider* createProvider(ConnectorProfile& cprof,
00757 coil::Properties& prop);
00765 InPortConsumer* createConsumer(const ConnectorProfile& cprof,
00766 coil::Properties& prop);
00767
00775 OutPortConnector* createConnector(const ConnectorProfile& cprof,
00776 coil::Properties& prop,
00777 InPortConsumer* consumer);
00785 OutPortConnector* createConnector(const ConnectorProfile& cprof,
00786 coil::Properties& prop,
00787 OutPortProvider* provider);
00788
00789 protected:
00790 coil::Properties m_properties;
00791 std::string m_name;
00792 std::vector<OutPortConnector*> m_connectors;
00793 std::vector<InPortConsumer*> m_consumers;
00794 coil::vstring m_providerTypes;
00795 coil::vstring m_consumerTypes;
00796 std::vector<OutPortProvider*> m_providers;
00797
00805 struct provider_cleanup;
00806
00814 struct connector_cleanup;
00815 };
00816 };
00817 #endif // RtcOutPortBase_h