Changeset View
Changeset View
Standalone View
Standalone View
src/node/context.h
Show All 14 Lines | |||||
class CConnman; | class CConnman; | ||||
class CScheduler; | class CScheduler; | ||||
class CTxMemPool; | class CTxMemPool; | ||||
class ChainstateManager; | class ChainstateManager; | ||||
class PeerManager; | class PeerManager; | ||||
namespace interfaces { | namespace interfaces { | ||||
class Chain; | class Chain; | ||||
class ChainClient; | class ChainClient; | ||||
class WalletClient; | |||||
} // namespace interfaces | } // namespace interfaces | ||||
//! NodeContext struct containing references to chain state and connection | //! NodeContext struct containing references to chain state and connection | ||||
//! state. | //! state. | ||||
//! | //! | ||||
//! This is used by init, rpc, and test code to pass object references around | //! This is used by init, rpc, and test code to pass object references around | ||||
//! without needing to declare the same variables and parameters repeatedly, or | //! without needing to declare the same variables and parameters repeatedly, or | ||||
//! to use globals. More variables could be added to this struct (particularly | //! to use globals. More variables could be added to this struct (particularly | ||||
//! references to validation objects) to eliminate use of globals | //! references to validation objects) to eliminate use of globals | ||||
//! and make code more modular and testable. The struct isn't intended to have | //! and make code more modular and testable. The struct isn't intended to have | ||||
//! any member functions. It should just be a collection of references that can | //! any member functions. It should just be a collection of references that can | ||||
//! be used without pulling in unwanted dependencies or functionality. | //! be used without pulling in unwanted dependencies or functionality. | ||||
struct NodeContext { | struct NodeContext { | ||||
std::unique_ptr<CConnman> connman; | std::unique_ptr<CConnman> connman; | ||||
std::unique_ptr<CTxMemPool> mempool; | std::unique_ptr<CTxMemPool> mempool; | ||||
std::unique_ptr<PeerManager> peerman; | std::unique_ptr<PeerManager> peerman; | ||||
// Currently a raw pointer because the memory is not managed by this struct | // Currently a raw pointer because the memory is not managed by this struct | ||||
ChainstateManager *chainman{nullptr}; | ChainstateManager *chainman{nullptr}; | ||||
std::unique_ptr<BanMan> banman; | std::unique_ptr<BanMan> banman; | ||||
// Currently a raw pointer because the memory is not managed by this struct | // Currently a raw pointer because the memory is not managed by this struct | ||||
ArgsManager *args{nullptr}; | ArgsManager *args{nullptr}; | ||||
std::unique_ptr<interfaces::Chain> chain; | std::unique_ptr<interfaces::Chain> chain; | ||||
//! List of all chain clients (wallet processes or other client) connected | |||||
//! to node. | |||||
std::vector<std::unique_ptr<interfaces::ChainClient>> chain_clients; | std::vector<std::unique_ptr<interfaces::ChainClient>> chain_clients; | ||||
//! Reference to chain client that should used to load or create wallets | |||||
//! opened by the gui. | |||||
interfaces::WalletClient *wallet_client{nullptr}; | |||||
std::unique_ptr<CScheduler> scheduler; | std::unique_ptr<CScheduler> scheduler; | ||||
std::function<void()> rpc_interruption_point = [] {}; | std::function<void()> rpc_interruption_point = [] {}; | ||||
//! Declare default constructor and destructor that are not inline, so code | //! Declare default constructor and destructor that are not inline, so code | ||||
//! instantiating the NodeContext struct doesn't need to #include class | //! instantiating the NodeContext struct doesn't need to #include class | ||||
//! definitions for all the unique_ptr members. | //! definitions for all the unique_ptr members. | ||||
NodeContext(); | NodeContext(); | ||||
~NodeContext(); | ~NodeContext(); | ||||
}; | }; | ||||
#endif // BITCOIN_NODE_CONTEXT_H | #endif // BITCOIN_NODE_CONTEXT_H |