Add event handler with sender id

This commit is contained in:
rafael-aero
2021-09-01 20:42:49 +02:00
parent 794248a83c
commit eac14427df
3 changed files with 61 additions and 9 deletions

View File

@@ -47,11 +47,11 @@ namespace ElectronNET.API
{
BridgeConnector.Emit("registerIpcMainChannel", channel);
BridgeConnector.Off(channel);
BridgeConnector.On<object[]>(channel, (args) =>
BridgeConnector.On<object[]>(channel, (args) =>
{
var objectArray = FormatArguments(args);
if(objectArray.Count == 1)
if (objectArray.Count == 1)
{
listener(objectArray.First());
}
@@ -62,6 +62,38 @@ namespace ElectronNET.API
});
}
/// <summary>
/// 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
/// </summary>
/// <param name="channel">Channelname.</param>
/// <param name="listener">Callback Method.</param>
public void OnWithId(string channel, Action<int, object> listener)
{
BridgeConnector.Emit("registerIpcMainChannelWithId", channel);
BridgeConnector.Off(channel);
BridgeConnector.On<ArgsAndId>(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<object> FormatArguments(object[] objectArray)
{
return objectArray.Where(o => o is object).ToList();

View File

@@ -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) => {

View File

@@ -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]);
});
});