mirror of
https://github.com/atom/atom.git
synced 2026-02-02 10:45:14 -05:00
We need to avoid using the module for synchronous IPC on startup, but in some cases, we need to know when our asynchronous IPC messages have taken effect. Now, methods like and return Promises that indicate when the message has been processed.
41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
var ipcRenderer = null
|
|
var ipcMain = null
|
|
var BrowserWindow = null
|
|
|
|
exports.call = function (methodName, ...args) {
|
|
if (!ipcRenderer) {
|
|
ipcRenderer = require('electron').ipcRenderer
|
|
}
|
|
|
|
var responseChannel = getResponseChannel(methodName)
|
|
|
|
return new Promise(function (resolve) {
|
|
ipcRenderer.on(responseChannel, function (event, result) {
|
|
ipcRenderer.removeAllListeners(responseChannel)
|
|
resolve(result)
|
|
})
|
|
|
|
ipcRenderer.send(methodName, ...args)
|
|
})
|
|
}
|
|
|
|
exports.respondTo = function (methodName, callback) {
|
|
if (!ipcMain) {
|
|
var electron = require('electron')
|
|
ipcMain = electron.ipcMain
|
|
BrowserWindow = electron.BrowserWindow
|
|
}
|
|
|
|
var responseChannel = getResponseChannel(methodName)
|
|
|
|
ipcMain.on(methodName, function (event, ...args) {
|
|
var browserWindow = BrowserWindow.fromWebContents(event.sender)
|
|
var result = callback(browserWindow, ...args)
|
|
event.sender.send(responseChannel, result)
|
|
})
|
|
}
|
|
|
|
function getResponseChannel (methodName) {
|
|
return 'ipc-helpers-' + methodName + '-response'
|
|
}
|