Bytemaster's Boost Libraries
|
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