From 174bd3e0314785a1a885877a9efe7a7eef31e0fa Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 19 Aug 2008 20:09:49 +0000 Subject: Slightly more reliable OSC comms. Still not really up to the task of receiving massive patches... git-svn-id: http://svn.drobilla.net/lad/ingen@1448 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/OSCClientSender.cpp | 18 +----------------- src/libs/engine/ObjectSender.cpp | 6 ++---- src/libs/gui/App.cpp | 13 +++++++++++-- src/libs/gui/App.hpp | 2 ++ src/libs/gui/ConnectWindow.cpp | 13 ++++--------- src/libs/shared/OSCSender.cpp | 17 ++++++++++++----- 6 files changed, 32 insertions(+), 37 deletions(-) diff --git a/src/libs/engine/OSCClientSender.cpp b/src/libs/engine/OSCClientSender.cpp index 0f05e1ed..dca2e0ed 100644 --- a/src/libs/engine/OSCClientSender.cpp +++ b/src/libs/engine/OSCClientSender.cpp @@ -304,28 +304,12 @@ OSCClientSender::new_plugin(const std::string& uri, const std::string& symbol, const std::string& name) { - // FIXME: size? liblo doesn't export this. - // Don't want to exceed max UDP packet size (1500 bytes) - static const size_t MAX_BUNDLE_SIZE = 1500 - 32*5; - lo_message m = lo_message_new(); lo_message_add_string(m, uri.c_str()); lo_message_add_string(m, type_uri.c_str()); lo_message_add_string(m, symbol.c_str()); lo_message_add_string(m, name.c_str()); - - if (_transfer) { - - if (lo_bundle_length(_transfer) + lo_message_length(m, "/ingen/plugin") - > MAX_BUNDLE_SIZE) { - lo_send_bundle(_address, _transfer); - _transfer = lo_bundle_new(LO_TT_IMMEDIATE); - } - lo_bundle_add_message(_transfer, "/ingen/plugin", m); - - } else { - lo_send_message(_address, "/ingen/plugin", m); - } + send_message("/ingen/plugin", m); } diff --git a/src/libs/engine/ObjectSender.cpp b/src/libs/engine/ObjectSender.cpp index bcab46a8..688cea8e 100644 --- a/src/libs/engine/ObjectSender.cpp +++ b/src/libs/engine/ObjectSender.cpp @@ -52,24 +52,22 @@ ObjectSender::send_patch(ClientInterface* client, const PatchImpl* patch, bool r // Send nodes for (List::const_iterator j = patch->nodes().begin(); j != patch->nodes().end(); ++j) { - const NodeImpl* const node = (*j); send_node(client, node, true); } // Send ports for (uint32_t i=0; i < patch->num_ports(); ++i) { - PortImpl* const port = patch->port_impl(i); send_port(client, port); - } // Send connections + client->transfer_begin(); for (PatchImpl::Connections::const_iterator j = patch->connections().begin(); j != patch->connections().end(); ++j) client->connect((*j)->src_port_path(), (*j)->dst_port_path()); - + client->transfer_end(); } } diff --git a/src/libs/gui/App.cpp b/src/libs/gui/App.cpp index 64a89f8a..54547114 100644 --- a/src/libs/gui/App.cpp +++ b/src/libs/gui/App.cpp @@ -333,6 +333,17 @@ App::event_save_session_as() #endif +void +App::register_callbacks() +{ + Glib::signal_timeout().connect( + sigc::mem_fun(App::instance(), &App::gtk_main_iteration), 25, G_PRIORITY_DEFAULT); + + Glib::signal_timeout().connect( + sigc::mem_fun(App::instance(), &App::animate), 50, G_PRIORITY_DEFAULT); +} + + bool App::gtk_main_iteration() { @@ -347,8 +358,6 @@ App::gtk_main_iteration() _enable_signal = true; } - animate(); - return true; } diff --git a/src/libs/gui/App.hpp b/src/libs/gui/App.hpp index 8d16a1c4..a693b729 100644 --- a/src/libs/gui/App.hpp +++ b/src/libs/gui/App.hpp @@ -91,7 +91,9 @@ public: void detach(); + void register_callbacks(); bool gtk_main_iteration(); + void show_about(); void quit(); diff --git a/src/libs/gui/ConnectWindow.cpp b/src/libs/gui/ConnectWindow.cpp index eb095af5..3037ee88 100644 --- a/src/libs/gui/ConnectWindow.cpp +++ b/src/libs/gui/ConnectWindow.cpp @@ -171,9 +171,7 @@ ConnectWindow::connect(bool existing) client = SharedPtr(new HTTPClientReceiver(world, uri, tsci)); App::instance().attach(tsci, client); - - Glib::signal_timeout().connect( - sigc::mem_fun(App::instance(), &App::gtk_main_iteration), 40, G_PRIORITY_DEFAULT); + App::instance().register_callbacks(); Glib::signal_timeout().connect( sigc::mem_fun(this, &ConnectWindow::gtk_callback), 40); @@ -192,10 +190,9 @@ ConnectWindow::connect(bool existing) // FIXME: static args SharedPtr tsci(new ThreadedSigClientInterface(1024)); SharedPtr client(new OSCClientReceiver(16181, tsci)); + App::instance().attach(tsci, client); - - Glib::signal_timeout().connect( - sigc::mem_fun(App::instance(), &App::gtk_main_iteration), 40, G_PRIORITY_DEFAULT); + App::instance().register_callbacks(); Glib::signal_timeout().connect( sigc::mem_fun(this, &ConnectWindow::gtk_callback), 40); @@ -220,9 +217,7 @@ ConnectWindow::connect(bool existing) world->local_engine->activate(1); // FIXME: parallelism App::instance().attach(client); - - Glib::signal_timeout().connect( - sigc::mem_fun(App::instance(), &App::gtk_main_iteration), 40, G_PRIORITY_DEFAULT); + App::instance().register_callbacks(); Glib::signal_timeout().connect( sigc::mem_fun(this, &ConnectWindow::gtk_callback), 10); diff --git a/src/libs/shared/OSCSender.cpp b/src/libs/shared/OSCSender.cpp index 3936cf96..f0cd76f2 100644 --- a/src/libs/shared/OSCSender.cpp +++ b/src/libs/shared/OSCSender.cpp @@ -18,6 +18,7 @@ #include "OSCSender.hpp" #include #include +#include using namespace std; @@ -37,7 +38,9 @@ void OSCSender::bundle_begin() { assert(!_transfer); - _transfer = lo_bundle_new(LO_TT_IMMEDIATE); + lo_timetag t; + lo_timetag_now(&t); + _transfer = lo_bundle_new(t); _send_state = SendingBundle; } @@ -53,7 +56,9 @@ void OSCSender::transfer_begin() { assert(!_transfer); - _transfer = lo_bundle_new(LO_TT_IMMEDIATE); + lo_timetag t; + lo_timetag_now(&t); + _transfer = lo_bundle_new(t); _send_state = SendingTransfer; } @@ -99,13 +104,15 @@ OSCSender::send_message(const char* path, lo_message msg) if (!_enabled) return; - + if (_transfer) { + lo_timetag t; if (lo_bundle_length(_transfer) + lo_message_length(msg, path) > MAX_BUNDLE_SIZE) { - if (_send_state == SendingBundle) + //if (_send_state == SendingBundle) cerr << "WARNING: Maximum bundle size reached, bundle split" << endl; lo_send_bundle(_address, _transfer); - _transfer = lo_bundle_new(LO_TT_IMMEDIATE); + lo_timetag_now(&t); + _transfer = lo_bundle_new(t); } lo_bundle_add_message(_transfer, path, msg); -- cgit v1.2.1