#include "routing.h" #include #include namespace midi_router { void Router::route(Route_Table const & config, bool verbose) { Message m; if (m_queue.wait_dequeue_timed(m, std::chrono::milliseconds(500))) { if (!config.contains(*m.source_id) || !config.at(*m.source_id).contains(m.type())) { return; } // LTG: at least one of these map accesses can be avoided for (auto const & target: config.at(*m.source_id).at(m.type())) { if (verbose) { std::cout << "[" << type2string.at(m.type()) << "] " << *m.source_id << " -> " << target.get().get_id() << " | "; for (auto byte : m.bytes) std::cout << static_cast(byte) << " "; std::cout << ")\n"; } target.get().send(m.bytes); } } } void Router::submit(Message const & message) { if (!m_queue.try_enqueue(message)) { std::cerr << "Failed to enqueue message from " << *message.source_id << "\n"; } } } // namespace midi_router