diff --git a/demo/addons/gdpd/patches/gdpd.pd b/demo/addons/gdpd/patches/gdpd.pd index 99faa5f136e354096f96cd4225af423d24ee1f50..2b9668c6a405e06b231dec17a46e42c974f501ea 100644 Binary files a/demo/addons/gdpd/patches/gdpd.pd and b/demo/addons/gdpd/patches/gdpd.pd differ diff --git a/demo/addons/gdpd/patches/gdpd_send.pd b/demo/addons/gdpd/patches/gdpd_send.pd index 4bb09c4e684c9164cebcf772004c572872c4d9a4..2bbc9dfeea6e0a655d77fa5e82af9d210385659b 100644 Binary files a/demo/addons/gdpd/patches/gdpd_send.pd and b/demo/addons/gdpd/patches/gdpd_send.pd differ diff --git a/patches/gdpd.pd b/patches/gdpd.pd index 99faa5f136e354096f96cd4225af423d24ee1f50..2b9668c6a405e06b231dec17a46e42c974f501ea 100644 Binary files a/patches/gdpd.pd and b/patches/gdpd.pd differ diff --git a/patches/gdpd_send.pd b/patches/gdpd_send.pd index 4bb09c4e684c9164cebcf772004c572872c4d9a4..2bbc9dfeea6e0a655d77fa5e82af9d210385659b 100644 Binary files a/patches/gdpd_send.pd and b/patches/gdpd_send.pd differ diff --git a/src/gdpd.cpp b/src/gdpd.cpp index 9b4e75ed5872fb80e73af9e246f14f8239d1a8d9..5baa83cb9d28098433beb99ccdf3dfee09f034d4 100644 --- a/src/gdpd.cpp +++ b/src/gdpd.cpp @@ -366,7 +366,10 @@ void GdPd::send(String address, Array arguments) { libpd_start_message(arguments.size()+2); libpd_add_symbol("gdpd"); libpd_add_symbol(m_applicationNameStr.c_str()); - libpd_add_symbol(String(address).utf8().get_data()); + Array addrArray = address.split("/"); + for(int i=0; i<addrArray.size(); ++i) { + libpd_add_symbol(String(addrArray[i]).utf8().get_data()); + } for(int i=0; i<arguments.size(); ++i) { switch(arguments[i].get_type()) { case Variant::INT : @@ -401,21 +404,49 @@ void GdPd::_process(double delta) { void GdPd::handleOSC(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg) { - Array gdList; - for(int i = 0; i < argc; ++i) { - switch(types[i]) { - case 'f' : - gdList.push_back(argv[i]->f); - break; - case 'i' : - gdList.push_back(argv[i]->i); - break; - case 's' : - gdList.push_back(String(&(argv[i]->s))); - break; - } - } - emit_signal("got_message", String(path), gdList); + if(std::string(path).find("/gdpd/"+m_applicationNameStr)==0) { + Array gdList; + for(int i = 0; i < argc; ++i) { + switch(types[i]) { + case 'f' : + gdList.push_back(argv[i]->f); + break; + case 'i' : + gdList.push_back(argv[i]->i); + break; + case 's' : + gdList.push_back(String(&(argv[i]->s))); + break; + } + } + emit_signal("got_message", String(path), gdList); + } +} + +void GdPd::receiveList(const std::string& dest, const pd::List& list) { + if(dest == "to_godot") { + //retrieve address + int nb_addr = list.getFloat(2); + int start_addr = 3; + std::string addr = "/"+std::string(list.getSymbol(0).c_str()) + +"/"+std::string(list.getSymbol(1).c_str()); + for(int i = start_addr; i < start_addr + nb_addr; ++i) { + addr += "/"+std::string(list.getSymbol(i).c_str()); + } + + //retrieve agruments + Array gdList; + for(int i = start_addr+nb_addr; i < list.len(); ++i) { + if(list.isFloat(i)) { + gdList.push_back(list.getFloat(i)); + } + else if(list.isSymbol(i)) { + String symbStr(list.getSymbol(i).c_str()); + gdList.push_back(symbStr); + } + } + emit_signal("got_message", String(addr.c_str()), gdList); + } } void GdPd::processAudio(void *outputBuffer, void *inputBuffer, @@ -487,8 +518,8 @@ bool GdPd::open_patch() { // Open the patch m_patchOpened=false; - pd::Patch p1 = m_pd.openPatch(m_pdPatchStr.c_str(), m_pdDirStr.c_str()); - /* + //FIXME fix issue in libpd with itoa in dollarzero + pd::Patch p1 = m_pd.openPatch(m_pdPatchStr, m_pdDirStr); if(!p1.isValid()) { print("Could not open patch "+m_pdPatchStr); return false; @@ -498,7 +529,7 @@ bool GdPd::open_patch() { m_patchOpened=true; std::string patchStr(pd_patch.utf8().get_data()); m_patchsMap[patchStr] = p1; - }*/ + } return true; } @@ -538,19 +569,6 @@ void GdPd::print(const std::string& message) { UtilityFunctions::print((std::string("GdPd : ")+message).c_str()); } -void GdPd::receiveList(const std::string& dest, const pd::List& list) { - Array gdList; - for(int i = 0; i < list.len(); ++i) { - if(list.isFloat(i)) { - gdList.push_back(list.getFloat(i)); - } - else if(list.isSymbol(i)) { - String symbStr(list.getSymbol(i).c_str()); - gdList.push_back(symbStr); - } - } - emit_signal("got_message", String(dest.c_str()), gdList); -} /* GdPdStream */ GdPdStream::GdPdStream() {