1#include <xrpld/overlay/PeerSet.h>
3#include <xrpld/app/main/Application.h>
4#include <xrpld/overlay/Message.h>
5#include <xrpld/overlay/Overlay.h>
6#include <xrpld/overlay/Peer.h>
8#include <xrpl/basics/Log.h>
9#include <xrpl/beast/utility/Journal.h>
11#include <google/protobuf/message.h>
41 ::google::protobuf::Message
const& message,
42 protocol::MessageType type,
72 auto const& overlay =
app_.getOverlay();
77 overlay.foreach([&](
auto const& peer) {
78 auto const score = peer->getScore(hasItem(peer));
83 pairs, [](ScoredPeer
const& lhs, ScoredPeer
const& rhs) {
return lhs.first > rhs.first; });
86 for (
auto const& pair : pairs)
88 auto const peer = pair.second;
89 if (!
peers_.insert(peer->id()).second)
92 if (++accepted >= limit)
99 ::google::protobuf::Message
const& message,
100 protocol::MessageType type,
112 if (
auto p =
app_.getOverlay().findPeerByShortID(
id))
159 JLOG(
j_.error()) <<
"DummyPeerSet addPeers should not be called";
164 ::google::protobuf::Message
const& message,
165 protocol::MessageType type,
168 JLOG(
j_.error()) <<
"DummyPeerSet sendRequest should not be called";
175 JLOG(
j_.error()) <<
"DummyPeerSet getPeerIds should not be called";
A generic endpoint for log messages.
DummyPeerSet(Application &app)
void addPeers(std::size_t limit, std::function< bool(std::shared_ptr< Peer > const &)> hasItem, std::function< void(std::shared_ptr< Peer > const &)> onPeerAdded) override
Try add more peers.
void sendRequest(::google::protobuf::Message const &message, protocol::MessageType type, std::shared_ptr< Peer > const &peer) override
std::set< Peer::id_t > const & getPeerIds() const override
get the set of ids of previously added peers
PeerSetBuilderImpl(Application &app)
std::unique_ptr< PeerSet > build() override
std::set< Peer::id_t > peers_
The identifiers of the peers we are tracking.
PeerSetImpl(Application &app)
void addPeers(std::size_t limit, std::function< bool(std::shared_ptr< Peer > const &)> hasItem, std::function< void(std::shared_ptr< Peer > const &)> onPeerAdded) override
Try add more peers.
void sendRequest(::google::protobuf::Message const &message, protocol::MessageType type, std::shared_ptr< Peer > const &peer) override
Send a message to one or all peers.
std::set< Peer::id_t > const & getPeerIds() const override
get the set of ids of previously added peers
Supports data retrieval by managing a set of peers.
T emplace_back(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::unique_ptr< PeerSetBuilder > makePeerSetBuilder(Application &app)
std::unique_ptr< PeerSet > makeDummyPeerSet(Application &app)
Make a dummy PeerSet that does not do anything.