1 // Copyright (c) 2015-2020 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 
9 #include <memory>
10 #include <string>
11 
12 class CBlockIndex;
13 class CTransaction;
14 class CZMQAbstractNotifier;
15 
16 using CZMQNotifierFactory = std::unique_ptr<CZMQAbstractNotifier> (*)();
17 
18 class CZMQAbstractNotifier
19 {
20 public:
21     static const int DEFAULT_ZMQ_SNDHWM {1000};
22 
CZMQAbstractNotifier()23     CZMQAbstractNotifier() : psocket(nullptr), outbound_message_high_water_mark(DEFAULT_ZMQ_SNDHWM) { }
24     virtual ~CZMQAbstractNotifier();
25 
26     template <typename T>
Create()27     static std::unique_ptr<CZMQAbstractNotifier> Create()
28     {
29         return std::make_unique<T>();
30     }
31 
GetType()32     std::string GetType() const { return type; }
SetType(const std::string & t)33     void SetType(const std::string &t) { type = t; }
GetAddress()34     std::string GetAddress() const { return address; }
SetAddress(const std::string & a)35     void SetAddress(const std::string &a) { address = a; }
GetOutboundMessageHighWaterMark()36     int GetOutboundMessageHighWaterMark() const { return outbound_message_high_water_mark; }
SetOutboundMessageHighWaterMark(const int sndhwm)37     void SetOutboundMessageHighWaterMark(const int sndhwm) {
38         if (sndhwm >= 0) {
39             outbound_message_high_water_mark = sndhwm;
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;
61     std::string type;
62     std::string address;
63     int outbound_message_high_water_mark; // aka SNDHWM
64 };
65 
66 #endif // BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
67