#pragma once #include "types.h" #include "submitter.h" #include "sender.h" #include #include #include namespace midi_router { struct Device_Connection : public Sender { Device_Connection(Device_Id const & source_id, std::string const & device_name, Submitter & submitter, RtMidiIn::RtMidiCallback callback): source_id(source_id), device_name(device_name), submitter(submitter) { midi_in.setCallback(callback, this); midi_in.ignoreTypes(true, false, true); } Device_Id const & source_id; std::string const & device_name; Submitter & submitter; RtMidiIn midi_in {}; RtMidiOut midi_out {}; std::mutex mutex {}; void send(std::vector const & payload) override { const std::lock_guard lock(mutex); if (midi_out.isPortOpen()) midi_out.sendMessage(&payload); } std::string get_id() const override { return source_id; } void connect(std::size_t port) { const std::lock_guard lock(mutex); if (!midi_in.isPortOpen()) midi_in.openPort(port); if (!midi_out.isPortOpen()) midi_out.openPort(port); } void disconnect() { const std::lock_guard lock(mutex); if (midi_in.isPortOpen()) midi_in.closePort(); if (midi_out.isPortOpen()) midi_out.closePort(); } }; } // namespace midi_router