websocket connection in a separate thread
This commit is contained in:
parent
1a684df3f2
commit
4a63c202be
2 changed files with 21 additions and 14 deletions
|
|
@ -17,6 +17,8 @@
|
||||||
#include <websocketpp/config/asio_client.hpp>
|
#include <websocketpp/config/asio_client.hpp>
|
||||||
#include <websocketpp/client.hpp>
|
#include <websocketpp/client.hpp>
|
||||||
|
|
||||||
|
#include <fc/thread/thread.hpp>
|
||||||
|
|
||||||
namespace graphene { namespace peerplays_sidechain {
|
namespace graphene { namespace peerplays_sidechain {
|
||||||
|
|
||||||
typedef websocketpp::client<websocketpp::config::asio_client> client;
|
typedef websocketpp::client<websocketpp::config::asio_client> client;
|
||||||
|
|
@ -67,7 +69,7 @@ public:
|
||||||
|
|
||||||
eth_rpc_client(const std::string &url, const std::string &user_name, const std::string &password, bool debug_rpc_calls);
|
eth_rpc_client(const std::string &url, const std::string &user_name, const std::string &password, bool debug_rpc_calls);
|
||||||
|
|
||||||
void start(std::string uri);
|
void start();
|
||||||
void stop();
|
void stop();
|
||||||
void on_socket_init(websocketpp::connection_hdl);
|
void on_socket_init(websocketpp::connection_hdl);
|
||||||
void on_fail(websocketpp::connection_hdl hdl);
|
void on_fail(websocketpp::connection_hdl hdl);
|
||||||
|
|
@ -133,6 +135,7 @@ private:
|
||||||
|
|
||||||
ethereum_function_call_encoder m_ethereum_function_call_encoder;
|
ethereum_function_call_encoder m_ethereum_function_call_encoder;
|
||||||
|
|
||||||
|
std::shared_ptr<fc::thread> _thread;
|
||||||
std::string signature;
|
std::string signature;
|
||||||
std::string geth_url;
|
std::string geth_url;
|
||||||
uint64_t t_id;
|
uint64_t t_id;
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ std::string eth_rpc_client::ethereum_function_call_encoder::encode_bytes(const s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
eth_rpc_client::eth_rpc_client(const std::string &url, const std::string &user_name, const std::string &password, bool debug_rpc_calls) {
|
eth_rpc_client::eth_rpc_client(const std::string &url, const std::string &user_name, const std::string &password, bool debug_rpc_calls) : _thread(std::make_shared<fc::thread>("eth_rpc_client")){
|
||||||
geth_url = url;
|
geth_url = url;
|
||||||
user = user_name;
|
user = user_name;
|
||||||
this->password = password;
|
this->password = password;
|
||||||
|
|
@ -91,20 +91,24 @@ eth_rpc_client::eth_rpc_client(const std::string &url, const std::string &user_n
|
||||||
m_endpoint.set_fail_handler(bind(&type::on_fail,this,::_1));
|
m_endpoint.set_fail_handler(bind(&type::on_fail,this,::_1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void eth_rpc_client::start(std::string uri) {
|
void eth_rpc_client::start() {
|
||||||
websocketpp::lib::error_code ec;
|
ilog("### eth_rpc_client::start uri: ${uri}", ("uri", geth_url));
|
||||||
client::connection_ptr con = m_endpoint.get_connection(uri, ec);
|
auto future = _thread->async([this]
|
||||||
m_hdl = con->get_handle();
|
{
|
||||||
|
websocketpp::lib::error_code ec;
|
||||||
|
client::connection_ptr con = m_endpoint.get_connection(this->geth_url, ec);
|
||||||
|
m_hdl = con->get_handle();
|
||||||
|
|
||||||
if (ec) {
|
if (ec) {
|
||||||
m_endpoint.get_alog().write(websocketpp::log::alevel::app,ec.message());
|
m_endpoint.get_alog().write(websocketpp::log::alevel::app,ec.message());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_endpoint.connect(con);
|
m_endpoint.connect(con);
|
||||||
|
|
||||||
// Start the ASIO io_service run loop
|
// Start the ASIO io_service run loop
|
||||||
m_endpoint.run();
|
m_endpoint.run();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void eth_rpc_client::stop() {
|
void eth_rpc_client::stop() {
|
||||||
|
|
@ -455,7 +459,7 @@ sidechain_net_handler_eth::sidechain_net_handler_eth(peerplays_sidechain_plugin
|
||||||
|
|
||||||
url = options.at("ethereum-node-rpc-url").as<std::string>();
|
url = options.at("ethereum-node-rpc-url").as<std::string>();
|
||||||
eth_client = std::unique_ptr<eth_rpc_client>(new eth_rpc_client(url, rpc_user, rpc_password, debug_rpc_calls));
|
eth_client = std::unique_ptr<eth_rpc_client>(new eth_rpc_client(url, rpc_user, rpc_password, debug_rpc_calls));
|
||||||
eth_client->start(url);
|
eth_client->start();
|
||||||
/*
|
/*
|
||||||
if (!wallet.empty()) {
|
if (!wallet.empty()) {
|
||||||
eth_client->loadwallet(wallet);
|
eth_client->loadwallet(wallet);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue