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>
39 ::google::protobuf::Message
const& message,
40 protocol::MessageType type,
68 auto const& overlay =
app_.getOverlay();
73 overlay.foreach([&](
auto const& peer) {
74 auto const score = peer->getScore(hasItem(peer));
79 pairs, [](ScoredPeer
const& lhs, ScoredPeer
const& rhs) {
return lhs.first > rhs.first; });
82 for (
auto const& pair : pairs)
84 auto const peer = pair.second;
85 if (!
peers_.insert(peer->id()).second)
88 if (++accepted >= limit)
95 ::google::protobuf::Message
const& message,
96 protocol::MessageType type,
108 if (
auto p =
app_.getOverlay().findPeerByShortID(
id))
155 JLOG(
j_.error()) <<
"DummyPeerSet addPeers should not be called";
160 ::google::protobuf::Message
const& message,
161 protocol::MessageType type,
164 JLOG(
j_.error()) <<
"DummyPeerSet sendRequest should not be called";
171 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.