From a74b55b40612a63b0be4964e626497fa24c55305 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 29 Apr 2007 06:26:57 +0000 Subject: Fixed incomplete transfer of loaded plugins to client, bundle transfer. git-svn-id: http://svn.drobilla.net/lad/ingen@482 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/OSCClientSender.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'src/libs/engine/OSCClientSender.cpp') diff --git a/src/libs/engine/OSCClientSender.cpp b/src/libs/engine/OSCClientSender.cpp index e8eb9d05..7126c67b 100644 --- a/src/libs/engine/OSCClientSender.cpp +++ b/src/libs/engine/OSCClientSender.cpp @@ -38,30 +38,32 @@ namespace Ingen { void OSCClientSender::bundle_begin() { - // FIXME + // FIXME: Don't split bundles as for 'transfers' + _transfer = lo_bundle_new(LO_TT_IMMEDIATE); } void OSCClientSender::bundle_end() { - // FIXME + // FIXME: Don't split bundles as for 'transfers' + transfer_end(); } void OSCClientSender::transfer_begin() { - //_transfer = lo_bundle_new(LO_TT_IMMEDIATE); + _transfer = lo_bundle_new(LO_TT_IMMEDIATE); } void OSCClientSender::transfer_end() { - /*assert(_transfer); + assert(_transfer); lo_send_bundle(_address, _transfer); lo_bundle_free(_transfer); - _transfer = NULL;*/ + _transfer = NULL; } @@ -504,15 +506,27 @@ OSCClientSender::new_plugin(string uri, string type_uri, string name) if (!_enabled) return; + // FIXME: size? liblo doesn't export this. + // don't want to exceed max UDP packet size + static const size_t MAX_BUNDLE_SIZE = 32768; // FIXME: best value? + 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, 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); - //if (_transfer) - // lo_bundle_add_message(_transfer, "/ingen/plugin", m); - //else + } else { lo_send_message(_address, "/ingen/plugin", m); + } } -- cgit v1.2.1