spectator/publisher.h (31 lines of code) (raw):

#pragma once #include "logger.h" #include "absl/strings/match.h" #include "absl/strings/string_view.h" #include <asio.hpp> namespace spectator { class SpectatordPublisher { public: explicit SpectatordPublisher( absl::string_view endpoint, uint32_t bytes_to_buffer = 0, std::shared_ptr<spdlog::logger> logger = DefaultLogger()); SpectatordPublisher(const SpectatordPublisher&) = delete; void send(std::string_view measurement) { sender_(measurement); }; protected: using sender_fun = std::function<void(std::string_view)>; sender_fun sender_; private: void setup_nop_sender(); void setup_unix_domain(absl::string_view path); void setup_udp(absl::string_view host_port); void local_reconnect(absl::string_view path); void udp_reconnect(const asio::ip::udp::endpoint& endpoint); std::shared_ptr<spdlog::logger> logger_; asio::io_context io_context_; asio::ip::udp::socket udp_socket_; asio::local::datagram_protocol::socket local_socket_; std::string buffer_; uint32_t bytes_to_buffer_; }; } // namespace spectator