Skip to content

Instantly share code, notes, and snippets.

@jachiang
Created October 15, 2018 14:34
Show Gist options
  • Save jachiang/19f025813ab8c187ad92aa61af6e6dce to your computer and use it in GitHub Desktop.
Save jachiang/19f025813ab8c187ad92aa61af6e6dce to your computer and use it in GitHub Desktop.
#include <bitcoin/bitcoin.hpp>
#include <bitcoin/network.hpp>
int main()
{
// Default network settings.
bc::network::settings settings(bc::config::settings::testnet);
// Print out seeds for seeding.
auto seeds_list = settings.seeds;
for (const auto seed : seeds_list)
{
std::cout << seed.to_string() << std::endl;
}
// Set to non-zero (Defaults to zero).
settings.host_pool_capacity = 10;
// Promise which signals completion to main loop.
static std::promise<bc::code> complete;
// Create P2P object.
bc::network::p2p my_p2p(settings);
// Handlers (p2p_start, verack_subscription, p2p_run)
// -------------------------------------------------------------------------
const auto subscription_handler = [](const bc::code& ec,
bc::message::verack::const_ptr message)
{
// ??
std::cout << "Verack received" << std::endl;
return true;
};
const auto connect_handler = [&subscription_handler](const bc::code& ec,
bc::network::channel::ptr channel)
{
// If error keep trying.
if (ec)
return true;
// Subscribe to messages on this channel.
channel->template subscribe<bc::message::verack>(subscription_handler);
return true;
};
const auto run_handler = [&my_p2p](const bc::code& ec)
{
// TODO:
};
const auto start_handler = [&my_p2p, &connect_handler ,&run_handler](
const bc::code& ec)
{
// Print out host addresses.
bc::message::network_address::list host_addresses;
my_p2p.fetch_addresses(host_addresses);
for (const auto host : host_addresses)
{
std::cout << bc::encode_base16(bc::to_chunk(host.ip())) << std::endl;
}
// Stop if error with seeding session.
if (ec)
complete.set_value(ec);
// Network run.
my_p2p.subscribe_connection(connect_handler);
my_p2p.run(run_handler);
};
// Start P2P object.
// -------------------------------------------------------------------------
my_p2p.start(start_handler);
std::cout << complete.get_future().get().message() << std::endl;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment