mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Abstract out the peer set and timing code fromt he ledger acquire logic.
There's probably a better way to handle the timer lambda, but this works.
This commit is contained in:
@@ -13,36 +13,60 @@
|
||||
#include "Peer.h"
|
||||
#include "../obj/src/newcoin.pb.h"
|
||||
|
||||
class LedgerAcquire : public boost::enable_shared_from_this<LedgerAcquire>
|
||||
class PeerSet
|
||||
{
|
||||
protected:
|
||||
uint256 mHash;
|
||||
int mTimerInterval;
|
||||
bool mComplete, mFailed;
|
||||
|
||||
boost::recursive_mutex mLock;
|
||||
boost::asio::deadline_timer mTimer;
|
||||
std::list< boost::weak_ptr<Peer> > mPeers;
|
||||
|
||||
PeerSet(const uint256& hash, int interval);
|
||||
|
||||
public:
|
||||
const uint256& getHash() const { return mHash; }
|
||||
bool isComplete() const { return mComplete; }
|
||||
bool isFailed() const { return mFailed; }
|
||||
|
||||
void peerHas(Peer::pointer);
|
||||
void badPeer(Peer::pointer);
|
||||
void resetTimer();
|
||||
|
||||
protected:
|
||||
virtual void newPeer(Peer::pointer) = 0;
|
||||
virtual boost::function<void (boost::system::error_code)> getTimerLamba() = 0;
|
||||
|
||||
void setComplete() { mComplete = true; }
|
||||
void setFailed() { mFailed = true; }
|
||||
};
|
||||
|
||||
class LedgerAcquire : public PeerSet, public boost::enable_shared_from_this<LedgerAcquire>
|
||||
{ // A ledger we are trying to acquire
|
||||
public:
|
||||
typedef boost::shared_ptr<LedgerAcquire> pointer;
|
||||
|
||||
protected:
|
||||
boost::recursive_mutex mLock;
|
||||
Ledger::pointer mLedger;
|
||||
uint256 mHash;
|
||||
bool mComplete, mFailed, mHaveBase, mHaveState, mHaveTransactions;
|
||||
|
||||
boost::asio::deadline_timer mTimer;
|
||||
bool mHaveBase, mHaveState, mHaveTransactions;
|
||||
|
||||
std::vector< boost::function<void (LedgerAcquire::pointer)> > mOnComplete;
|
||||
|
||||
std::list<boost::weak_ptr<Peer> > mPeers; // peers known to have this ledger
|
||||
|
||||
void done();
|
||||
void onTimer() { trigger(Peer::pointer()); }
|
||||
|
||||
static void timerEntry(boost::weak_ptr<LedgerAcquire>, const boost::system::error_code&);
|
||||
void sendRequest(boost::shared_ptr<newcoin::TMGetLedger> message);
|
||||
void sendRequest(boost::shared_ptr<newcoin::TMGetLedger> message, Peer::pointer peer);
|
||||
void trigger(Peer::pointer peer);
|
||||
void newPeer(Peer::pointer peer) { trigger(peer); }
|
||||
void trigger(Peer::pointer);
|
||||
virtual boost::function<void (boost::system::error_code)> getTimerLamba();
|
||||
static void LATimerEntry(boost::weak_ptr<LedgerAcquire>, const boost::system::error_code&);
|
||||
|
||||
public:
|
||||
LedgerAcquire(const uint256& hash);
|
||||
|
||||
const uint256& getHash() const { return mHash; }
|
||||
bool isComplete() const { return mComplete; }
|
||||
bool isFailed() const { return mFailed; }
|
||||
bool isBase() const { return mHaveBase; }
|
||||
bool isAcctStComplete() const { return mHaveState; }
|
||||
bool isTransComplete() const { return mHaveTransactions; }
|
||||
@@ -50,14 +74,11 @@ public:
|
||||
|
||||
void addOnComplete(boost::function<void (LedgerAcquire::pointer)>);
|
||||
|
||||
void peerHas(Peer::pointer);
|
||||
void badPeer(Peer::pointer);
|
||||
bool takeBase(const std::string& data, Peer::pointer);
|
||||
bool takeTxNode(const std::list<SHAMapNode>& IDs, const std::list<std::vector<unsigned char> >& data,
|
||||
Peer::pointer);
|
||||
bool takeAsNode(const std::list<SHAMapNode>& IDs, const std::list<std::vector<unsigned char> >& data,
|
||||
Peer::pointer);
|
||||
void resetTimer();
|
||||
};
|
||||
|
||||
class LedgerAcquireMaster
|
||||
|
||||
Reference in New Issue
Block a user