#pragma once #include #include #include #include "navmon.pb.h" #include #include class NMMSender { struct Destination { int fd{-1}; std::string dst; std::string fname; std::deque queue; std::mutex mut; void emitNMM(const NavMonMessage& nmm); }; public: void addDestination(int fd) { auto d = std::make_unique(); d->fd = fd; d_dests.push_back(std::move(d)); } void addDestination(const std::string& dest) { auto d = std::make_unique(); d->dst = dest; d_dests.push_back(std::move(d)); } void launch() { for(auto& d : d_dests) { if(!d->dst.empty()) { std::thread t(&NMMSender::sendTCPThread, this, d.get()); t.detach(); } } } void sendTCPThread(Destination* d); void emitNMM(const NavMonMessage& nmm); bool d_debug{false}; private: std::vector> d_dests; };