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 
00028 namespace RTC
00029 {
00054   template <class DataType>
00055   class InPortTcpSockProvider
00056     : public InPortProvider
00057   {
00058   public:
00086     InPortTcpSockProvider(BufferBase<DataType>& buffer, Properties& prop)
00087       : m_server(buffer, prop), m_buffer(buffer), m_prop(prop)
00088     {
00089       CORBA::Any any_var;
00090       DataType   tmp_var;
00091       any_var <<= tmp_var;
00092       
00093       // PortProfile setting
00094       setDataType(any_var.type()->name());
00095       setInterfaceType("TCP_Any");
00096       setDataFlowType("Push");
00097       setSubscriptionType("Any");
00098       
00099       // setup TCP server
00100       m_server.open(0);
00101       
00102       // set the TCP server address to properties
00103       std::string addr;
00104       addr  = m_server.getHostName();
00105       addr += ":";
00106       addr += otos(m_server.getPortNumber());
00107       CORBA_SeqUtil::push_back(m_properties,
00108                                NVUtil::newNV("dataport.tcp_any.inport_addr", addr.c_str()));
00109     }
00110     
00124     virtual ~InPortTcpSockProvider()
00125     {
00126     }
00127     
00145     void publishInterface(SDOPackage::NVList& prop)
00146     {
00147       if (!NVUtil::isStringValue(prop,
00148                                  "dataport.interface_type",
00149                                  "TCP_Any"))
00150         {
00151           return;
00152         }
00153       SDOPackage::NVList nv(m_properties);
00154       NVUtil::append(prop, nv);
00155     }
00156     
00157   private:
00158     TcpServer<DataType> m_server;
00159     BufferBase<DataType>& m_buffer;
00160     Properties& m_prop;
00161   };
00162 };     // namespace RTC
00163 #endif // InPortTcpSockProvider_h

Generated on Wed May 21 05:17:34 2008 for OpenRTM by  doxygen 1.5.3