From e47cba33695ac5ea54688c7215a5d760e8138757 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 30 Jan 2012 12:56:43 -0800 Subject: [PATCH] Code to track ledgers we're acquiring from remote node, allow callbacks to be attached to them, and trigger their state machines. --- LedgerAcquire.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 LedgerAcquire.h diff --git a/LedgerAcquire.h b/LedgerAcquire.h new file mode 100644 index 0000000000..47037eb25f --- /dev/null +++ b/LedgerAcquire.h @@ -0,0 +1,62 @@ +#ifndef __LEDGERACQUIRE__ +#define __LEDGERACQUIRE__ + +#include + +#include "boost/function.hpp" + +#include "Ledger.h" +#include "Peer.h" + +class LedgerAcquire +{ // A ledger we are trying to acquire +public: + typedef boost::shared_ptr pointer; + +protected: + boost::recursive_mutex mLock; + Ledger::pointer mLedger; + uint256 mHash; + bool mComplete, mFailed, mHaveBase, mHaveState, mHaveTransactions; + std::vector< boost::function > mOnComplete; + + std::list > mPeers; // peers known to have this ledger + + void done(void); + void timerEntry(void); + +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; } + Ledger::pointer getLedger() { return mLedger; } + + void addTrigger(boost::function); + + void peerHash(Peer::pointer); + void takeBase(std::vector data); + void takeTxNode(std::list hashes, std::list > data); + void takeAsNode(std::list hashes, std::list > data); + void takeTx(std::list hashes, std::list > data); +}; + +class LedgerAcquireMaster +{ +protected: + boost::mutex mLock; + std::map mLedgers; + +public: + LedgerAcquireMaster() { ; } + + LedgerAcquire::pointer findCreate(const uint256& hash); + LedgerAcquire::pointer find(const uint256& hash); + bool hasLedger(const uint256& ledgerHash); +}; + +#endif