Bitcoin Core  31.0.0
P2P Digital Currency
zmqabstractnotifier.h
Go to the documentation of this file.
1 // Copyright (c) 2015-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
6 #define BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
7 
8 #include <cstdint>
9 #include <functional>
10 #include <memory>
11 #include <string>
12 
13 class CBlockIndex;
14 class CTransaction;
16 
17 using CZMQNotifierFactory = std::function<std::unique_ptr<CZMQAbstractNotifier>()>;
18 
20 {
21 public:
22  static const int DEFAULT_ZMQ_SNDHWM {1000};
23 
24  virtual ~CZMQAbstractNotifier();
25 
26  template <typename T>
27  static std::unique_ptr<CZMQAbstractNotifier> Create()
28  {
29  return std::make_unique<T>();
30  }
31 
32  std::string GetType() const { return type; }
33  void SetType(const std::string &t) { type = t; }
34  std::string GetAddress() const { return address; }
35  void SetAddress(const std::string &a) { address = a; }
37  void SetOutboundMessageHighWaterMark(const int sndhwm) {
38  if (sndhwm >= 0) {
40  }
41  }
42 
43  virtual bool Initialize(void *pcontext) = 0;
44  virtual void Shutdown() = 0;
45 
46  // Notifies of ConnectTip result, i.e., new active tip only
47  virtual bool NotifyBlock(const CBlockIndex *pindex);
48  // Notifies of every block connection
49  virtual bool NotifyBlockConnect(const CBlockIndex *pindex);
50  // Notifies of every block disconnection
51  virtual bool NotifyBlockDisconnect(const CBlockIndex *pindex);
52  // Notifies of every mempool acceptance
53  virtual bool NotifyTransactionAcceptance(const CTransaction &transaction, uint64_t mempool_sequence);
54  // Notifies of every mempool removal, except inclusion in blocks
55  virtual bool NotifyTransactionRemoval(const CTransaction &transaction, uint64_t mempool_sequence);
56  // Notifies of transactions added to mempool or appearing in blocks
57  virtual bool NotifyTransaction(const CTransaction &transaction);
58 
59 protected:
60  void* psocket{nullptr};
61  std::string type;
62  std::string address;
64 };
65 
66 #endif // BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
static std::unique_ptr< CZMQAbstractNotifier > Create()
virtual bool NotifyBlockDisconnect(const CBlockIndex *pindex)
virtual bool NotifyBlock(const CBlockIndex *pindex)
std::string GetAddress() const
virtual bool NotifyTransactionRemoval(const CTransaction &transaction, uint64_t mempool_sequence)
virtual bool NotifyBlockConnect(const CBlockIndex *pindex)
virtual bool NotifyTransaction(const CTransaction &transaction)
void SetOutboundMessageHighWaterMark(const int sndhwm)
int GetOutboundMessageHighWaterMark() const
void SetAddress(const std::string &a)
static const int DEFAULT_ZMQ_SNDHWM
virtual void Shutdown()=0
The block chain is a tree shaped structure starting with the genesis block at the root...
Definition: chain.h:93
virtual bool NotifyTransactionAcceptance(const CTransaction &transaction, uint64_t mempool_sequence)
virtual bool Initialize(void *pcontext)=0
The basic transaction that is broadcasted on the network and contained in blocks. ...
Definition: transaction.h:280
std::function< std::unique_ptr< CZMQAbstractNotifier >()> CZMQNotifierFactory
void SetType(const std::string &t)
std::string GetType() const