// Copyright (c) 2012-2015, The CryptoNote developers, The Bytecoin developers // // This file is part of Bytecoin. // // Bytecoin is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Bytecoin is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with Bytecoin. If not, see . #pragma once #include #include #include #include "BlockchainMonitor.h" #include "Logging/LoggerRef.h" #include "Miner.h" #include "MinerEvent.h" #include "MiningConfig.h" namespace System { class Dispatcher; } namespace Miner { class MinerManager { public: MinerManager(System::Dispatcher& dispatcher, const CryptoNote::MiningConfig& config, Logging::ILogger& logger); ~MinerManager(); void start(); private: System::Dispatcher& m_dispatcher; Logging::LoggerRef m_logger; System::ContextGroup m_contextGroup; CryptoNote::MiningConfig m_config; CryptoNote::Miner m_miner; BlockchainMonitor m_blockchainMonitor; System::Event m_eventOccurred; System::Event m_httpEvent; std::queue m_events; CryptoNote::Block m_minedBlock; uint64_t m_lastBlockTimestamp; void eventLoop(); MinerEvent waitEvent(); void pushEvent(MinerEvent&& event); void startMining(const CryptoNote::BlockMiningParameters& params); void stopMining(); void startBlockchainMonitoring(); void stopBlockchainMonitoring(); bool submitBlock(const CryptoNote::Block& minedBlock, const std::string& daemonHost, uint16_t daemonPort); CryptoNote::BlockMiningParameters requestMiningParameters(System::Dispatcher& dispatcher, const std::string& daemonHost, uint16_t daemonPort, const std::string& miningAddress); void adjustBlockTemplate(CryptoNote::Block& blockTemplate) const; }; } //namespace Miner