22#include "data/BackendInterface.hpp"
23#include "data/Types.hpp"
24#include "feed/Types.hpp"
25#include "feed/impl/TrackableSignal.hpp"
26#include "feed/impl/TrackableSignalMap.hpp"
27#include "feed/impl/Util.hpp"
28#include "util/async/AnyExecutionContext.hpp"
29#include "util/async/AnyStrand.hpp"
30#include "util/log/Logger.hpp"
31#include "util/prometheus/Gauge.hpp"
33#include <boost/asio/io_context.hpp>
34#include <boost/asio/strand.hpp>
36#include <xrpl/protocol/AccountID.h>
37#include <xrpl/protocol/Book.h>
38#include <xrpl/protocol/LedgerHeader.h>
45#include <unordered_set>
51 using AllVersionTransactionsType = std::array<std::shared_ptr<std::string>, 2>;
53 struct TransactionSlot {
54 std::reference_wrapper<TransactionFeed>
feed;
55 std::weak_ptr<Subscriber> subscriptionContextWeakPtr;
58 :
feed(
feed), subscriptionContextWeakPtr(connection)
63 operator()(AllVersionTransactionsType
const& allVersionMsgs)
const;
69 std::reference_wrapper<util::prometheus::GaugeInt> subAllCount_;
70 std::reference_wrapper<util::prometheus::GaugeInt> subAccountCount_;
71 std::reference_wrapper<util::prometheus::GaugeInt> subBookCount_;
81 std::unordered_set<SubscriberPtr>
90 : strand_(executionCtx.makeStrand())
91 , subAllCount_(getSubscriptionsGaugeInt(
"tx"))
92 , subAccountCount_(getSubscriptionsGaugeInt(
"account"))
93 , subBookCount_(getSubscriptionsGaugeInt(
"book"))
102 sub(SubscriberSharedPtr
const& subscriber);
110 sub(ripple::AccountID
const& account, SubscriberSharedPtr
const& subscriber);
118 sub(ripple::Book
const& book, SubscriberSharedPtr
const& subscriber);
125 subProposed(SubscriberSharedPtr
const& subscriber);
134 subProposed(ripple::AccountID
const& account, SubscriberSharedPtr
const& subscriber);
141 unsub(SubscriberSharedPtr
const& subscriber);
149 unsub(ripple::AccountID
const& account, SubscriberSharedPtr
const& subscriber);
164 unsubProposed(ripple::AccountID
const& account, SubscriberSharedPtr
const& subscriber);
172 unsub(ripple::Book
const& book, SubscriberSharedPtr
const& subscriber);
182 ripple::LedgerHeader
const& lgrInfo,
183 std::shared_ptr<data::BackendInterface const>
const& backend);
208 unsubInternal(ripple::AccountID
const& account,
SubscriberPtr subscriber);
214 unsubProposedInternal(ripple::AccountID
const& account,
SubscriberPtr subscriber);
217 unsubInternal(ripple::Book
const& book,
SubscriberPtr subscriber);
Class to manage a map of key and its associative signal.
Definition TrackableSignalMap.hpp:49
A thread-safe class to manage a signal and its tracking connections.
Definition TrackableSignal.hpp:44
Definition TransactionFeed.hpp:49
void unsub(SubscriberSharedPtr const &subscriber)
Unsubscribe to the transaction feed.
Definition TransactionFeed.cpp:126
void sub(SubscriberSharedPtr const &subscriber)
Subscribe to the transaction feed.
Definition TransactionFeed.cpp:72
void unsubProposed(SubscriberSharedPtr const &subscriber)
Unsubscribe to the transaction feed for proposed transaction stream.
Definition TransactionFeed.cpp:138
std::uint64_t bookSubCount() const
Get the number of books subscribers.
Definition TransactionFeed.cpp:168
std::uint64_t transactionSubCount() const
Get the number of subscribers of the transaction feed.
Definition TransactionFeed.cpp:156
std::uint64_t accountSubCount() const
Get the number of accounts subscribers.
Definition TransactionFeed.cpp:162
void pub(data::TransactionAndMetadata const &txMeta, ripple::LedgerHeader const &lgrInfo, std::shared_ptr< data::BackendInterface const > const &backend)
Publishes the transaction feed.
Definition TransactionFeed.cpp:174
TransactionFeed(util::async::AnyExecutionContext &executionCtx)
Construct a new Transaction Feed object.
Definition TransactionFeed.hpp:89
void subProposed(SubscriberSharedPtr const &subscriber)
Subscribe to the transaction feed for proposed transaction stream.
Definition TransactionFeed.cpp:94
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:110
A type-erased execution context.
Definition AnyExecutionContext.hpp:41
A type-erased execution context.
Definition AnyStrand.hpp:40
An interface to provide connection functionality for subscriptions.
Definition SubscriptionContextInterface.hpp:39
This namespace implements everything related to subscriptions.
Definition BookChangesFeed.hpp:33