00001
00002
00003
00004
00005
00006 #ifndef BOOST_RPC_SERVER_HPP
00007 #define BOOST_RPC_SERVER_HPP
00008
00009 #include <boost/rpc/detail/threaded_service.hpp>
00010 #include <boost/ptr_container/ptr_vector.hpp>
00011 #include <boost/rpc/registry_server.hpp>
00012
00013 namespace boost {
00014 namespace rpc {
00015
00017
00020 template<typename Registry, typename Acceptor>
00021 class server : public detail::threaded_service
00022 {
00023 public:
00025
00029 server(Registry ®, int port)
00030 : acceptor(service, port, boost::bind(&server<Registry, Acceptor>::connected, this, _1)),
00031 registry_(reg)
00032 {
00033 start_service_thread();
00034 }
00035 ~server()
00036 {
00037 stop_service_thread();
00038 }
00039 private:
00040 void connected(std::auto_ptr<boost::asio::ip::tcp::socket> socket_ptr)
00041 {
00042 servers.push_back(new registry_server<Registry>(registry_,
00043 boost::shared_ptr<boost::asio::ip::tcp::socket>(socket_ptr)));
00044 }
00045
00046 Acceptor acceptor;
00047
00048 Registry ®istry_;
00049 boost::ptr_vector<registry_server<Registry> > servers;
00050 };
00051
00052 }
00053 }
00054
00055 #endif // BOOST_RPC_SERVER_HPP