diff --git a/ElectronNET.API/IpcMain.cs b/ElectronNET.API/IpcMain.cs index 6c59746..c35efef 100644 --- a/ElectronNET.API/IpcMain.cs +++ b/ElectronNET.API/IpcMain.cs @@ -47,11 +47,11 @@ namespace ElectronNET.API { BridgeConnector.Emit("registerIpcMainChannel", channel); BridgeConnector.Off(channel); - BridgeConnector.On(channel, (args) => + BridgeConnector.On(channel, (args) => { var objectArray = FormatArguments(args); - if(objectArray.Count == 1) + if (objectArray.Count == 1) { listener(objectArray.First()); } @@ -62,6 +62,38 @@ namespace ElectronNET.API }); } + + /// + /// Listens to channel, when a new message arrives listener would be called with + /// listener(event, args...). This listner will keep the window event sender id + /// + /// Channelname. + /// Callback Method. + public void OnWithId(string channel, Action listener) + { + BridgeConnector.Emit("registerIpcMainChannelWithId", channel); + BridgeConnector.Off(channel); + BridgeConnector.On(channel, (data) => + { + var objectArray = FormatArguments(data.args); + + if (objectArray.Count == 1) + { + listener(data.id, objectArray.First()); + } + else + { + listener(data.id, objectArray); + } + }); + } + + private class ArgsAndId + { + public int id { get; set; } + public object[] args { get; set; } + } + private List FormatArguments(object[] objectArray) { return objectArray.Where(o => o is object).ToList(); diff --git a/ElectronNET.Host/api/ipc.js b/ElectronNET.Host/api/ipc.js index 4c18ea8..d4737a9 100644 --- a/ElectronNET.Host/api/ipc.js +++ b/ElectronNET.Host/api/ipc.js @@ -5,7 +5,15 @@ module.exports = (socket) => { electronSocket = socket; socket.on('registerIpcMainChannel', (channel) => { electron_1.ipcMain.on(channel, (event, args) => { - electronSocket.emit(channel, [event.preventDefault(), args]); + event.preventDefault(); + electronSocket.emit(channel, [...args]); + }); + }); + socket.on('registerIpcMainChannelWithId', (channel) => { + electron_1.ipcMain.on(channel, (event, args) => { + event.preventDefault(); + let id = event.sender.senderId; + electronSocket.emit(channel, { id: id, args: [...args] }); }); }); socket.on('registerSyncIpcMainChannel', (channel) => { @@ -15,12 +23,14 @@ module.exports = (socket) => { socket.on(channel + 'Sync', (result) => { event.returnValue = result; }); - electronSocket.emit(channel, [event.preventDefault(), args]); + event.preventDefault(); + electronSocket.emit(channel, [...args]); }); }); socket.on('registerOnceIpcMainChannel', (channel) => { electron_1.ipcMain.once(channel, (event, args) => { - electronSocket.emit(channel, [event.preventDefault(), args]); + event.preventDefault(); + electronSocket.emit(channel, [...args]); }); }); socket.on('removeAllListenersIpcMainChannel', (channel) => { diff --git a/ElectronNET.Host/api/ipc.ts b/ElectronNET.Host/api/ipc.ts index 801160f..52e90d5 100644 --- a/ElectronNET.Host/api/ipc.ts +++ b/ElectronNET.Host/api/ipc.ts @@ -6,7 +6,16 @@ export = (socket: Socket) => { electronSocket = socket; socket.on('registerIpcMainChannel', (channel) => { ipcMain.on(channel, (event, args) => { - electronSocket.emit(channel, [event.preventDefault(), args]); + event.preventDefault(); + electronSocket.emit(channel, [...args]); + }); + }); + + socket.on('registerIpcMainChannelWithId', (channel) => { + ipcMain.on(channel, (event, args) => { + event.preventDefault(); + let id = event.sender.senderId; + electronSocket.emit(channel, { id: id, args: [...args] }); }); }); @@ -17,14 +26,15 @@ export = (socket: Socket) => { socket.on(channel + 'Sync', (result) => { event.returnValue = result; }); - - electronSocket.emit(channel, [event.preventDefault(), args]); + event.preventDefault(); + electronSocket.emit(channel, [...args]); }); }); socket.on('registerOnceIpcMainChannel', (channel) => { ipcMain.once(channel, (event, args) => { - electronSocket.emit(channel, [event.preventDefault(), args]); + event.preventDefault(); + electronSocket.emit(channel, [...args]); }); });