1 // Copyright (c) 2015-2018 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 <util/memory.h>
9 
10 #include <memory>
11 #include <string>
12 
13 class CBlockIndex;
14 class CTransaction;
15 class CZMQAbstractNotifier;
16 
17 using CZMQNotifierFactory = std::unique_ptr<CZMQAbstractNotifier> (*)();
18 
19 class CZMQAbstractNotifier
20 {
21 public:
22     static const int DEFAULT_ZMQ_SNDHWM {1000};
23 
CZMQAbstractNotifier()24     CZMQAbstractNotifier() : psocket(nullptr), outbound_message_high_water_mark(DEFAULT_ZMQ_SNDHWM) { }
25     virtual ~CZMQAbstractNotifier();
26 
27     template <typename T>
Create()28     static std::unique_ptr<CZMQAbstractNotifier> Create()
29     {
30         return MakeUnique<T>();
31     }
32 
GetType()33     std::string GetType() const { return type; }
SetType(const std::string & t)34     void SetType(const std::string &t) { type = t; }
GetAddress()35     std::string GetAddress() const { return address; }
SetAddress(const std::string & a)36     void SetAddress(const std::string &a) { address = a; }
GetOutboundMessageHighWaterMark()37     int GetOutboundMessageHighWaterMark() const { return outbound_message_high_water_mark; }
SetOutboundMessageHighWaterMark(const int sndhwm)38     void SetOutboundMessageHighWaterMark(const int sndhwm) {
39         if (sndhwm >= 0) {
40             outbound_message_high_water_mark = sndhwm;
41         }
42     }
43 
44     virtual bool Initialize(void *pcontext) = 0;
45     virtual void Shutdown() = 0;
46 
47     // Notifies of ConnectTip result, i.e., new active tip only
48     virtual bool NotifyBlock(const CBlockIndex *pindex);
49     // Notifies of every block connection
50     virtual bool NotifyBlockConnect(const CBlockIndex *pindex);
51     // Notifies of every block disconnection
52     virtual bool NotifyBlockDisconnect(const CBlockIndex *pindex);
53     // Notifies of every mempool acceptance
54     virtual bool NotifyTransactionAcceptance(const CTransaction &transaction, uint64_t mempool_sequence);
55     // Notifies of every mempool removal, except inclusion in blocks
56     virtual bool NotifyTransactionRemoval(const CTransaction &transaction, uint64_t mempool_sequence);
57     // Notifies of transactions added to mempool or appearing in blocks
58     virtual bool NotifyTransaction(const CTransaction &transaction);
59 
60 protected:
61     void *psocket;
62     std::string type;
63     std::string address;
64     int outbound_message_high_water_mark; // aka SNDHWM
65 };
66 
67 #endif // BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
68