Skip to content

Commit cf1cb18

Browse files
committed
Merge branch 'develop' of https://github.com/ElectronNET/Electron.NET into feature/secure-connection
2 parents 931aec8 + 8009348 commit cf1cb18

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+988
-749
lines changed

src/ElectronNET.API/API/IpcMain.cs

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,29 @@ public void OnSync(string channel, Func<object, object> listener)
102102
});
103103
}
104104

105+
/// <summary>
106+
/// Send a message to the renderer process synchronously via channel,
107+
/// you can also send arbitrary arguments.
108+
///
109+
/// Note: Sending a synchronous message will block the whole renderer process,
110+
/// unless you know what you are doing you should never use it.
111+
/// </summary>
112+
/// <param name="channel"></param>
113+
/// <param name="listener"></param>
114+
public void OnSync(string channel, Func<object, Task<object>> listener)
115+
{
116+
BridgeConnector.Socket.Emit("registerSyncIpcMainChannel", channel);
117+
BridgeConnector.Socket.On<JsonElement>(channel, (args) =>
118+
{
119+
Task.Run(async () =>
120+
{
121+
var arg = FormatArguments(args);
122+
var result = await listener(arg);
123+
BridgeConnector.Socket.Emit(channel + "Sync", result);
124+
});
125+
});
126+
}
127+
105128
/// <summary>
106129
/// Adds a one time listener method for the event. This listener is invoked only
107130
/// the next time a message is sent to channel, after which it is removed.
@@ -154,5 +177,88 @@ public void Send(BrowserView browserView, string channel, params object[] data)
154177
{
155178
BridgeConnector.Socket.Emit("sendToIpcRendererBrowserView", browserView.Id, channel, data);
156179
}
180+
181+
/// <summary>
182+
/// Adds a handler for an invokeable IPC. This handler will be called
183+
/// whenever a renderer calls ipcRenderer.invoke(channel, ...args).
184+
/// </summary>
185+
/// <param name="channel">Channelname.</param>
186+
/// <param name="listener">Callback Method.</param>
187+
public void Handle(string channel, Func<object, object> listener)
188+
{
189+
BridgeConnector.Socket.Emit("registerHandleIpcMainChannel", channel);
190+
BridgeConnector.Socket.On<JsonElement>(channel, (args) =>
191+
{
192+
var arg = FormatArguments(args);
193+
var result = listener(arg);
194+
BridgeConnector.Socket.Emit(channel + "Handle", result);
195+
});
196+
}
197+
198+
/// <summary>
199+
/// Adds a handler for an invokeable IPC. This handler will be called
200+
/// whenever a renderer calls ipcRenderer.invoke(channel, ...args).
201+
/// </summary>
202+
/// <param name="channel">Channelname.</param>
203+
/// <param name="listener">Callback Method.</param>
204+
public void Handle(string channel, Func<object, Task<object>> listener)
205+
{
206+
BridgeConnector.Socket.Emit("registerHandleIpcMainChannel", channel);
207+
BridgeConnector.Socket.On<JsonElement>(channel, (args) =>
208+
{
209+
Task.Run(async () =>
210+
{
211+
var arg = FormatArguments(args);
212+
var result = await listener(arg);
213+
BridgeConnector.Socket.Emit(channel + "Handle", result);
214+
});
215+
});
216+
}
217+
218+
/// <summary>
219+
/// Handles a single invokeable IPC message, then removes the listener.
220+
/// See ipcMain.handle(channel, listener).
221+
/// </summary>
222+
/// <param name="channel">Channelname.</param>
223+
/// <param name="listener">Callback Method.</param>
224+
public void HandleOnce(string channel, Func<object, object> listener)
225+
{
226+
BridgeConnector.Socket.Emit("registerHandleOnceIpcMainChannel", channel);
227+
BridgeConnector.Socket.Once<JsonElement>(channel, (args) =>
228+
{
229+
var arg = FormatArguments(args);
230+
var result = listener(arg);
231+
BridgeConnector.Socket.Emit(channel + "HandleOnce", result);
232+
});
233+
}
234+
235+
/// <summary>
236+
/// Handles a single invokeable IPC message, then removes the listener.
237+
/// See ipcMain.handle(channel, listener).
238+
/// </summary>
239+
/// <param name="channel">Channelname.</param>
240+
/// <param name="listener">Callback Method.</param>
241+
public void HandleOnce(string channel, Func<object, Task<object>> listener)
242+
{
243+
BridgeConnector.Socket.Emit("registerHandleOnceIpcMainChannel", channel);
244+
BridgeConnector.Socket.Once<JsonElement>(channel, (args) =>
245+
{
246+
Task.Run(async () =>
247+
{
248+
var arg = FormatArguments(args);
249+
var result = await listener(arg);
250+
BridgeConnector.Socket.Emit(channel + "HandleOnce", result);
251+
});
252+
});
253+
}
254+
255+
/// <summary>
256+
/// Removes any handler for channel, if present.
257+
/// </summary>
258+
/// <param name="channel">Channelname.</param>
259+
public void RemoveHandler(string channel)
260+
{
261+
BridgeConnector.Socket.Emit("removeHandlerIpcMainChannel", channel);
262+
}
157263
}
158264
}

0 commit comments

Comments
 (0)