zmqpublishnotifier.h raw

   1  // Copyright (c) 2015-2022 The Limenka 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 LIMENKA_ZMQ_ZMQPUBLISHNOTIFIER_H
   6  #define LIMENKA_ZMQ_ZMQPUBLISHNOTIFIER_H
   7  
   8  #include <zmq/zmqabstractnotifier.h>
   9  
  10  #include <cstddef>
  11  #include <cstdint>
  12  #include <functional>
  13  #include <vector>
  14  
  15  class CBlockIndex;
  16  class CTransaction;
  17  
  18  class CZMQAbstractPublishNotifier : public CZMQAbstractNotifier
  19  {
  20  private:
  21      uint32_t nSequence {0U}; //!< upcounting per message sequence number
  22  
  23  public:
  24  
  25      /* send zmq multipart message
  26         parts:
  27            * command
  28            * data
  29            * message sequence number
  30      */
  31      bool SendZmqMessage(const char *command, const void* data, size_t size);
  32  
  33      bool Initialize(void *pcontext) override;
  34      void Shutdown() override;
  35  };
  36  
  37  class CZMQPublishHashBlockNotifier : public CZMQAbstractPublishNotifier
  38  {
  39  public:
  40      bool NotifyBlock(const CBlockIndex *pindex) override;
  41  };
  42  
  43  class CZMQPublishHashTransactionNotifier : public CZMQAbstractPublishNotifier
  44  {
  45  public:
  46      bool NotifyTransaction(const CTransaction &transaction) override;
  47  };
  48  
  49  class CZMQPublishHashWalletTransactionNotifier : public CZMQAbstractPublishNotifier
  50  {
  51  public:
  52      bool NotifyWalletTransaction(const CTransaction &transaction, const uint256 &hashBlock) override;
  53  };
  54  
  55  class CZMQPublishRawBlockNotifier : public CZMQAbstractPublishNotifier
  56  {
  57  private:
  58      const std::function<bool(std::vector<uint8_t>&, const CBlockIndex&)> m_get_block_by_index;
  59  
  60  public:
  61      CZMQPublishRawBlockNotifier(std::function<bool(std::vector<uint8_t>&, const CBlockIndex&)> get_block_by_index)
  62          : m_get_block_by_index{std::move(get_block_by_index)} {}
  63      bool NotifyBlock(const CBlockIndex *pindex) override;
  64  };
  65  
  66  class CZMQPublishRawTransactionNotifier : public CZMQAbstractPublishNotifier
  67  {
  68  public:
  69      bool NotifyTransaction(const CTransaction &transaction) override;
  70  };
  71  
  72  class CZMQPublishRawWalletTransactionNotifier : public CZMQAbstractPublishNotifier
  73  {
  74  public:
  75      bool NotifyWalletTransaction(const CTransaction &transaction, const uint256 &hashBlock) override;
  76  };
  77  
  78  class CZMQPublishSequenceNotifier : public CZMQAbstractPublishNotifier
  79  {
  80  public:
  81      bool NotifyBlockConnect(const CBlockIndex *pindex) override;
  82      bool NotifyBlockDisconnect(const CBlockIndex *pindex) override;
  83      bool NotifyTransactionAcceptance(const CTransaction &transaction, uint64_t mempool_sequence) override;
  84      bool NotifyTransactionRemoval(const CTransaction &transaction, uint64_t mempool_sequence) override;
  85  };
  86  
  87  #endif // LIMENKA_ZMQ_ZMQPUBLISHNOTIFIER_H
  88