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_ZMQPUBLISHNOTIFIER_H
6 #define BITCOIN_ZMQ_ZMQPUBLISHNOTIFIER_H
7 
8 #include <zmq/zmqabstractnotifier.h>
9 
10 class CBlockIndex;
11 
12 class CZMQAbstractPublishNotifier : public CZMQAbstractNotifier
13 {
14 private:
15     uint32_t nSequence {0U}; //!< upcounting per message sequence number
16 
17 public:
18 
19     /* send zmq multipart message
20        parts:
21           * command
22           * data
23           * message sequence number
24     */
25     bool SendMessage(const char *command, const void* data, size_t size);
26 
27     bool Initialize(void *pcontext) override;
28     void Shutdown() override;
29 };
30 
31 class CZMQPublishHashBlockNotifier : public CZMQAbstractPublishNotifier
32 {
33 public:
34     bool NotifyBlock(const CBlockIndex *pindex) override;
35 };
36 
37 class CZMQPublishHashTransactionNotifier : public CZMQAbstractPublishNotifier
38 {
39 public:
40     bool NotifyTransaction(const CTransaction &transaction) override;
41 };
42 
43 class CZMQPublishRawBlockNotifier : public CZMQAbstractPublishNotifier
44 {
45 public:
46     bool NotifyBlock(const CBlockIndex *pindex) override;
47 };
48 
49 class CZMQPublishRawTransactionNotifier : public CZMQAbstractPublishNotifier
50 {
51 public:
52     bool NotifyTransaction(const CTransaction &transaction) override;
53 };
54 
55 #endif // BITCOIN_ZMQ_ZMQPUBLISHNOTIFIER_H
56