#include "connection_manager.h" #include "device_connection.h" #include "udevw/include/udevw.hpp" #include #include namespace midi_router { static void callback(double time_stamp, std::vector *raw, void *user_data) { Device_Connection* device = static_cast(user_data); if (raw->size() > 3) { std::cerr << "Received message with wrong size (" << raw->size() << ") from " << device->source_id << ", dropping\n"; for (auto const & byte : *raw) std::cerr << static_cast(byte); std::cerr << "\n"; return; } Message message { &device->source_id, *raw }; device->submitter.submit(message); } Connection_Manager::Connection_Manager(Device_Map const & device_map, Submitter & submitter): m_device_map(device_map), m_submitter(submitter), m_connections{}, m_detector(std::bind(&Connection_Manager::detect_devices, this)) { for (auto const & [name, id] : device_map) { m_connections[id] = std::make_unique(id, name, submitter, callback); m_connections[id]->open(); } } Connection_Manager::~Connection_Manager() = default; Sender & Connection_Manager::get_sender(Device_Id const & device) const { return *m_connections.at(device); } void Connection_Manager::detect_devices() { while (true) { std::cout << "Polling for devices\n"; std::this_thread::sleep_for(std::chrono::seconds(1)); for (auto && [id, connection] : m_connections) { connection->open(); } } } } // namespace midi_router