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 <zmq/zmqconfig.h>
9 
10 class CBlockIndex;
11 class CZMQAbstractNotifier;
12 
13 typedef CZMQAbstractNotifier* (*CZMQNotifierFactory)();
14 
15 class CZMQAbstractNotifier
16 {
17 public:
18     static const int DEFAULT_ZMQ_SNDHWM {1000};
19 
CZMQAbstractNotifier()20     CZMQAbstractNotifier() : psocket(nullptr), outbound_message_high_water_mark(DEFAULT_ZMQ_SNDHWM) { }
21     virtual ~CZMQAbstractNotifier();
22 
23     template <typename T>
Create()24     static CZMQAbstractNotifier* Create()
25     {
26         return new T();
27     }
28 
GetType()29     std::string GetType() const { return type; }
SetType(const std::string & t)30     void SetType(const std::string &t) { type = t; }
GetAddress()31     std::string GetAddress() const { return address; }
SetAddress(const std::string & a)32     void SetAddress(const std::string &a) { address = a; }
GetOutboundMessageHighWaterMark()33     int GetOutboundMessageHighWaterMark() const { return outbound_message_high_water_mark; }
SetOutboundMessageHighWaterMark(const int sndhwm)34     void SetOutboundMessageHighWaterMark(const int sndhwm) {
35         if (sndhwm >= 0) {
36             outbound_message_high_water_mark = sndhwm;
37         }
38     }
39 
40     virtual bool Initialize(void *pcontext) = 0;
41     virtual void Shutdown() = 0;
42 
43     virtual bool NotifyBlock(const CBlockIndex *pindex);
44     virtual bool NotifyTransaction(const CTransaction &transaction);
45 
46 protected:
47     void *psocket;
48     std::string type;
49     std::string address;
50     int outbound_message_high_water_mark; // aka SNDHWM
51 };
52 
53 #endif // BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
54