RAM2118 commited on
Commit
8aeb4e8
·
verified ·
1 Parent(s): 6c4aa19

Upload Source/Helper/HelperIPC.cpp

Browse files
Files changed (1) hide show
  1. 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 == "show_gui")
202
  {
203
- host.showGui();
204
- sendMessage("{\"ok\":true}");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  }
206
- else if (cmd == "hide_gui")
207
  {
208
- host.hideGui();
209
- sendMessage("{\"ok\":true}");
 
 
 
 
 
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 handling message: " + juce::String(e.what()));
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
  }