InPortTcpSockProvider.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00020 #ifndef InPortTcpSockProvider_h
00021 #define InPortTcpSockProvider_h
00022 
00023 #include <rtm/BufferBase.h>
00024 #include <rtm/InPortProvider.h>
00025 #include <rtm/TcpSockServer.h>
00026 #include <rtm/StringUtil.h>
00027 #include <rtm/Properties.h>
00028 #include <rtm/CORBA_SeqUtil.h>
00029 
00030 namespace RTC
00031 {
00056   template <class DataType>
00057   class InPortTcpSockProvider
00058     : public InPortProvider
00059   {
00060   public:
00088     InPortTcpSockProvider(BufferBase<DataType>& buffer, Properties& prop)
00089       : m_server(buffer, prop), m_buffer(buffer), m_prop(prop)
00090     {
00091       CORBA::Any any_var;
00092       DataType   tmp_var;
00093       any_var <<= tmp_var;
00094       
00095       // PortProfile setting
00096       setDataType(any_var.type()->name());
00097       setInterfaceType("TCP_Any");
00098       setDataFlowType("Push");
00099       setSubscriptionType("Any");
00100       
00101       // setup TCP server
00102       m_server.open(0);
00103       
00104       // set the TCP server address to properties
00105       std::string addr;
00106       addr  = m_server.getHostName();
00107       addr += ":";
00108       addr += otos(m_server.getPortNumber());
00109       CORBA_SeqUtil::push_back(m_properties,
00110                                NVUtil::newNV("dataport.tcp_any.inport_addr", addr.c_str()));
00111     }
00112     
00126     virtual ~InPortTcpSockProvider(void)
00127     {
00128     }
00129     
00147     void publishInterface(SDOPackage::NVList& prop)
00148     {
00149       if (!NVUtil::isStringValue(prop,
00150                                  "dataport.interface_type",
00151                                  "TCP_Any"))
00152         {
00153           return;
00154         }
00155       SDOPackage::NVList nv(m_properties);
00156       NVUtil::append(prop, nv);
00157     }
00158     
00159   private:
00160     TcpServer<DataType> m_server;
00161     BufferBase<DataType>& m_buffer;
00162     Properties& m_prop;
00163   };
00164 };     // namespace RTC
00165 #endif // InPortTcpSockProvider_h

Generated on Sun May 24 14:08:45 2009 for OpenRTM by  doxygen 1.5.3