Upload Source/Helper/HelperIPC.cpp
Browse files- Source/Helper/HelperIPC.cpp +54 -9
Source/Helper/HelperIPC.cpp
CHANGED
|
@@ -29,7 +29,6 @@ bool HelperIPC::connect()
|
|
| 29 |
socketFd = socket(AF_UNIX, SOCK_STREAM, 0);
|
| 30 |
if (socketFd < 0) return false;
|
| 31 |
|
| 32 |
-
// Set SO_NOSIGPIPE (macOS)
|
| 33 |
int nosigpipe = 1;
|
| 34 |
setsockopt(socketFd, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe));
|
| 35 |
|
|
@@ -74,6 +73,21 @@ void HelperIPC::sendReady()
|
|
| 74 |
sendMessage(juce::String(msg.dump()));
|
| 75 |
}
|
| 76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
void HelperIPC::sendParamChanged(int index, float value)
|
| 78 |
{
|
| 79 |
json msg = {{"notify", "param_changed"}, {"index", index}, {"value", value}};
|
|
@@ -83,7 +97,6 @@ void HelperIPC::sendParamChanged(int index, float value)
|
|
| 83 |
void HelperIPC::sendMessage(const juce::String& jsonStr)
|
| 84 |
{
|
| 85 |
if (socketFd < 0) return;
|
| 86 |
-
|
| 87 |
auto data = jsonStr + "\n";
|
| 88 |
auto bytes = data.toRawUTF8();
|
| 89 |
auto len = (size_t)data.getNumBytesAsUTF8();
|
|
@@ -155,6 +168,18 @@ void HelperIPC::handleMessage(const juce::String& message)
|
|
| 155 |
host.unloadPlugin();
|
| 156 |
sendMessage("{\"ok\":true}");
|
| 157 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 158 |
else if (cmd == "search_param")
|
| 159 |
{
|
| 160 |
auto keyword = j.value("keyword", "");
|
|
@@ -165,6 +190,7 @@ void HelperIPC::handleMessage(const juce::String& message)
|
|
| 165 |
{
|
| 166 |
arr.push_back({
|
| 167 |
{"i", p.index},
|
|
|
|
| 168 |
{"n", p.name.toStdString()},
|
| 169 |
{"v", std::round(p.value * 1000.0f) / 1000.0f},
|
| 170 |
{"t", p.displayText.toStdString()}
|
|
@@ -198,15 +224,34 @@ void HelperIPC::handleMessage(const juce::String& message)
|
|
| 198 |
bool ok = host.setParams(values);
|
| 199 |
sendMessage(ok ? "{\"ok\":true}" : "{\"ok\":false}");
|
| 200 |
}
|
| 201 |
-
else if (cmd == "
|
| 202 |
{
|
| 203 |
-
|
| 204 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 205 |
}
|
| 206 |
-
else if (cmd == "
|
| 207 |
{
|
| 208 |
-
|
| 209 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 210 |
}
|
| 211 |
else if (cmd == "get_state")
|
| 212 |
{
|
|
@@ -235,7 +280,7 @@ void HelperIPC::handleMessage(const juce::String& message)
|
|
| 235 |
}
|
| 236 |
catch (const std::exception& e)
|
| 237 |
{
|
| 238 |
-
DBG("HelperIPC: Error
|
| 239 |
sendMessage("{\"ok\":false,\"error\":\"parse error\"}");
|
| 240 |
}
|
| 241 |
}
|
|
|
|
| 29 |
socketFd = socket(AF_UNIX, SOCK_STREAM, 0);
|
| 30 |
if (socketFd < 0) return false;
|
| 31 |
|
|
|
|
| 32 |
int nosigpipe = 1;
|
| 33 |
setsockopt(socketFd, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe));
|
| 34 |
|
|
|
|
| 73 |
sendMessage(juce::String(msg.dump()));
|
| 74 |
}
|
| 75 |
|
| 76 |
+
void HelperIPC::sendGuiReady(const juce::String& portName, int width, int height)
|
| 77 |
+
{
|
| 78 |
+
json msg = {{"notify", "gui_ready"},
|
| 79 |
+
{"layerPortName", portName.toStdString()},
|
| 80 |
+
{"width", width},
|
| 81 |
+
{"height", height}};
|
| 82 |
+
sendMessage(juce::String(msg.dump()));
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
void HelperIPC::sendGuiResized(int width, int height)
|
| 86 |
+
{
|
| 87 |
+
json msg = {{"notify", "resized"}, {"width", width}, {"height", height}};
|
| 88 |
+
sendMessage(juce::String(msg.dump()));
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
void HelperIPC::sendParamChanged(int index, float value)
|
| 92 |
{
|
| 93 |
json msg = {{"notify", "param_changed"}, {"index", index}, {"value", value}};
|
|
|
|
| 97 |
void HelperIPC::sendMessage(const juce::String& jsonStr)
|
| 98 |
{
|
| 99 |
if (socketFd < 0) return;
|
|
|
|
| 100 |
auto data = jsonStr + "\n";
|
| 101 |
auto bytes = data.toRawUTF8();
|
| 102 |
auto len = (size_t)data.getNumBytesAsUTF8();
|
|
|
|
| 168 |
host.unloadPlugin();
|
| 169 |
sendMessage("{\"ok\":true}");
|
| 170 |
}
|
| 171 |
+
else if (cmd == "show_gui")
|
| 172 |
+
{
|
| 173 |
+
host.showGui();
|
| 174 |
+
// GUI ready notification is sent asynchronously after GUI is created
|
| 175 |
+
// (see HelperPluginHost::showGui which calls ipc->sendGuiReady)
|
| 176 |
+
sendMessage("{\"ok\":true}");
|
| 177 |
+
}
|
| 178 |
+
else if (cmd == "hide_gui")
|
| 179 |
+
{
|
| 180 |
+
host.hideGui();
|
| 181 |
+
sendMessage("{\"ok\":true}");
|
| 182 |
+
}
|
| 183 |
else if (cmd == "search_param")
|
| 184 |
{
|
| 185 |
auto keyword = j.value("keyword", "");
|
|
|
|
| 190 |
{
|
| 191 |
arr.push_back({
|
| 192 |
{"i", p.index},
|
| 193 |
+
{"id", p.id.toStdString()},
|
| 194 |
{"n", p.name.toStdString()},
|
| 195 |
{"v", std::round(p.value * 1000.0f) / 1000.0f},
|
| 196 |
{"t", p.displayText.toStdString()}
|
|
|
|
| 224 |
bool ok = host.setParams(values);
|
| 225 |
sendMessage(ok ? "{\"ok\":true}" : "{\"ok\":false}");
|
| 226 |
}
|
| 227 |
+
else if (cmd == "mouse")
|
| 228 |
{
|
| 229 |
+
auto type = j.value("type", "");
|
| 230 |
+
float x = j.value("x", 0.0f);
|
| 231 |
+
float y = j.value("y", 0.0f);
|
| 232 |
+
int button = j.value("button", 0);
|
| 233 |
+
|
| 234 |
+
if (type == "down") host.injectMouseDown(x, y, button);
|
| 235 |
+
else if (type == "up") host.injectMouseUp(x, y, button);
|
| 236 |
+
else if (type == "move") host.injectMouseMove(x, y);
|
| 237 |
+
else if (type == "drag") host.injectMouseDrag(x, y, button);
|
| 238 |
+
else if (type == "scroll")
|
| 239 |
+
{
|
| 240 |
+
float dx = j.value("dx", 0.0f);
|
| 241 |
+
float dy = j.value("dy", 0.0f);
|
| 242 |
+
host.injectMouseScroll(x, y, dx, dy);
|
| 243 |
+
}
|
| 244 |
+
// No response for mouse events (fire-and-forget for low latency)
|
| 245 |
}
|
| 246 |
+
else if (cmd == "key")
|
| 247 |
{
|
| 248 |
+
auto type = j.value("type", "");
|
| 249 |
+
int keyCode = j.value("keyCode", 0);
|
| 250 |
+
auto chars = j.value("chars", "");
|
| 251 |
+
int modifiers = j.value("modifiers", 0);
|
| 252 |
+
|
| 253 |
+
if (type == "down") host.injectKeyDown(keyCode, juce::String(chars), modifiers);
|
| 254 |
+
else if (type == "up") host.injectKeyUp(keyCode, juce::String(chars), modifiers);
|
| 255 |
}
|
| 256 |
else if (cmd == "get_state")
|
| 257 |
{
|
|
|
|
| 280 |
}
|
| 281 |
catch (const std::exception& e)
|
| 282 |
{
|
| 283 |
+
DBG("HelperIPC: Error: " + juce::String(e.what()));
|
| 284 |
sendMessage("{\"ok\":false,\"error\":\"parse error\"}");
|
| 285 |
}
|
| 286 |
}
|