diff --git a/src/PiPedalSocket.cpp b/src/PiPedalSocket.cpp index 4debb8d..6f55435 100644 --- a/src/PiPedalSocket.cpp +++ b/src/PiPedalSocket.cpp @@ -682,6 +682,15 @@ JSON_MAP_REFERENCE(Vst3ControlChangedBody, value) JSON_MAP_REFERENCE(Vst3ControlChangedBody, state) JSON_MAP_END() +class PiPedalSocketHandler; +namespace { + using PfnMessageHandler = void (PiPedalSocketHandler::*)(int replyTo, json_reader *pReader); + + inline static unordered_map socket_messageHandlers; + + +} + class PiPedalSocketHandler : public SocketHandler, public IPiPedalModelSubscriber, public std::enable_shared_from_this { private: @@ -1161,6 +1170,26 @@ public: /***********************/ + class MessageRegistration { + public: + MessageRegistration(const std::string&messageName,PfnMessageHandler pfnMessageHandler ) { + socket_messageHandlers[messageName] = pfnMessageHandler; + } + }; + + #define REGISTER_MESSAGE_HANDLER(MESSAGE_NAME) \ + static inline MessageRegistration r_##MESSAGE_NAME{#MESSAGE_NAME,&PiPedalSocketHandler::handle_##MESSAGE_NAME}; + + void handle_setControl(int replyTo, json_reader*pReader) { + ControlChangedBody message; + pReader->read(&message); + this->model.SetControl(message.clientId_, message.instanceId_, message.symbol_, message.value_); + + } + static inline MessageRegistration r_xxx{ "setControl", &PiPedalSocketHandler::handle_setControl}; + REGISTER_MESSAGE_HANDLER(setControl) + + void handleMessage(int reply, int replyTo, const std::string &message, json_reader *pReader) { if (reply != -1) @@ -1201,13 +1230,14 @@ public: { this->SendError(replyTo, "Server has shut down."); } - if (message == "setControl") + + auto ffHandler = socket_messageHandlers.find(message); + if (ffHandler != socket_messageHandlers.end()) { - ControlChangedBody message; - pReader->read(&message); - this->model.SetControl(message.clientId_, message.instanceId_, message.symbol_, message.value_); + (this->*(ffHandler->second))(replyTo,pReader); + return; } - else if (message == "previewControl") + if (message == "previewControl") { ControlChangedBody message; pReader->read(&message); diff --git a/vite/src/pipedal/ChannelRouterSettings.tsx b/vite/src/pipedal/ChannelRouterSettings.tsx index 26bc7d9..6b5d119 100644 --- a/vite/src/pipedal/ChannelRouterSettings.tsx +++ b/vite/src/pipedal/ChannelRouterSettings.tsx @@ -1,6 +1,5 @@ import { Pedalboard, ControlValue } from "./Pedalboard.tsx"; -import JackServerSettings from "./JackServerSettings.tsx"; import JackConfiguration from "./Jack.tsx"; diff --git a/vite/src/pipedal/ChannelRouterSettingsDialog.tsx b/vite/src/pipedal/ChannelRouterSettingsDialog.tsx index b1b51d1..93361ad 100644 --- a/vite/src/pipedal/ChannelRouterSettingsDialog.tsx +++ b/vite/src/pipedal/ChannelRouterSettingsDialog.tsx @@ -64,8 +64,6 @@ interface ChannelRouterSettingsPreset { settings: ChannelRouterSettings; } -let LEFT_LEFT_PRESET_ID = -2; -let RIGHT_STEREO_PRESET_ID = -3; let channelRouterPresets: ChannelRouterSettingsPreset[] = [ {