aboutsummaryrefslogtreecommitdiffstats
path: root/daemon/src/connection_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/src/connection_manager.cpp')
-rw-r--r--daemon/src/connection_manager.cpp38
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)
{