text: // Copyright (c) 2015-2018 The Bitcoin Core developers
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #ifndef BITCOINVG_ZMQ_ZMQPUBLISHNOTIFIER_H
  #define BITCOINVG_ZMQ_ZMQPUBLISHNOTIFIER_H
  
  #include <zmq/zmqabstractnotifier.h>
  
  class CBlockIndex;
  
  class CZMQAbstractPublishNotifier : public CZMQAbstractNotifier
  {
  private:
      uint32_t nSequence {0U}; //!< upcounting per message sequence number
  
  public:
  
      /* send zmq multipart message
         parts:
            * command
            * data
            * message sequence number
      */
      bool SendZmqMessage(const char *command, const void* data, size_t size);
  
      bool Initialize(void *pcontext) override;
      void Shutdown() override;
  };
  
  class CZMQPublishHashBlockNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyBlock(const CBlockIndex *pindex) override;
  };
  
  class CZMQPublishHashTransactionNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyTransaction(const CTransaction &transaction) override;
  };
  
  class CZMQPublishRawBlockNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyBlock(const CBlockIndex *pindex) override;
  };
  
  class CZMQPublishRawTransactionNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyTransaction(const CTransaction &transaction) override;
  };
  
  class CZMQPublishSequenceNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyBlockConnect(const CBlockIndex *pindex) override;
      bool NotifyBlockDisconnect(const CBlockIndex *pindex) override;
      bool NotifyTransactionAcceptance(const CTransaction &transaction, uint64_t mempool_sequence) override;
      bool NotifyTransactionRemoval(const CTransaction &transaction, uint64_t mempool_sequence) override;
  };
  
  #endif // BITCOINVG_ZMQ_ZMQPUBLISHNOTIFIER_H
  