Merge commit '72288a2'

This commit is contained in:
Daniel Larimer 2015-05-04 14:07:51 -04:00
commit 3599850bb9
3 changed files with 20 additions and 12 deletions

View file

@ -73,6 +73,7 @@ namespace fc { namespace http {
virtual void send_message( const std::string& message )override virtual void send_message( const std::string& message )override
{ {
idump((message));
auto ec = _ws_connection->send( message ); auto ec = _ws_connection->send( message );
FC_ASSERT( !ec, "websocket send failed: ${msg}", ("msg",ec.message() ) ); FC_ASSERT( !ec, "websocket send failed: ${msg}", ("msg",ec.message() ) );
} }
@ -103,7 +104,7 @@ namespace fc { namespace http {
_server_thread.async( [&](){ _server_thread.async( [&](){
auto current_con = _connections.find(hdl); auto current_con = _connections.find(hdl);
assert( current_con != _connections.end() ); assert( current_con != _connections.end() );
//wdump(("server")(msg->get_payload())); wdump(("server")(msg->get_payload()));
current_con->second->on_message( msg->get_payload() ); current_con->second->on_message( msg->get_payload() );
}).wait(); }).wait();
}); });
@ -154,7 +155,7 @@ namespace fc { namespace http {
_client.clear_access_channels( websocketpp::log::alevel::all ); _client.clear_access_channels( websocketpp::log::alevel::all );
_client.set_message_handler( [&]( connection_hdl hdl, message_ptr msg ){ _client.set_message_handler( [&]( connection_hdl hdl, message_ptr msg ){
_client_thread.async( [&](){ _client_thread.async( [&](){
// wdump((msg->get_payload())); wdump((msg->get_payload()));
_connection->on_message( msg->get_payload() ); _connection->on_message( msg->get_payload() );
}).wait(); }).wait();
}); });

View file

@ -1,5 +1,6 @@
#include <fc/rpc/cli.hpp> #include <fc/rpc/cli.hpp>
#include <fc/thread/thread.hpp>
#include <iostream> #include <iostream>
@ -49,15 +50,18 @@ void cli::getline(
if( _isatty( _fileno( stdin ) ) ) if( _isatty( _fileno( stdin ) ) )
#endif #endif
{ {
char* line_read = nullptr; static fc::thread getline_thread("getline");
std::cout.flush(); //readline doesn't use cin, so we must manually flush _out getline_thread.async( [&](){
line_read = readline(prompt.c_str()); char* line_read = nullptr;
if( line_read == nullptr ) std::cout.flush(); //readline doesn't use cin, so we must manually flush _out
FC_THROW_EXCEPTION( fc::eof_exception, "" ); line_read = readline(prompt.c_str());
if( *line_read ) if( line_read == nullptr )
add_history(line_read); FC_THROW_EXCEPTION( fc::eof_exception, "" );
line = line_read; if( *line_read )
free(line_read); add_history(line_read);
line = line_read;
free(line_read);
}).wait();
} }
else else
#endif #endif

View file

@ -9,9 +9,10 @@ class calculator
int32_t add( int32_t a, int32_t b ); // not implemented int32_t add( int32_t a, int32_t b ); // not implemented
int32_t sub( int32_t a, int32_t b ); // not implemented int32_t sub( int32_t a, int32_t b ); // not implemented
void on_result( const std::function<void(int32_t)>& cb ); void on_result( const std::function<void(int32_t)>& cb );
void on_result2( const std::function<void(int32_t)>& cb, int test );
}; };
FC_API( calculator, (add)(sub)(on_result) ) FC_API( calculator, (add)(sub)(on_result)(on_result2) )
class login_api class login_api
@ -35,6 +36,7 @@ class some_calculator
int32_t add( int32_t a, int32_t b ) { wlog("."); if( _cb ) _cb(a+b); return a+b; } int32_t add( int32_t a, int32_t b ) { wlog("."); if( _cb ) _cb(a+b); return a+b; }
int32_t sub( int32_t a, int32_t b ) { wlog(".");if( _cb ) _cb(a-b); return a-b; } int32_t sub( int32_t a, int32_t b ) { wlog(".");if( _cb ) _cb(a-b); return a-b; }
void on_result( const std::function<void(int32_t)>& cb ) { wlog( "set callback" ); _cb = cb; return ; } void on_result( const std::function<void(int32_t)>& cb ) { wlog( "set callback" ); _cb = cb; return ; }
void on_result2( const std::function<void(int32_t)>& cb, int test ){}
std::function<void(int32_t)> _cb; std::function<void(int32_t)> _cb;
}; };
class variant_calculator class variant_calculator
@ -43,6 +45,7 @@ class variant_calculator
double add( fc::variant a, fc::variant b ) { return a.as_double()+b.as_double(); } double add( fc::variant a, fc::variant b ) { return a.as_double()+b.as_double(); }
double sub( fc::variant a, fc::variant b ) { return a.as_double()-b.as_double(); } double sub( fc::variant a, fc::variant b ) { return a.as_double()-b.as_double(); }
void on_result( const std::function<void(int32_t)>& cb ) { wlog("set callback"); _cb = cb; return ; } void on_result( const std::function<void(int32_t)>& cb ) { wlog("set callback"); _cb = cb; return ; }
void on_result2( const std::function<void(int32_t)>& cb, int test ){}
std::function<void(int32_t)> _cb; std::function<void(int32_t)> _cb;
}; };