diff --git a/src/ElectronNET.API/API/IpcMain.cs b/src/ElectronNET.API/API/IpcMain.cs index 62961cd..1bbed56 100644 --- a/src/ElectronNET.API/API/IpcMain.cs +++ b/src/ElectronNET.API/API/IpcMain.cs @@ -102,6 +102,29 @@ namespace ElectronNET.API }); } + /// + /// Send a message to the renderer process synchronously via channel, + /// you can also send arbitrary arguments. + /// + /// Note: Sending a synchronous message will block the whole renderer process, + /// unless you know what you are doing you should never use it. + /// + /// + /// + public void OnSync(string channel, Func> listener) + { + BridgeConnector.Socket.Emit("registerSyncIpcMainChannel", channel); + BridgeConnector.Socket.On(channel, (args) => + { + Task.Run(async () => + { + var arg = FormatArguments(args); + var result = await listener(arg); + BridgeConnector.Socket.Emit(channel + "Sync", result); + }); + }); + } + /// /// Adds a one time listener method for the event. This listener is invoked only /// the next time a message is sent to channel, after which it is removed. @@ -172,6 +195,26 @@ namespace ElectronNET.API }); } + /// + /// Adds a handler for an invokeable IPC. This handler will be called + /// whenever a renderer calls ipcRenderer.invoke(channel, ...args). + /// + /// Channelname. + /// Callback Method. + public void Handle(string channel, Func> listener) + { + BridgeConnector.Socket.Emit("registerHandleIpcMainChannel", channel); + BridgeConnector.Socket.On(channel, (args) => + { + Task.Run(async () => + { + var arg = FormatArguments(args); + var result = await listener(arg); + BridgeConnector.Socket.Emit(channel + "Handle", result); + }); + }); + } + /// /// Handles a single invokeable IPC message, then removes the listener. /// See ipcMain.handle(channel, listener). @@ -189,6 +232,26 @@ namespace ElectronNET.API }); } + /// + /// Handles a single invokeable IPC message, then removes the listener. + /// See ipcMain.handle(channel, listener). + /// + /// Channelname. + /// Callback Method. + public void HandleOnce(string channel, Func> listener) + { + BridgeConnector.Socket.Emit("registerHandleOnceIpcMainChannel", channel); + BridgeConnector.Socket.Once(channel, (args) => + { + Task.Run(async () => + { + var arg = FormatArguments(args); + var result = await listener(arg); + BridgeConnector.Socket.Emit(channel + "HandleOnce", result); + }); + }); + } + /// /// Removes any handler for channel, if present. ///