diff options
Diffstat (limited to 'src/libs/client/OSCEngineSender.cpp')
-rw-r--r-- | src/libs/client/OSCEngineSender.cpp | 114 |
1 files changed, 97 insertions, 17 deletions
diff --git a/src/libs/client/OSCEngineSender.cpp b/src/libs/client/OSCEngineSender.cpp index cc70dc8e..10d9ab2e 100644 --- a/src/libs/client/OSCEngineSender.cpp +++ b/src/libs/client/OSCEngineSender.cpp @@ -14,8 +14,10 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include <iostream> #include "OSCEngineSender.h" #include "interface/ClientKey.h" +using std::cout; using std::cerr; using std::endl; namespace Ingen { namespace Client { @@ -38,6 +40,62 @@ OSCEngineSender::~OSCEngineSender() } +/** Attempt to connect to the engine (by pinging it). + * + * This doesn't register a client (or otherwise affect the client/engine state). + * To check for success wait for the ping response with id @a ping_id (using the + * relevant OSCClientReceiver). + * + * Passing a client_port of 0 will automatically choose a free port. If the + * @a block parameter is true, this function will not return until a connection + * has successfully been made. + */ +void +OSCEngineSender::attach(int32_t ping_id, bool block) +{ + cerr << "FIXME: attach\n"; + //start_listen_thread(_client_port); + + /*if (engine_url == "") { + string local_url = m_osc_listener->listen_url().substr( + 0, m_osc_listener->listen_url().find_last_of(":")); + local_url.append(":16180"); + _engine_addr = lo_address_new_from_url(local_url.c_str()); + } else { + _engine_addr = lo_address_new_from_url(engine_url.c_str()); + } + */ + _engine_addr = lo_address_new_from_url(_engine_url.c_str()); + + if (_engine_addr == NULL) { + cerr << "Unable to connect, aborting." << endl; + exit(EXIT_FAILURE); + } + + cout << "[OSCEngineSender] Attempting to contact engine at " << _engine_url << " ..." << endl; + + _id = ping_id; + this->ping(); + + /*if (block) { + set_wait_response_id(request_id); + + while (1) { + if (m_response_semaphore.try_wait() != 0) { + cout << "."; + cout.flush(); + ping(request_id); + usleep(100000); + } else { + cout << " connected." << endl; + m_waiting_for_response = false; + break; + } + } + } + */ +} + /* *** EngineInterface implementation below here *** */ @@ -103,7 +161,7 @@ OSCEngineSender::quit() void OSCEngineSender::create_patch(const string& path, - uint32_t poly) + uint32_t poly) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/create_patch", "isi", @@ -115,8 +173,8 @@ OSCEngineSender::create_patch(const string& path, void OSCEngineSender::create_port(const string& path, - const string& data_type, - bool is_output) + const string& data_type, + bool is_output) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/create_port", "issi", @@ -129,9 +187,9 @@ OSCEngineSender::create_port(const string& path, void OSCEngineSender::create_node(const string& path, - const string& plugin_type, - const string& plugin_uri, - bool polyphonic) + const string& plugin_type, + const string& plugin_uri, + bool polyphonic) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/create_node", "isssi", @@ -143,9 +201,31 @@ OSCEngineSender::create_node(const string& path, } +/** Create a node using library name and plugin label (DEPRECATED). + * + * DO NOT USE THIS. + */ +void +OSCEngineSender::create_node(const string& path, + const string& plugin_type, + const string& library_name, + const string& plugin_label, + bool polyphonic) +{ + assert(_engine_addr); + lo_send(_engine_addr, "/om/synth/create_node", "issssi", + next_id(), + path.c_str(), + plugin_type.c_str(), + library_name.c_str(), + plugin_label.c_str(), + (polyphonic ? 1 : 0)); +} + + void OSCEngineSender::rename(const string& old_path, - const string& new_name) + const string& new_name) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/rename", "iss", @@ -197,7 +277,7 @@ OSCEngineSender::disable_patch(const string& patch_path) void OSCEngineSender::connect(const string& src_port_path, - const string& dst_port_path) + const string& dst_port_path) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/connect", "iss", @@ -209,7 +289,7 @@ OSCEngineSender::connect(const string& src_port_path, void OSCEngineSender::disconnect(const string& src_port_path, - const string& dst_port_path) + const string& dst_port_path) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/disconnect", "iss", @@ -231,7 +311,7 @@ OSCEngineSender::disconnect_all(const string& node_path) void OSCEngineSender::set_port_value(const string& port_path, - float val) + float val) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/set_port_value", "isf", @@ -243,8 +323,8 @@ OSCEngineSender::set_port_value(const string& port_path, void OSCEngineSender::set_port_value(const string& port_path, - uint32_t voice, - float val) + uint32_t voice, + float val) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/set_port_value", "isif", @@ -257,7 +337,7 @@ OSCEngineSender::set_port_value(const string& port_path, void OSCEngineSender::set_port_value_queued(const string& port_path, - float val) + float val) { assert(_engine_addr); lo_send(_engine_addr, "/om/synth/set_port_value_queued", "isf", @@ -269,8 +349,8 @@ OSCEngineSender::set_port_value_queued(const string& port_path, void OSCEngineSender::set_program(const string& node_path, - uint32_t bank, - uint32_t program) + uint32_t bank, + uint32_t program) { assert(_engine_addr); lo_send(_engine_addr, @@ -293,8 +373,8 @@ OSCEngineSender::midi_learn(const string& node_path) void OSCEngineSender::set_metadata(const string& obj_path, - const string& predicate, - const string& value) + const string& predicate, + const string& value) { assert(_engine_addr); lo_send(_engine_addr, "/om/metadata/set", "isss", |