text: // Copyright (c) 2015-2015 Bitcoin developers
  // Copyright (c) 2015-2018 PIVX developers
  // Copyright (c) 2018-2019 Chronon developers
  
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #ifndef BITCOIN_ZMQ_ZMQPUBLISHNOTIFIER_H
  #define BITCOIN_ZMQ_ZMQPUBLISHNOTIFIER_H
  
  #include "zmqabstractnotifier.h"
  
  class CBlockIndex;
  
  class CZMQAbstractPublishNotifier : public CZMQAbstractNotifier
  {
  private:
      uint32_t nSequence; // upcounting per message sequence number
  
  public:
  
      /* send zmq multipart message
         parts:
            * command
            * data
            * message sequence number
      */
      bool SendMessage(const char *command, const void* data, size_t size);
  
      bool Initialize(void *pcontext);
      void Shutdown();
  };
  
  class CZMQPublishHashBlockNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyBlock(const CBlockIndex *pindex);
  };
  
  class CZMQPublishHashTransactionNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyTransaction(const CTransaction &transaction);
  };
  
  class CZMQPublishHashTransactionLockNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyTransactionLock(const CTransaction &transaction);
  };
  
  class CZMQPublishRawBlockNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyBlock(const CBlockIndex *pindex);
  };
  
  class CZMQPublishRawTransactionNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyTransaction(const CTransaction &transaction);
  };
  
  class CZMQPublishRawTransactionLockNotifier : public CZMQAbstractPublishNotifier
  {
  public:
      bool NotifyTransactionLock(const CTransaction &transaction);
  };
  
  #endif // BITCOIN_ZMQ_ZMQPUBLISHNOTIFIER_H
  