https://github.com/ziflex/electron-ipc-socket
Two-way communication on top of Electron IPC system
https://github.com/ziflex/electron-ipc-socket
Last synced: 2 months ago
JSON representation
Two-way communication on top of Electron IPC system
- Host: GitHub
- URL: https://github.com/ziflex/electron-ipc-socket
- Owner: ziflex
- License: mit
- Created: 2016-11-01T01:40:37.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T22:35:42.000Z (over 2 years ago)
- Last Synced: 2024-04-14T12:24:47.209Z (about 1 year ago)
- Language: TypeScript
- Homepage: https://ziflex.github.io/electron-ipc-socket
- Size: 1.3 MB
- Stars: 14
- Watchers: 2
- Forks: 3
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# electron-ipc-socket
> Event based communication
Response-request abstraction on top of Electron IPC system.
[](https://www.npmjs.com/package/electron-ipc-socket)
[](https://github.com/ziflex/electron-ipc-socket/workflows/Node%20CI/badge.svg)```sh
npm install --save electron-ipc-socket
```## Motivation
Events are good, but sometimes you want something more than just 'emit and forget'.
Current package provides an abstraction on top of Electron IPC system that allows you to make 'request-response' communication.## Usage
### Events
```typescript
// main-process.jsimport { ipcMain, BrowserWindow } from 'electron';
import { Socket, Transport, Event, InboundRequest } from 'electron-ipc-socket';
import fs from 'fs';const win = new BrowserWindow();
const socket = new Socket(new Transport(ipcMain, win));
socket.open('main-win');
socket.onEvent('ready', (evt: Event) => {
console.log('Renderer process is ready');
});
``````typescript
// renderer-process.jsimport { ipcRenderer } from 'electron';
import { Socket } from 'electron-ipc-socket';const socket = new Socket(ipcRenderer);
socket.open('main-win');
socket.send('ready');
```### Request-response
```typescript
// main-process.jsimport { ipcMain, BrowserWindow } from 'electron';
import { Socket, Transport, Event, InboundRequest } from 'electron-ipc-socket';
import fs from 'fs';const win = new BrowserWindow();
const socket = new Socket(new Transport(ipcMain, win));
socket.open('main-win');
socket.onRequest('ping', (req: InboundRequest) => {
return 'pong';
});
``````typescript
// renderer-process.jsimport { ipcRenderer } from 'electron';
import { Socket } from 'electron-ipc-socket';const socket = new Socket(ipcRenderer);
socket.open('main-win');
socket
.request('ping')
.then(content => console.log(content))
.catch(err => console.error(err));
```##### Async request handler
```typescript
// main-process.jsimport { ipcMain, BrowserWindow } from 'electron';
import { Socket, Transport, Event, InboundRequest } from 'electron-ipc-socket';
import fs from 'fs';
import util from 'util';const read = util.promisify(fs.read);
const win = new BrowserWindow();const socket = new Socket(new Transport(ipcMain, win));
socket.open('main-win');
socket.onRequest('file', async (req: InboundRequest) => {
return read(req.data);
});
``````typescript
// renderer-process.jsimport { ipcRenderer } from 'electron';
import { Socket } from 'electron-ipc-socket';const socket = new Socket(ipcRenderer);
socket.open('main-win');
socket
.request('file', 'package.json')
.then(content => console.log(content))
.catch(err => console.error(err));
```