Displaced connection check from zmq_listener to sidechain_net_manager

This commit is contained in:
Alexander Suslikov 2019-01-12 18:18:26 +03:00 committed by Anzhy Cherrnyavski
parent 9137f31960
commit 0c42d7ea6f
5 changed files with 20 additions and 22 deletions

View file

@ -2,6 +2,8 @@
#include <sstream> #include <sstream>
#include <fc/network/ip.hpp>
#include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp> #include <boost/property_tree/json_parser.hpp>

View file

@ -2,7 +2,6 @@
#include <string> #include <string>
#include <fc/network/http/connection.hpp> #include <fc/network/http/connection.hpp>
#include <fc/network/ip.hpp>
namespace sidechain { namespace sidechain {

View file

@ -3,8 +3,6 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <fc/network/http/connection.hpp>
#include <fc/network/ip.hpp>
#include <fc/signals.hpp> #include <fc/signals.hpp>
#include <zmq.hpp> #include <zmq.hpp>
@ -16,7 +14,7 @@ class zmq_listener
public: public:
zmq_listener( std::string _ip, uint32_t _zmq, uint32_t _rpc ); zmq_listener( std::string _ip, uint32_t _zmq );
bool connection_is_not_defined() const { return zmq_port == 0; } bool connection_is_not_defined() const { return zmq_port == 0; }
@ -29,7 +27,6 @@ private:
std::string ip; std::string ip;
uint32_t zmq_port; uint32_t zmq_port;
uint32_t rpc_port;
zmq::context_t ctx; zmq::context_t ctx;
zmq::socket_t socket; zmq::socket_t socket;

View file

@ -1,4 +1,8 @@
#include <sidechain/network/sidechain_net_manager.hpp> #include <sidechain/network/sidechain_net_manager.hpp>
#include <fc/network/http/connection.hpp>
#include <fc/network/ip.hpp>
#include <thread> #include <thread>
#include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ptree.hpp>
@ -7,20 +11,25 @@
namespace sidechain { namespace sidechain {
sidechain_net_manager::sidechain_net_manager( graphene::chain::database* _db, std::string _ip, sidechain_net_manager::sidechain_net_manager( graphene::chain::database* _db, std::string _ip,
uint32_t _zmq, uint32_t _rpc, std::string _user, std::string _password ): uint32_t _zmq, uint32_t _rpc, std::string _user, std::string _password )
listener( new zmq_listener( _ip, _zmq, _rpc ) ), bitcoin_client( new bitcoin_rpc_client( _ip, _rpc, _user, _password ) ), db( _db )
{ {
listener->block_received.connect( [this]( const std::string& block_hash ) { initialize_manager(_db, _ip, _zmq, _rpc, _user, _password );
std::thread( &sidechain_net_manager::handle_block, this, block_hash ).detach();
});
} }
void sidechain_net_manager::initialize_manager( graphene::chain::database* _db, std::string _ip, void sidechain_net_manager::initialize_manager( graphene::chain::database* _db, std::string _ip,
uint32_t _zmq, uint32_t _rpc, std::string _user, std::string _password ) uint32_t _zmq, uint32_t _rpc, std::string _user, std::string _password )
{ {
db = std::unique_ptr<graphene::chain::database>( _db ); listener = std::unique_ptr<zmq_listener>( new zmq_listener( _ip, _zmq ) );
listener = std::unique_ptr<zmq_listener>( new zmq_listener( _ip, _zmq, _rpc ) );
bitcoin_client = std::unique_ptr<bitcoin_rpc_client>( new bitcoin_rpc_client( _ip, _rpc, _user, _password ) ); bitcoin_client = std::unique_ptr<bitcoin_rpc_client>( new bitcoin_rpc_client( _ip, _rpc, _user, _password ) );
db = std::unique_ptr<graphene::chain::database>( _db );
fc::http::connection conn;
try {
conn.connect_to( fc::ip::endpoint( fc::ip::address( _ip ), _rpc ) );
} catch ( fc::exception e ) {
elog( "No BTC node running at ${ip} or wrong rpc port: ${port}", ("ip", _ip) ("port", _rpc) );
FC_ASSERT( false );
}
listener->block_received.connect([this]( const std::string& block_hash ) { listener->block_received.connect([this]( const std::string& block_hash ) {
std::thread( &sidechain_net_manager::handle_block, this, block_hash).detach(); std::thread( &sidechain_net_manager::handle_block, this, block_hash).detach();

View file

@ -4,8 +4,7 @@
namespace sidechain { namespace sidechain {
zmq_listener::zmq_listener( std::string _ip, uint32_t _zmq, uint32_t _rpc ): zmq_listener::zmq_listener( std::string _ip, uint32_t _zmq ): ip( _ip ), zmq_port( _zmq ), ctx( 1 ), socket( ctx, ZMQ_SUB )
ip( _ip ), zmq_port( _zmq ), rpc_port( _rpc ), ctx( 1 ), socket( ctx, ZMQ_SUB )
{ {
std::thread( &zmq_listener::handle_zmq, this ).detach(); std::thread( &zmq_listener::handle_zmq, this ).detach();
} }
@ -34,14 +33,6 @@ void zmq_listener::handle_zmq()
socket.setsockopt( ZMQ_SUBSCRIBE, "hashblock", 0 ); socket.setsockopt( ZMQ_SUBSCRIBE, "hashblock", 0 );
socket.connect( "tcp://" + ip + ":" + std::to_string( zmq_port ) ); socket.connect( "tcp://" + ip + ":" + std::to_string( zmq_port ) );
fc::http::connection conn;
try {
conn.connect_to( fc::ip::endpoint( fc::ip::address( ip ), rpc_port ) );
} catch ( fc::exception e ) {
elog( "No BTC node running at ${ip} or wrong rpc port: ${port}", ("ip", ip) ("port", rpc_port) );
FC_ASSERT( false );
}
while ( true ) { while ( true ) {
auto msg = receive_multipart(); auto msg = receive_multipart();
const auto header = std::string( static_cast<char*>( msg[0].data() ), msg[0].size() ); const auto header = std::string( static_cast<char*>( msg[0].data() ), msg[0].size() );