-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathipc-helpers.js
49 lines (41 loc) · 1.31 KB
/
ipc-helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
const Disposable = require('event-kit').Disposable;
let ipcRenderer = null;
let ipcMain = null;
let BrowserWindow = null;
let nextResponseChannelId = 0;
exports.on = function(emitter, eventName, callback) {
emitter.on(eventName, callback);
return new Disposable(() => emitter.removeListener(eventName, callback));
};
exports.call = function(channel, ...args) {
if (!ipcRenderer) {
ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.setMaxListeners(20);
}
const responseChannel = `ipc-helpers-response-${nextResponseChannelId++}`;
return new Promise(resolve => {
ipcRenderer.on(responseChannel, (event, result) => {
ipcRenderer.removeAllListeners(responseChannel);
resolve(result);
});
ipcRenderer.send(channel, responseChannel, ...args);
});
};
exports.respondTo = function(channel, callback) {
if (!ipcMain) {
const electron = require('electron');
ipcMain = electron.ipcMain;
BrowserWindow = electron.BrowserWindow;
}
return exports.on(
ipcMain,
channel,
async (event, responseChannel, ...args) => {
const browserWindow = BrowserWindow.fromWebContents(event.sender);
const result = await callback(browserWindow, ...args);
if (!event.sender.isDestroyed()) {
event.sender.send(responseChannel, result);
}
}
);
};