// Copyright (c) 2011-2015 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #pragma once #include #include #include "crypto/crypto.h" #include "CryptoNoteCore/CryptoNoteBasic.h" #include "IObservable.h" #include "IStreamSerializable.h" #include "ITransfersSynchronizer.h" namespace CryptoNote { struct CompleteBlock; class IBlockchainSynchronizerObserver { public: virtual void synchronizationProgressUpdated(uint32_t processedBlockCount, uint32_t totalBlockCount) {} virtual void synchronizationCompleted(std::error_code result) {} }; class IBlockchainConsumer { public: virtual ~IBlockchainConsumer() {} virtual SynchronizationStart getSyncStart() = 0; virtual void getKnownPoolTxIds(std::vector& ids) = 0; virtual void onBlockchainDetach(uint32_t height) = 0; virtual bool onNewBlocks(const CompleteBlock* blocks, uint32_t startHeight, uint32_t count) = 0; virtual std::error_code onPoolUpdated(const std::vector>& addedTransactions, const std::vector& deletedTransactions) = 0; }; class IBlockchainSynchronizer : public IObservable, public IStreamSerializable { public: virtual void addConsumer(IBlockchainConsumer* consumer) = 0; virtual bool removeConsumer(IBlockchainConsumer* consumer) = 0; virtual IStreamSerializable* getConsumerState(IBlockchainConsumer* consumer) = 0; virtual void start() = 0; virtual void stop() = 0; }; }