diff options
author | David Robillard <d@drobilla.net> | 2011-05-19 20:44:19 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-05-19 20:44:19 +0000 |
commit | 8f01b24d7a258d0e717eedcbb3618258bfe9883e (patch) | |
tree | e76f0306c67c67e616d86eed348d04615e702cd5 /src/client/OSCClientReceiver.cpp | |
parent | 4d365e0c45e69d2a0ace0faec50547d37588bf0c (diff) | |
download | ingen-8f01b24d7a258d0e717eedcbb3618258bfe9883e.tar.gz ingen-8f01b24d7a258d0e717eedcbb3618258bfe9883e.tar.bz2 ingen-8f01b24d7a258d0e717eedcbb3618258bfe9883e.zip |
Fix delta via OSC (OSC bindings should be fully functional again).
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@3285 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/client/OSCClientReceiver.cpp')
-rw-r--r-- | src/client/OSCClientReceiver.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/client/OSCClientReceiver.cpp b/src/client/OSCClientReceiver.cpp index 2e28019b..402a6974 100644 --- a/src/client/OSCClientReceiver.cpp +++ b/src/client/OSCClientReceiver.cpp @@ -141,6 +141,10 @@ OSCClientReceiver::setup_callbacks() lo_server_thread_add_method(_st, "/error", "is", response_error_cb, this); lo_server_thread_add_method(_st, "/plugin", "sss", plugin_cb, this); lo_server_thread_add_method(_st, "/put", NULL, put_cb, this); + lo_server_thread_add_method(_st, "/delta_begin", NULL, delta_begin_cb, this); + lo_server_thread_add_method(_st, "/delta_remove", NULL, delta_remove_cb, this); + lo_server_thread_add_method(_st, "/delta_add", NULL, delta_add_cb, this); + lo_server_thread_add_method(_st, "/delta_end", NULL, delta_end_cb, this); lo_server_thread_add_method(_st, "/move", "ss", move_cb, this); lo_server_thread_add_method(_st, "/delete", "s", del_cb, this); lo_server_thread_add_method(_st, "/connect", "ss", connection_cb, this); @@ -177,6 +181,39 @@ OSCClientReceiver::_put_cb(const char* path, const char* types, lo_arg** argv, i } int +OSCClientReceiver::_delta_begin_cb(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg) +{ + const char* obj_path = &argv[1]->s; + assert(_delta_remove.empty()); + assert(_delta_add.empty()); + _delta_uri = obj_path; + return 0; +} + +int +OSCClientReceiver::_delta_remove_cb(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg) +{ + _delta_remove.insert(make_pair(&argv[1]->s, + AtomLiblo::lo_arg_to_atom(types[2], argv[2]))); + return 0; +} + +int +OSCClientReceiver::_delta_add_cb(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg) +{ + _delta_add.insert(make_pair(&argv[1]->s, + AtomLiblo::lo_arg_to_atom(types[2], argv[2]))); + return 0; +} + +int +OSCClientReceiver::_delta_end_cb(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg) +{ + _target->delta(_delta_uri, _delta_remove, _delta_add); + return 0; +} + +int OSCClientReceiver::_move_cb(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg) { const char* old_path = &argv[1]->s; |