git / moonbite-core / src/qt/clientmodel.h · raw

// Copyright (c) 2011-2019 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#ifndef BITCOIN_QT_CLIENTMODEL_H#define BITCOIN_QT_CLIENTMODEL_H#include <QObject>#include <QDateTime>#include <atomic>#include <memory>#include <sync.h>#include <uint256.h>class BanTableModel;class CBlockIndex;class OptionsModel;class PeerTableModel;enum class SynchronizationState;namespace interfaces {class Handler;class Node;}QT_BEGIN_NAMESPACEclass QTimer;QT_END_NAMESPACEenum class BlockSource {    NONE,    REINDEX,    DISK,    NETWORK};enum NumConnections {    CONNECTIONS_NONE = 0,    CONNECTIONS_IN   = (1U << 0),    CONNECTIONS_OUT  = (1U << 1),    CONNECTIONS_ALL  = (CONNECTIONS_IN | CONNECTIONS_OUT),};/** Model for Bitcoin network client. */class ClientModel : public QObject{    Q_OBJECTpublic:    explicit ClientModel(interfaces::Node& node, OptionsModel *optionsModel, QObject *parent = nullptr);    ~ClientModel();    interfaces::Node& node() const { return m_node; }    OptionsModel *getOptionsModel();    PeerTableModel *getPeerTableModel();    BanTableModel *getBanTableModel();    //! Return number of connections, default is in- and outbound (total)    int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const;    int getNumBlocks() const;    uint256 getBestBlockHash();    int getHeaderTipHeight() const;    int64_t getHeaderTipTime() const;    //! Returns enum BlockSource of the current importing/syncing state    enum BlockSource getBlockSource() const;    //! Return warnings to be displayed in status bar    QString getStatusBarWarnings() const;    QString formatFullVersion() const;    QString formatSubVersion() const;    bool isReleaseVersion() const;    QString formatClientStartupTime() const;    QString dataDir() const;    QString blocksDir() const;    bool getProxyInfo(std::string& ip_port) const;    // caches for the best header: hash, number of blocks and block time    mutable std::atomic<int> cachedBestHeaderHeight;    mutable std::atomic<int64_t> cachedBestHeaderTime;    mutable std::atomic<int> m_cached_num_blocks{-1};    Mutex m_cached_tip_mutex;    uint256 m_cached_tip_blocks GUARDED_BY(m_cached_tip_mutex){};private:    interfaces::Node& m_node;    std::unique_ptr<interfaces::Handler> m_handler_show_progress;    std::unique_ptr<interfaces::Handler> m_handler_notify_num_connections_changed;    std::unique_ptr<interfaces::Handler> m_handler_notify_network_active_changed;    std::unique_ptr<interfaces::Handler> m_handler_notify_alert_changed;    std::unique_ptr<interfaces::Handler> m_handler_banned_list_changed;    std::unique_ptr<interfaces::Handler> m_handler_notify_block_tip;    std::unique_ptr<interfaces::Handler> m_handler_notify_header_tip;    OptionsModel *optionsModel;    PeerTableModel *peerTableModel;    BanTableModel *banTableModel;    //! A thread to interact with m_node asynchronously    QThread* const m_thread;    void subscribeToCoreSignals();    void unsubscribeFromCoreSignals();Q_SIGNALS:    void numConnectionsChanged(int count);    void numBlocksChanged(int count, const QDateTime& blockDate, double nVerificationProgress, bool header, SynchronizationState sync_state);    void mempoolSizeChanged(long count, size_t mempoolSizeInBytes);    void networkActiveChanged(bool networkActive);    void alertsChanged(const QString &warnings);    void bytesChanged(quint64 totalBytesIn, quint64 totalBytesOut);    //! Fired when a message should be reported to the user    void message(const QString &title, const QString &message, unsigned int style);    // Show progress dialog e.g. for verifychain    void showProgress(const QString &title, int nProgress);public Q_SLOTS:    void updateNumConnections(int numConnections);    void updateNetworkActive(bool networkActive);    void updateAlert();    void updateBanlist();};#endif // BITCOIN_QT_CLIENTMODEL_H