比特币源码分析(四) - 关键类的分析

阅读源码过程中会突然出现很多类,在不知道这个类的主要作用的情况下是很难继续分析源码的,所以专门写了一篇文章分析关键类的源码,在阅读源码的过程中可以继续在这里添加关键类的源码分析。

P2P网络相关

CConnman
该类在src/net.h中声明,在src/net.cpp中实现。

class CConnman
{
public:

    enum NumConnections {
        CONNECTIONS_NONE = 0,
        CONNECTIONS_IN = (1U << 0),
        CONNECTIONS_OUT = (1U << 1),
        CONNECTIONS_ALL = (CONNECTIONS_IN | CONNECTIONS_OUT),
    };

    struct Options
    {
        ServiceFlags nLocalServices = NODE_NONE;
        int nMaxConnections = 0;
        int nMaxOutbound = 0;
        int nMaxAddnode = 0;
        int nMaxFeeler = 0;
        int nBestHeight = 0;
        CClientUIInterface* uiInterface = nullptr;
        NetEventsInterface* m_msgproc = nullptr;
        unsigned int nSendBufferMaxSize = 0;
        unsigned int nReceiveFloodSize = 0;
        uint64_t nMaxOutboundTimeframe = 0;
        uint64_t nMaxOutboundLimit = 0;
        std::vector<std::string> vSeedNodes;
        std::vector<CSubNet> vWhitelistedRange;
        std::vector<CService> vBinds, vWhiteBinds;
        bool m_use_addrman_outgoing = true;
        std::vector<std::string> m_specified_outgoing;
        std::vector<std::string> m_added_nodes;
    };

该类是网络连接管理类,比较庞大,负责节点的启动、结束,推送消息,接收其他节点的连接等。

PeerLogicValidation
该类多重继承了两个接口类:CValidationInterface, 和 NetEventsInterface 。
CValidationInterface,主要是通知交易和区块相关的状态的改变。
NetEventsInterface,主要是处理从其他节点接收到的消息,发送消息,

/**
 * Interface for message handling
 */
class NetEventsInterface
{
public:
    virtual bool ProcessMessages(CNode* pnode, std::atomic<bool>& interrupt) = 0;
    virtual bool SendMessages(CNode* pnode, std::atomic<bool>& interrupt) = 0;
    virtual void InitializeNode(CNode* pnode) = 0;
    virtual void FinalizeNode(NodeId id, bool& update_connection_time) = 0;
};

除此之外,该类新增了几个方法,用于处理过期信息和剔除多余的对等节点

    void ConsiderEviction(CNode *pto, int64_t time_in_seconds);
    void CheckForStaleTipAndEvictPeers(const Consensus::Params &consensusParams);
    void EvictExtraOutboundPeers(int64_t time_in_seconds);

猜你喜欢

转载自blog.csdn.net/yzpbright/article/details/81206835