// Copyright (c) 2015-present The Limenka developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef LIMENKA_ZMQ_ZMQNOTIFICATIONINTERFACE_H #define LIMENKA_ZMQ_ZMQNOTIFICATIONINTERFACE_H #include #include #include #include #include #include #include #include class CBlock; class CBlockIndex; class CZMQAbstractNotifier; struct NewMempoolTransactionInfo; class CZMQNotificationInterface final : public CValidationInterface { public: ~CZMQNotificationInterface(); std::list GetActiveNotifiers() const; static std::unique_ptr Create(std::function&, const CBlockIndex&)> get_block_by_index); protected: bool Initialize(); void Shutdown(); void TransactionAddedToWallet(const CTransactionRef& tx, const uint256 &hashBlock); // CValidationInterface void TransactionAddedToMempool(const NewMempoolTransactionInfo& tx, uint64_t mempool_sequence) override; void TransactionRemovedFromMempool(const CTransactionRef& tx, MemPoolRemovalReason reason, uint64_t mempool_sequence) override; void BlockConnected(ChainstateRole role, const std::shared_ptr& pblock, const CBlockIndex* pindexConnected) override; void BlockDisconnected(const std::shared_ptr& pblock, const CBlockIndex* pindexDisconnected) override; void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) override; private: CZMQNotificationInterface(); void* pcontext{nullptr}; std::list> notifiers; boost::signals2::connection m_wtx_added_connection; }; extern std::unique_ptr g_zmq_notification_interface; #endif // LIMENKA_ZMQ_ZMQNOTIFICATIONINTERFACE_H