mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 03:03:22 -03:00
cfbb212493
The lambda captures a reference to the chainman unique_ptr to retrieve block data. An assert is added on the chainman to ensure that the lambda is not used while the chainman is uninitialized. This is done in preparation for the following commits where blockstorage functions are made BlockManager methods.
67 lines
2.3 KiB
C++
67 lines
2.3 KiB
C++
// Copyright (c) 2015-2022 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 BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
|
|
#define BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
|
|
|
|
#include <cstdint>
|
|
#include <functional>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
class CBlockIndex;
|
|
class CTransaction;
|
|
class CZMQAbstractNotifier;
|
|
|
|
using CZMQNotifierFactory = std::function<std::unique_ptr<CZMQAbstractNotifier>()>;
|
|
|
|
class CZMQAbstractNotifier
|
|
{
|
|
public:
|
|
static const int DEFAULT_ZMQ_SNDHWM {1000};
|
|
|
|
CZMQAbstractNotifier() : outbound_message_high_water_mark(DEFAULT_ZMQ_SNDHWM) {}
|
|
virtual ~CZMQAbstractNotifier();
|
|
|
|
template <typename T>
|
|
static std::unique_ptr<CZMQAbstractNotifier> Create()
|
|
{
|
|
return std::make_unique<T>();
|
|
}
|
|
|
|
std::string GetType() const { return type; }
|
|
void SetType(const std::string &t) { type = t; }
|
|
std::string GetAddress() const { return address; }
|
|
void SetAddress(const std::string &a) { address = a; }
|
|
int GetOutboundMessageHighWaterMark() const { return outbound_message_high_water_mark; }
|
|
void SetOutboundMessageHighWaterMark(const int sndhwm) {
|
|
if (sndhwm >= 0) {
|
|
outbound_message_high_water_mark = sndhwm;
|
|
}
|
|
}
|
|
|
|
virtual bool Initialize(void *pcontext) = 0;
|
|
virtual void Shutdown() = 0;
|
|
|
|
// Notifies of ConnectTip result, i.e., new active tip only
|
|
virtual bool NotifyBlock(const CBlockIndex *pindex);
|
|
// Notifies of every block connection
|
|
virtual bool NotifyBlockConnect(const CBlockIndex *pindex);
|
|
// Notifies of every block disconnection
|
|
virtual bool NotifyBlockDisconnect(const CBlockIndex *pindex);
|
|
// Notifies of every mempool acceptance
|
|
virtual bool NotifyTransactionAcceptance(const CTransaction &transaction, uint64_t mempool_sequence);
|
|
// Notifies of every mempool removal, except inclusion in blocks
|
|
virtual bool NotifyTransactionRemoval(const CTransaction &transaction, uint64_t mempool_sequence);
|
|
// Notifies of transactions added to mempool or appearing in blocks
|
|
virtual bool NotifyTransaction(const CTransaction &transaction);
|
|
|
|
protected:
|
|
void* psocket{nullptr};
|
|
std::string type;
|
|
std::string address;
|
|
int outbound_message_high_water_mark; // aka SNDHWM
|
|
};
|
|
|
|
#endif // BITCOIN_ZMQ_ZMQABSTRACTNOTIFIER_H
|