3#include "data/AmendmentCenterInterface.hpp"
4#include "data/BackendInterface.hpp"
5#include "data/Types.hpp"
6#include "feed/Types.hpp"
7#include "feed/impl/TrackableSignal.hpp"
8#include "feed/impl/TrackableSignalMap.hpp"
9#include "feed/impl/Util.hpp"
10#include "util/async/AnyExecutionContext.hpp"
11#include "util/async/AnyStrand.hpp"
12#include "util/log/Logger.hpp"
13#include "util/prometheus/Gauge.hpp"
15#include <boost/asio/io_context.hpp>
16#include <boost/asio/strand.hpp>
17#include <fmt/format.h>
18#include <xrpl/protocol/AccountID.h>
19#include <xrpl/protocol/Book.h>
20#include <xrpl/protocol/LedgerHeader.h>
21#include <xrpl/protocol/MPTIssue.h>
22#include <xrpl/protocol/UintTypes.h>
28#include <unordered_set>
34 struct AllVersionsMsgsType {
39 struct TransactionSlot {
40 std::reference_wrapper<TransactionFeed>
feed;
41 std::weak_ptr<Subscriber> subscriptionContextWeakPtr;
44 :
feed(
feed), subscriptionContextWeakPtr(connection)
49 operator()(std::shared_ptr<AllVersionsMsgsType>
const& allVersionMsgs)
const;
55 std::reference_wrapper<util::prometheus::GaugeInt> subAllCount_;
56 std::reference_wrapper<util::prometheus::GaugeInt> subAccountCount_;
57 std::reference_wrapper<util::prometheus::GaugeInt> subBookCount_;
58 std::reference_wrapper<util::prometheus::GaugeInt> subMPTIssuanceCount_;
70 accountProposedSignal_;
73 std::unordered_set<SubscriberPtr> notified_;
82 : strand_(executionCtx.makeStrand())
83 , subAllCount_(getSubscriptionsGaugeInt(
"tx"))
84 , subAccountCount_(getSubscriptionsGaugeInt(
"account"))
85 , subBookCount_(getSubscriptionsGaugeInt(
"book"))
86 , subMPTIssuanceCount_(getSubscriptionsGaugeInt(
"mpt_issuance"))
100 sub(SubscriberSharedPtr
const& subscriber);
109 sub(xrpl::AccountID
const& account, SubscriberSharedPtr
const& subscriber);
118 sub(xrpl::Book
const& book, SubscriberSharedPtr
const& subscriber);
127 sub(xrpl::MPTID
const& mptIssuanceID, SubscriberSharedPtr
const& subscriber);
134 subProposed(SubscriberSharedPtr
const& subscriber);
143 subProposed(xrpl::AccountID
const& account, SubscriberSharedPtr
const& subscriber);
150 unsub(SubscriberSharedPtr
const& subscriber);
158 unsub(xrpl::AccountID
const& account, SubscriberSharedPtr
const& subscriber);
173 unsubProposed(xrpl::AccountID
const& account, SubscriberSharedPtr
const& subscriber);
181 unsub(xrpl::Book
const& book, SubscriberSharedPtr
const& subscriber);
189 unsub(xrpl::MPTID
const& mptIssuanceID, SubscriberSharedPtr
const& subscriber);
200 xrpl::LedgerHeader
const& lgrInfo,
201 std::shared_ptr<data::BackendInterface const>
const& backend,
202 std::shared_ptr<data::AmendmentCenterInterface const>
const& amendmentCenter,
231 unsubInternal(SubscriberPtr subscriber);
234 unsubInternal(xrpl::AccountID
const& account, SubscriberPtr subscriber);
237 unsubProposedInternal(SubscriberPtr subscriber);
240 unsubProposedInternal(xrpl::AccountID
const& account, SubscriberPtr subscriber);
243 unsubInternal(xrpl::Book
const& book, SubscriberPtr subscriber);
246 unsubInternal(xrpl::MPTID
const& mptIssuanceID, SubscriberPtr subscriber);
Class to manage a map of key and its associative signal.
Definition TrackableSignalMap.hpp:30
A thread-safe class to manage a signal and its tracking connections.
Definition TrackableSignal.hpp:26
void unsub(SubscriberSharedPtr const &subscriber)
Unsubscribe to the transaction feed.
Definition TransactionFeed.cpp:144
void sub(SubscriberSharedPtr const &subscriber)
Subscribe to the transaction feed.
Definition TransactionFeed.cpp:64
void unsubProposed(SubscriberSharedPtr const &subscriber)
Unsubscribe to the transaction feed for proposed transaction stream.
Definition TransactionFeed.cpp:156
std::uint64_t bookSubCount() const
Get the number of books subscribers.
Definition TransactionFeed.cpp:195
std::uint64_t transactionSubCount() const
Get the number of subscribers of the transaction feed.
Definition TransactionFeed.cpp:183
std::uint64_t mptIssuanceSubCount() const
Get the number of MPT issuances subscribers.
Definition TransactionFeed.cpp:201
TransactionFeed(TransactionFeed &&)=delete
Move constructor is deleted because TransactionSlot takes TransactionFeed by reference.
std::uint64_t accountSubCount() const
Get the number of accounts subscribers.
Definition TransactionFeed.cpp:189
void pub(data::TransactionAndMetadata const &txMeta, xrpl::LedgerHeader const &lgrInfo, std::shared_ptr< data::BackendInterface const > const &backend, std::shared_ptr< data::AmendmentCenterInterface const > const &amendmentCenter, uint32_t networkID)
Publishes the transaction feed.
Definition TransactionFeed.cpp:207
TransactionFeed(util::async::AnyExecutionContext &executionCtx)
Construct a new Transaction Feed object.
Definition TransactionFeed.hpp:81
void subProposed(SubscriberSharedPtr const &subscriber)
Subscribe to the transaction feed for proposed transaction stream.
Definition TransactionFeed.cpp:90
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:78
A type-erased execution context.
Definition AnyExecutionContext.hpp:23
A type-erased execution context.
Definition AnyStrand.hpp:22
This namespace implements everything related to subscriptions.
Definition BookChangesFeed.hpp:14