From 358a88037c069b0b61ebdc0ac510e846b1fc9764 Mon Sep 17 00:00:00 2001 From: theoreticalbts Date: Thu, 10 Sep 2015 15:41:49 -0400 Subject: [PATCH] wallet.cpp: Subscribe to block updates, fix #302 --- libraries/app/api.cpp | 10 +++++++++- libraries/app/include/graphene/app/api.hpp | 3 +++ libraries/wallet/wallet.cpp | 11 +++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/libraries/app/api.cpp b/libraries/app/api.cpp index 5b61bc61..e440854f 100644 --- a/libraries/app/api.cpp +++ b/libraries/app/api.cpp @@ -923,10 +923,18 @@ namespace graphene { namespace app { */ void database_api::on_applied_block() { + if (_block_applied_callback) + { + auto capture_this = shared_from_this(); + block_id_type block_id = _db.head_block_id(); + fc::async([this,capture_this,block_id](){ + _block_applied_callback(fc::variant(block_id)); + }); + } + if(_market_subscriptions.size() == 0) return; - const auto& ops = _db.get_applied_operations(); map< std::pair, vector> > subscribed_markets_ops; for(const auto& op : ops) diff --git a/libraries/app/include/graphene/app/api.hpp b/libraries/app/include/graphene/app/api.hpp index ca83accd..8a94706f 100644 --- a/libraries/app/include/graphene/app/api.hpp +++ b/libraries/app/include/graphene/app/api.hpp @@ -367,6 +367,7 @@ namespace graphene { namespace app { void set_subscribe_callback( std::function cb, bool clear_filter ); void set_pending_transaction_callback( std::function cb ){ _pending_trx_callback = cb; } + void set_block_applied_callback( std::function cb ){ _block_applied_callback = cb; } private: template void subscribe_to_item( const T& i )const @@ -398,6 +399,7 @@ namespace graphene { namespace app { mutable fc::bloom_filter _subscribe_filter; std::function _subscribe_callback; std::function _pending_trx_callback; + std::function _block_applied_callback; boost::signals2::scoped_connection _change_connection; boost::signals2::scoped_connection _removed_connection; @@ -606,6 +608,7 @@ FC_API(graphene::app::database_api, (get_required_fees) (set_subscribe_callback) (set_pending_transaction_callback) + (set_block_applied_callback) (validate_transaction) ) FC_API(graphene::app::history_api, diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 7a0608b7..7d5cef4b 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -375,6 +375,12 @@ public: ("chain_id", _chain_id) ); } init_prototype_ops(); + + _remote_db->set_block_applied_callback( [this](const variant& block_id ) + { + on_block_applied( block_id ); + } ); + _wallet.chain_id = _chain_id; _wallet.ws_server = initial_data.ws_server; _wallet.ws_user = initial_data.ws_user; @@ -408,6 +414,11 @@ public: } } + void on_block_applied( const variant& block_id ) + { + fc::async([this]{resync();}, "Resync after block"); + } + bool copy_wallet_file( string destination_filename ) { fc::path src_path = get_wallet_filename();