#pragma once #include namespace fc { namespace json { class rpc_tcp_server { private: template struct add_method_visitor { add_method_visitor( fc::ptr& p, rpc_connection& s ):_ptr(p),_rpcc(s) { } template void operator()( const char* name, Functor& fun ) { _rpcc.add_method( name, fun ); } fc::ptr& _ptr; rpc_connection& _rpcc; }; public: rpc_tcp_server(); ~rpc_tcp_server(); template void add_interface( const fc::ptr& ptr ) { on_new_connection( [=]( rpc_connection& c ) { ptr->visit( detail::add_method_visitor( ptr, c ) ); }); } void on_new_connection( const std::function& c ); void listen( uint16_t port ); private: class impl; impl* my; }; } }