10#include <boost/asio/awaitable.hpp>
11#include <boost/asio/ip/udp.hpp>
14#include <gsl/gsl-lite.hpp>
17#include <spdlog/spdlog.h>
26 class CommandBase :
public std::enable_shared_from_this<CommandBase>
39 [[nodiscard]]
auto check_response(std::span<char> response_msg)
const -> bool;
45 [[nodiscard]]
auto get_name() const -> std::string_view {
return name_; }
66 std::span<const CommunicateEntryType> data,
71 static auto send_message(std::shared_ptr<FecCommandSocket> socket, std::shared_ptr<CommandBase>
connection)
72 -> asio::awaitable<void>;
75 std::span<const CommunicateEntryType> data,
77 const std::shared_ptr<FecCommandSocket>& socket)
79 self.encode_write_msg(self.write_msg_buffer_, self.counter_, data, address);
80 auto send_action =
send_message(socket, self.shared_from_this());
process::SerializableMsgBuffer write_msg_response_buffer_
static auto send_message(std::shared_ptr< FecCommandSocket > socket, std::shared_ptr< CommandBase > connection) -> asio::awaitable< void >
udp::endpoint remote_endpoint_
void set_write_response_msg(const std::vector< CommunicateEntryType > &msg, uint16_t address)
auto get_response_msg() const -> std::string_view
auto check_response(std::span< char > response_msg) const -> bool
static auto timer_countdown(auto *connection) -> asio::awaitable< void >
void communicate(this auto &&self, std::span< const CommunicateEntryType > data, uint16_t address, const std::shared_ptr< FecCommandSocket > &socket)
void send_message_from(this auto &&self, const std::shared_ptr< FecCommandSocket > &socket)
auto get_remote_endpoint() -> const udp::endpoint &
void set_remote_endpoint(asio::ip::udp::endpoint endpoint)
process::SerializableMsgBuffer write_msg_buffer_
auto get_remote_ip_string() const
static void encode_write_msg(process::SerializableMsgBuffer &buffer, uint32_t counter, std::span< const CommunicateEntryType > data, uint16_t address)
auto get_name() const -> std::string_view
CommandBase(const std::string_view name)
auto get_remote_port() const
constexpr auto INIT_COUNT_VALUE
constexpr auto NULL_ADDRESS
constexpr auto get_shared_from_this(auto &&obj)