-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathclientmodel.h
More file actions
153 lines (125 loc) · 5.26 KB
/
Copy pathclientmodel.h
File metadata and controls
153 lines (125 loc) · 5.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// Copyright (c) 2011-2021 The Bitcoin Core developers
// Copyright (c) 2014-2025 The Dash 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 <interfaces/node.h>
#include <netaddress.h>
#include <sync.h>
#include <uint256.h>
#include <QObject>
#include <QDateTime>
#include <atomic>
#include <memory>
class BanTableModel;
class ChainLockFeed;
class ClientFeeds;
class CreditPoolFeed;
class InstantSendFeed;
class MasternodeFeed;
class OptionsModel;
class QuorumFeed;
class PeerTableModel;
class PeerTableSortProxy;
class ProposalFeed;
enum class SynchronizationState;
struct LocalServiceInfo;
namespace interfaces {
struct BlockTip;
} // namespace interfaces
enum class BlockSource {
NONE,
DISK,
NETWORK,
};
enum NumConnections {
CONNECTIONS_NONE = 0,
CONNECTIONS_IN = (1U << 0),
CONNECTIONS_OUT = (1U << 1),
CONNECTIONS_ALL = (CONNECTIONS_IN | CONNECTIONS_OUT),
};
class CGovernanceObject;
/** Model for Dash network client. */
class ClientModel : public QObject
{
Q_OBJECT
public:
explicit ClientModel(interfaces::Node& node, OptionsModel *optionsModel, QObject *parent = nullptr);
~ClientModel();
void stop();
interfaces::Node& node() const { return m_node; }
interfaces::Masternode::Sync& masternodeSync() const { return m_node.masternodeSync(); }
interfaces::CoinJoin::Options& coinJoinOptions() const { return m_node.coinJoinOptions(); }
OptionsModel *getOptionsModel();
PeerTableModel *getPeerTableModel();
PeerTableSortProxy* peerTableSortProxy();
BanTableModel *getBanTableModel();
ChainLockFeed* feedChainLock() const { return m_feed_chainlock; }
CreditPoolFeed* feedCreditPool() const { return m_feed_creditpool; }
InstantSendFeed* feedInstantSend() const { return m_feed_instantsend; }
MasternodeFeed* feedMasternode() const { return m_feed_masternode; }
ProposalFeed* feedProposal() const { return m_feed_proposal; }
QuorumFeed* feedQuorum() const { return m_feed_quorum; }
//! Return number of connections, default is in- and outbound (total)
int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const;
std::map<CNetAddr, LocalServiceInfo> getNetLocalAddresses() const;
int getNumBlocks() const;
uint256 getBestBlockHash() EXCLUSIVE_LOCKS_REQUIRED(!m_cached_tip_mutex);
int getHeaderTipHeight() const;
int64_t getHeaderTipTime() const;
void getAllGovernanceObjects(std::vector<CGovernanceObject> &obj);
//! Returns the block source of the current importing/syncing state
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::vector<std::unique_ptr<interfaces::Handler>> m_event_handlers;
OptionsModel *optionsModel;
PeerTableModel* peerTableModel{nullptr};
PeerTableSortProxy* m_peer_table_sort_proxy{nullptr};
BanTableModel* banTableModel{nullptr};
//! A thread to interact with m_node asynchronously
QThread* const m_thread;
//! Data sources from different subsystems coordinated by model
ChainLockFeed* m_feed_chainlock{nullptr};
CreditPoolFeed* m_feed_creditpool{nullptr};
InstantSendFeed* m_feed_instantsend{nullptr};
MasternodeFeed* m_feed_masternode{nullptr};
ProposalFeed* m_feed_proposal{nullptr};
QuorumFeed* m_feed_quorum{nullptr};
std::unique_ptr<ClientFeeds> m_feeds{nullptr};
void TipChanged(SynchronizationState sync_state, interfaces::BlockTip tip, double verification_progress, bool header) EXCLUSIVE_LOCKS_REQUIRED(!m_cached_tip_mutex);
void subscribeToCoreSignals();
void unsubscribeFromCoreSignals();
Q_SIGNALS:
void numConnectionsChanged(int count);
void governanceChanged();
void masternodeListChanged() const;
void chainLockChanged();
void numBlocksChanged(int count, const QDateTime& blockDate, const QString& blockHash, double nVerificationProgress, bool header, SynchronizationState sync_state);
void additionalDataSyncProgressChanged(double nSyncProgress);
void mempoolSizeChanged(long count, size_t mempoolSizeInBytes, size_t mempoolMaxSizeInBytes);
void instantSendChanged();
void networkActiveChanged(bool networkActive);
void alertsChanged(const QString &warnings);
//! 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);
};
#endif // BITCOIN_QT_CLIENTMODEL_H