diff options
Diffstat (limited to 'daemon/src/connection_manager.cpp')
-rw-r--r-- | daemon/src/connection_manager.cpp | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/daemon/src/connection_manager.cpp b/daemon/src/connection_manager.cpp index 3b2d7da..f6a02c1 100644 --- a/daemon/src/connection_manager.cpp +++ b/daemon/src/connection_manager.cpp @@ -1,17 +1,33 @@ #include "connection_manager.h" +#include "sender.h" + #include <iostream> #include <rtmidi/RtMidi.h> namespace midi_router { -struct Device_Connection +struct Device_Connection : public Sender { - Device_Id source_id; - std::function<void(Message const &)> const & submit; + Device_Connection(Device_Id const & source_id, Submitter & submitter): + source_id(source_id), + submitter(submitter) + {} + + Device_Id const & source_id; + Submitter & submitter; RtMidiIn midi_in {}; RtMidiOut midi_out {}; + + void + send(std::array<std::uint8_t, 3> const & payload) override + { + if (midi_out.isPortOpen()) + { + midi_out.sendMessage(payload.data(), 3); + } + } }; static void @@ -25,17 +41,17 @@ callback(double time_stamp, std::vector<unsigned char> *raw, void *user_data) } Message message { &device->source_id, {raw->at(0), raw->at(1), raw->at(2)} }; - device->submit(message); + device->submitter.submit(message); } -Connection_Manager::Connection_Manager(Device_Map const & device_map, std::function<void(Message const &)> const & submit): +Connection_Manager::Connection_Manager(Device_Map const & device_map, Submitter & submitter): m_device_map(device_map), - m_submit(submit), + m_submitter(submitter), m_connections{} { for (auto const & [name, id] : device_map) { - m_connections[id] = std::make_unique<Device_Connection>(id, submit); + m_connections[id] = std::make_unique<Device_Connection>(id, submitter); auto & connection = m_connections[id]; connection->midi_in.setCallback(&callback, connection.get()); @@ -50,12 +66,18 @@ Connection_Manager::Connection_Manager(Device_Map const & device_map, std::funct { std::cerr << "Output port not found for device " << name << "\n"; } - + } } Connection_Manager::~Connection_Manager() = default; +Sender & +Connection_Manager::get_sender(Device_Id const & device) const +{ + return *m_connections.at(device); +} + bool Connection_Manager::open_port(RtMidi* const midi, std::string const & name) { |