dncurrency/nano/node/distributed_work_factory.hpp
2024-10-30 07:40:58 +00:00

40 lines
1 KiB
C++

#pragma once
#include <nano/lib/numbers.hpp>
#include <nano/lib/numbers_templ.hpp>
#include <atomic>
#include <functional>
#include <optional>
#include <unordered_map>
#include <vector>
namespace nano
{
class container_info_component;
class distributed_work;
class node;
class root;
struct work_request;
class distributed_work_factory final
{
public:
distributed_work_factory (nano::node &);
~distributed_work_factory ();
bool make (nano::work_version const, nano::root const &, std::vector<std::pair<std::string, uint16_t>> const &, uint64_t, std::function<void (std::optional<uint64_t>)> const &, std::optional<nano::account> const & = std::nullopt);
bool make (std::chrono::seconds const &, nano::work_request const &);
void cancel (nano::root const &);
void cleanup_finished ();
void stop ();
std::size_t size () const;
nano::container_info container_info () const;
private:
std::unordered_multimap<nano::root, std::weak_ptr<nano::distributed_work>> items;
nano::node & node;
mutable nano::mutex mutex;
std::atomic<bool> stopped{ false };
};
}