Aller au contenu principal

ipcMain

Permet de communiquer de manière asynchrone depuis le processus main avec les processus de rendu.

Processus : Main

Le module ipcMain est un Event Emitter. Lorsqu'il est utilisé dans le processus main, il gère les messages asynchrones et synchrones envoyés à partir d'un processus renderer (page web). Les messages envoyés par un renderer seront émis vers ce module.

Pour des exemples d'utilisation, consultez le tutoriel La communication inter-processus.

Envoi de messages

Il est également possible d'envoyer des messages depuis le processus main pour le processus renderer. Voir webContents.send pour plus d'information.

  • Lors de l'envoi d'un message, le nom de l'événement est channel.
  • Pour répondre à un message synchrone, vous devez définir event.returnValue.
  • Pour renvoyer un message asynchrone à l'expéditeur, vous utiliserez event.reply(...). Cette méthode "helper" gérera automatiquement les messages provenant des frames qui ne sont pas la frame principale (e. . iframes) alors que event.sender.send(...) les enverra toujours vers la frame principale.

Méthodes

Le module de ipcMain possède les méthodes suivantes pour écouter les événements :

ipcMain.on(channel, listener)

  • channel string
  • listener Function

En écoutant channel, lorsqu'un nouveau message arrive, listener sera appelé comme ceci listener(event, args...).

ipcMain.once(channel, listener)

  • channel string
  • listener Function

Ajoute un listener à déclenchement unique pour l’événement. Ce listener sera appelé uniquement lors de la prochaine émission d'un message sur le channel, après quoi il sera supprimé.

ipcMain.removeListener(channel, listener)

  • channel string
  • listener Function
    • ...args any[]

Supprime du tableau d'écouteurs le listener spécifié pour le channel spécifié.

ipcMain.removeAllListeners([channel])

  • channel string (facultatif)

Supprime tous les écouteurs du channel spécifié.

ipcMain.handle(canal, écouteur)

Ajoute un gestionnaire pour un IPC pouvant utiliser invoke. Ce gestionnaire sera appelé chaque fois qu'un moteur de rendu appellera ipcRenderer.invoke(channel, ...args).

Si listener renvoie une Promise, le résultat final de la promesse sera retourné en réponse à l'appelant distant. Sinon, la valeur de retour de l'écouteur sera utilisée comme valeur de la réponse.

Main Process
ipcMain.handle('my-invokable-ipc', async (event, ...args) => {
const result = await somePromise(...args)
return result
})
Renderer Process
async () => {
const result = await ipcRenderer.invoke('my-invokable-ipc', arg1, arg2)
// ...
}

L'event qui est passé comme premier argument au gestionnaire est le même que celui passé à un event listener régulier. Il contient des informations sur le WebContents à la source de la demande d'invoke.

Les erreurs émises par le handle dans le processus principal ne sont pas transparentes car elles sont sérialisées et seule la propriété message de l'erreur d'origine est fournie au processus de rendu. Pour plus de détails, veuillez vous référer au problème #24427 sur github.

ipcMain.handleOnce(channel, listener)

  • channel string
  • listener Function<Promise<void> | any>
    • événement IpcMainInvokeEvent
    • ...args any[]

Gère un seul message IPC pouvant utiliser invoke, puis supprime l’écouteur. Voir ipcMain.handle(channel, listener).

ipcMain.removeHandler(channel)

  • channel string

Supprime, si présent, tout gestionnaire pour canal.

Objet IpcMainEvent

La documentation de l'objet event passé à la callback peut être trouvée dans la documentation de la structure ipc-main-event.

Objet IpcMainInvokeEvent

La documentation de l'objet événement passé à handle callbacks peut être trouvée dans la documentation de la structure ipc-main-invoke-event .