22#include "cluster/ClioNode.hpp"
23#include "cluster/impl/RepeatedTask.hpp"
24#include "data/BackendInterface.hpp"
25#include "etl/WriterState.hpp"
26#include "util/log/Logger.hpp"
28#include <boost/asio/any_io_executor.hpp>
29#include <boost/asio/cancellation_signal.hpp>
30#include <boost/asio/execution_context.hpp>
31#include <boost/asio/executor.hpp>
32#include <boost/asio/spawn.hpp>
33#include <boost/asio/strand.hpp>
34#include <boost/asio/thread_pool.hpp>
35#include <boost/signals2/connection.hpp>
36#include <boost/signals2/signal.hpp>
37#include <boost/signals2/variadic_signal.hpp>
38#include <boost/uuid/uuid.hpp>
58 using ClusterData = std::expected<std::vector<ClioNode>, std::string>;
63 std::shared_ptr<data::BackendInterface> backend_;
64 std::unique_ptr<etl::WriterStateInterface const> writerState_;
69 ClioNode::Uuid selfUuid_;
71 boost::signals2::signal<void(ClioNode::CUuid, std::shared_ptr<ClusterData const>)> onNewState_;
84 boost::asio::thread_pool& ctx,
85 std::shared_ptr<data::BackendInterface> backend,
86 std::unique_ptr<etl::WriterStateInterface const> writerState,
87 std::chrono::steady_clock::duration readInterval,
88 std::chrono::steady_clock::duration writeInterval
98 operator=(
Backend const&) =
delete;
123 template <
typename S>
124 requires std::invocable<S, ClioNode::CUuid, std::shared_ptr<ClusterData const>>
125 boost::signals2::connection
128 return onNewState_.connect(s);
141 doRead(boost::asio::yield_context yield);
Backend communication handler for cluster state synchronization.
Definition Backend.hpp:55
void run()
Start the backend read and write tasks.
Definition Backend.cpp:60
void stop()
Stop the backend read and write tasks.
Definition Backend.cpp:76
ClioNode::CUuid selfId() const
Get the UUID of this node in the cluster.
Definition Backend.cpp:83
std::expected< std::vector< ClioNode >, std::string > ClusterData
Type representing cluster data result - either a vector of nodes or an error message.
Definition Backend.hpp:58
boost::signals2::connection subscribeToNewState(S &&s)
Subscribe to new cluster state notifications.
Definition Backend.hpp:126
Backend(boost::asio::thread_pool &ctx, std::shared_ptr< data::BackendInterface > backend, std::unique_ptr< etl::WriterStateInterface const > writerState, std::chrono::steady_clock::duration readInterval, std::chrono::steady_clock::duration writeInterval)
Construct a Backend communication handler.
Definition Backend.cpp:44
Definition RepeatedTask.hpp:44
A simple thread-safe logger for the channel specified in the constructor.
Definition Logger.hpp:95