当前位置: 首页>>代码示例>>C++>>正文


C++ channel_ptr::subscribe_inventory方法代码示例

本文整理汇总了C++中channel_ptr::subscribe_inventory方法的典型用法代码示例。如果您正苦于以下问题:C++ channel_ptr::subscribe_inventory方法的具体用法?C++ channel_ptr::subscribe_inventory怎么用?C++ channel_ptr::subscribe_inventory使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在channel_ptr的用法示例。


在下文中一共展示了channel_ptr::subscribe_inventory方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: receive_inv

void poller::receive_inv(const std::error_code& ec,
                         const inventory_type& packet, channel_ptr node)
{
    if (ec)
    {
        log_error(LOG_POLLER) << "Received bad inventory: " << ec.message();
        return;
    }
    // Filter out only block inventories
    get_data_type getdata;
    for (const inventory_vector_type& ivv: packet.inventories)
    {
        if (ivv.type != inventory_type_id::block)
            continue;
        // Already got this block
        if (ivv.hash == last_block_hash_)
            continue;
        getdata.inventories.push_back(ivv);
    }
    if (!getdata.inventories.empty())
    {
        last_block_hash_ = getdata.inventories.back().hash;
        node->send(getdata, handle_send_packet);
    }
    node->subscribe_inventory(
        strand_.wrap(std::bind(&poller::receive_inv,
                               this, _1, _2, node)));
}
开发者ID:standardcrypto,项目名称:libbitcoin,代码行数:28,代码来源:poller.cpp

示例2: monitor

void poller::monitor(channel_ptr node)
{
    node->subscribe_inventory(
        strand_.wrap(std::bind(&poller::receive_inv,
                               this, _1, _2, node)));
    node->subscribe_block(
        std::bind(&poller::receive_block,
                  this, _1, _2, node));
}
开发者ID:standardcrypto,项目名称:libbitcoin,代码行数:9,代码来源:poller.cpp

示例3: handle_handshake

void handle_handshake(const std::error_code& ec, channel_ptr node,
    handshake& hs)
{
    if (ec)
        error_exit(ec.message());
    node->subscribe_inventory(std::bind(&receive_inv, _1, _2, node));
    node->send(create_getblocks_message(), 
        std::bind(&handle_send_getblock, _1));
    hs.fetch_network_address(show_ip);
}
开发者ID:Phallanx,项目名称:libbitcoin,代码行数:10,代码来源:net.cpp

示例4: ask_blocks

void ask_blocks(const std::error_code& ec, channel_ptr node,
    const message::block_locator& loc, blockchain_ptr chain,
    const hash_digest& hash_stop)
{
    if (ec)
        log_error() << ec.message();
    node->subscribe_inventory(std::bind(recv_inv, _1, _2, node));
    node->subscribe_block(std::bind(recv_blk, _1, _2, node, chain));

    message::get_blocks packet;
    packet.start_hashes = loc;
    packet.hash_stop = hash_stop;
    node->send(packet, std::bind(&handle_send_packet, _1));
}
开发者ID:Phallanx,项目名称:libbitcoin,代码行数:14,代码来源:bdb-test.cpp

示例5: recv_inv

void recv_inv(const std::error_code &ec, const message::inventory& packet,
    channel_ptr node)
{
    if (ec)
        log_error() << ec.message();
    message::get_data getdata;
    for (const message::inventory_vector& ivv: packet.inventories)
    {
        if (ivv.type != message::inventory_type::block)
            continue;
        getdata.inventories.push_back(ivv);
    }
    node->send(getdata, handle_send_packet);
    node->subscribe_inventory(std::bind(&recv_inv, _1, _2, node));
}
开发者ID:Phallanx,项目名称:libbitcoin,代码行数:15,代码来源:bdb-test.cpp

示例6: inventory_received

void inventory_received(const std::error_code& ec, const inventory_type& inv,
    channel_ptr node, tx_watch& watch)
{
    check_error(ec);
    // Loop through inventory hashes.
    for (const inventory_vector_type& ivec: inv.inventories)
    {
        // We're only interested in transactions. Discard everything else.
        if (ivec.type != inventory_type_id::transaction)
            continue;
        watch.push(ivec.hash);
    }
    // Resubscribe to inventory packets.
    node->subscribe_inventory(
        std::bind(inventory_received, _1, _2, node, std::ref(watch)));
}
开发者ID:RagnarDanneskjold,项目名称:libbitcoin,代码行数:16,代码来源:txrad.cpp

示例7: connection_started

void connection_started(const std::error_code& ec, channel_ptr node,
    protocol& prot, tx_watch& watch)
{
    if (ec)
    {
        log_warning() << "Couldn't start connection: " << ec.message();
        return;
    }
    log_info() << "Connection established.";
    // Subscribe to inventory packets.
    node->subscribe_inventory(
        std::bind(inventory_received, _1, _2, node, std::ref(watch)));
    // Resubscribe to new nodes.
    prot.subscribe_channel(
        std::bind(connection_started, _1, _2, std::ref(prot), std::ref(watch)));
}
开发者ID:RagnarDanneskjold,项目名称:libbitcoin,代码行数:16,代码来源:txrad.cpp

示例8: new_channel

void session::new_channel(const std::error_code& ec, channel_ptr node)
{
    if (ec)
    {
        log_warning(LOG_SESSION) << "New channel: " << ec.message();
        return;
    }
    BITCOIN_ASSERT(node);
    node->subscribe_inventory(
        std::bind(&session::inventory, this, _1, _2, node));
    node->subscribe_get_data(
        std::bind(&session::get_data, this, _1, _2, node));
    node->subscribe_get_blocks(
        std::bind(&session::get_blocks, this, _1, _2, node));
    // tx
    // block
    protocol_.subscribe_channel(
        std::bind(&session::new_channel, this, _1, _2));
    poll_.monitor(node);
}
开发者ID:hellais,项目名称:libbitcoin,代码行数:20,代码来源:session.cpp

示例9: inventory

void session::inventory(const std::error_code& ec,
    const inventory_type& packet, channel_ptr node)
{
    if (ec)
    {
        log_error(LOG_SESSION) << "inventory: " << ec.message();
        return;
    }
    for (const inventory_vector_type& ivec: packet.inventories)
    {
        if (ivec.type == inventory_type_id::transaction)
            strand_.post(
                std::bind(&session::new_tx_inventory,
                    this, ivec.hash, node));
        else if (ivec.type == inventory_type_id::block);
            // Do nothing. Handled by poller.
        else
            log_warning(LOG_SESSION) << "Ignoring unknown inventory type";
    }
    node->subscribe_inventory(
        std::bind(&session::inventory, this, _1, _2, node));
}
开发者ID:hellais,项目名称:libbitcoin,代码行数:22,代码来源:session.cpp


注:本文中的channel_ptr::subscribe_inventory方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。