Bytemaster's Boost Libraries
/Users/dlarimer/dev/libs/rpc/include/boost/rpc/json/server.hpp
00001 #ifndef _BOOST_RPC_JSON_SERVER_HPP_
00002 #define _BOOST_RPC_JSON_SERVER_HPP_
00003 #include <boost/reflect/any_ptr.hpp>
00004 #include <boost/rpc/json/connection.hpp>
00005 #include <boost/exception/all.hpp>
00006 
00007 namespace boost { namespace rpc { namespace json {
00008 
00012   template<typename InterfaceType>
00013   class server {
00014     public:
00015       typedef boost::shared_ptr<server>              ptr;
00016       typedef boost::reflect::any_ptr<InterfaceType> interface_type;
00017 
00018       template<typename T>
00019       server( T v, const json::connection::ptr& c )
00020       :m_interface(v),m_con(c) {
00021         boost::reflect::visit( m_interface, visitor( *this ) ); 
00022         m_con->start();
00023       }
00024 
00025     private:
00026       struct visitor {
00027         visitor( server& s ):m_self(s){}
00028 
00029         template<typename Member, typename VTable, Member VTable::*m>
00030         void operator()(const char* name )const  {
00031              std::cerr<<"sname:"<<name<<std::endl;
00032              m_self.m_con->add_method_handler( name, 
00033                 detail::rpc_recv_functor<typename Member::fused_params, 
00034                                  Member&, Member::is_signal>((*m_self.m_interface).*m,*m_self.m_con,name) );
00035         }
00036         server&         m_self;
00037       };
00038 
00039       connection::ptr m_con;
00040       interface_type  m_interface; 
00041   };
00042 
00043 } } } // boost::rpc::json
00044 
00045 #endif
 All Classes Namespaces Files Functions Variables Typedefs Defines