32 #ifndef LEDGER_CORE_ABSTRACTBLOCKCHAINOBSERVER_H 33 #define LEDGER_CORE_ABSTRACTBLOCKCHAINOBSERVER_H 35 #include <async/DedicatedContext.hpp> 36 #include <api/Currency.hpp> 37 #include <api/ExecutionContext.hpp> 38 #include <api/DynamicObject.hpp> 39 #include <debug/logger.hpp> 44 template<
typename Account,
typename BlockchainExplorerTransaction,
typename BlockchainExplorerBlock>
48 virtual bool registerAccount(
const std::shared_ptr<Account>& account) {
49 std::lock_guard<std::mutex> lock(_lock);
50 if (!_isRegistered(lock, account)) {
51 bool needsStart = _accounts.empty();
52 _accounts.push_front(account);
59 virtual bool unregisterAccount(
const std::shared_ptr<Account>& account) {
60 std::lock_guard<std::mutex> lock(_lock);
61 if (_isRegistered(lock, account)) {
62 bool needsStop = _accounts.size() == 1;
63 _accounts.remove(account);
71 virtual bool isRegistered(
const std::shared_ptr<Account>& account) {
72 std::lock_guard<std::mutex> lock(_lock);
73 return _isRegistered(lock, account);
76 std::shared_ptr<spdlog::logger>
logger()
const {
80 bool isObserving()
const {
81 std::lock_guard<std::mutex> lock(_lock);
82 return _accounts.size() > 0;
86 virtual void onStart() = 0;
87 virtual void onStop() = 0;
89 virtual void putTransaction(
const BlockchainExplorerTransaction& tx) = 0;
90 virtual void putBlock(
const BlockchainExplorerBlock& block) = 0;
93 void setLogger(
const std::shared_ptr<spdlog::logger>&
logger) {
98 bool _isRegistered(std::lock_guard<std::mutex>& lock,
const std::shared_ptr<Account>& account) {
99 for (
auto& acc : _accounts) {
100 if (acc.get() == account.get())
107 std::list<std::shared_ptr<Account>> _accounts;
108 mutable std::mutex _lock;
109 std::shared_ptr<spdlog::logger> _logger;
114 #endif //LEDGER_CORE_ABSTRACTBLOCKCHAINOBSERVER_H Definition: AbstractBlockchainObserver.h:45
Definition: Account.cpp:8
Definition: logger.hpp:44