@@ -154,5 +154,48 @@ public void Send(BrowserView browserView, string channel, params object[] data)
154154 {
155155 BridgeConnector . Socket . Emit ( "sendToIpcRendererBrowserView" , browserView . Id , channel , data ) ;
156156 }
157+
158+ /// <summary>
159+ /// Adds a handler for an invokeable IPC. This handler will be called
160+ /// whenever a renderer calls ipcRenderer.invoke(channel, ...args).
161+ /// </summary>
162+ /// <param name="channel">Channelname.</param>
163+ /// <param name="listener">Callback Method.</param>
164+ public void Handle ( string channel , Func < object , object > listener )
165+ {
166+ BridgeConnector . Socket . Emit ( "registerHandleIpcMainChannel" , channel ) ;
167+ BridgeConnector . Socket . On < JsonElement > ( channel , ( args ) =>
168+ {
169+ var arg = FormatArguments ( args ) ;
170+ var result = listener ( arg ) ;
171+ BridgeConnector . Socket . Emit ( channel + "Handle" , result ) ;
172+ } ) ;
173+ }
174+
175+ /// <summary>
176+ /// Handles a single invokeable IPC message, then removes the listener.
177+ /// See ipcMain.handle(channel, listener).
178+ /// </summary>
179+ /// <param name="channel">Channelname.</param>
180+ /// <param name="listener">Callback Method.</param>
181+ public void HandleOnce ( string channel , Func < object , object > listener )
182+ {
183+ BridgeConnector . Socket . Emit ( "registerHandleOnceIpcMainChannel" , channel ) ;
184+ BridgeConnector . Socket . Once < JsonElement > ( channel , ( args ) =>
185+ {
186+ var arg = FormatArguments ( args ) ;
187+ var result = listener ( arg ) ;
188+ BridgeConnector . Socket . Emit ( channel + "HandleOnce" , result ) ;
189+ } ) ;
190+ }
191+
192+ /// <summary>
193+ /// Removes any handler for channel, if present.
194+ /// </summary>
195+ /// <param name="channel">Channelname.</param>
196+ public void RemoveHandler ( string channel )
197+ {
198+ BridgeConnector . Socket . Emit ( "removeHandlerIpcMainChannel" , channel ) ;
199+ }
157200 }
158201}
0 commit comments