From 11d07c4337bab2cfbf7165470a8577b5004292df Mon Sep 17 00:00:00 2001 From: weefuzzy Date: Tue, 3 May 2022 16:51:07 +0100 Subject: [PATCH] Wrapper: Work around 32 char limit for plugin commands If too long, remove vowels. Sorry. Better ideas welcome --- include/wrapper/Messaging.hpp | 25 +++++++++++++++++-- .../Classes/FluidServerObject.sc | 7 +++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/include/wrapper/Messaging.hpp b/include/wrapper/Messaging.hpp index 08c04f6..7e8f173 100644 --- a/include/wrapper/Messaging.hpp +++ b/include/wrapper/Messaging.hpp @@ -35,6 +35,22 @@ struct FluidSCMessaging{ }; +private: + static bool is_vowel(const char p_char) + { + constexpr char vowels[] = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' }; + return std::find(std::begin(vowels), std::end(vowels), p_char) != std::end(vowels); + } + + static std::string remove_vowel(std::string st) + { + auto to_erase = std::remove_if(st.begin(), st.end(), is_vowel); + st.erase(to_erase, st.end()); + return st; + } + + +public: template struct SetupMessageCmd { @@ -42,8 +58,13 @@ struct FluidSCMessaging{ void operator()(const T& message) { static std::string messageName = std::string{getName()} + '/' + message.name; - auto ft = getInterfaceTable(); - ft->fDefinePlugInCmd(messageName.c_str(), doMessage,(void*)messageName.c_str()); + + if(messageName.size() >= 32u) + messageName = remove_vowel(messageName); + + auto ft = getInterfaceTable(); + if(!ft->fDefinePlugInCmd(messageName.c_str(), doMessage,(void*)messageName.c_str())) + std::cout << "ERROR: failed to register command \"" << messageName << "\"\n"; } }; diff --git a/release-packaging/Classes/FluidServerObject.sc b/release-packaging/Classes/FluidServerObject.sc index 66625fc..0bf1479 100644 --- a/release-packaging/Classes/FluidServerObject.sc +++ b/release-packaging/Classes/FluidServerObject.sc @@ -56,7 +56,12 @@ FluidServerObject } prMakeMsg{|msg,id...args| - ^['/cmd',"%/%".format(this.class.objectClassName,msg),id].addAll(args); + + var commandName = "%/%".format(this.class.objectClassName,msg); + + if(commandName.size >= 32) { commandName = commandName.select{|c|c.isVowel.not}}; + + ^['/cmd',commandName,id].addAll(args); } freeMsg {