hyper/lib/utils/rpc.js
Guillermo Rauch aaed99abac Reorg (#386)
* Step 1: move electorn into `app/`.

This is to comply with the suggested directory format of
`electron-builder`: https://github.com/electron-userland/electron-builder#two-packagejson-structure

* Step 2: add build directory with icon files for mac / windows

* Step 3: move all development (web) assets into main directory

* Step 4: add `build` namespace to dev `package.json`

* Step 5: move all dev dependencies into dev file and get rid of
old electron packagers in favor of `eletorn-builder`

* Step 6: target build inside `app/` as everything else is excluded at build time

* Step 7: remove old stuff!

* Step 8: update README

* turn off asar for `child_pty`
2016-07-24 10:59:21 -07:00

58 lines
1.3 KiB
JavaScript

export default class Client {
constructor () {
const electron = window.require('electron');
const EventEmitter = window.require('events');
this.emitter = new EventEmitter();
this.ipc = electron.ipcRenderer;
this.ipcListener = this.ipcListener.bind(this);
if (window.__rpcId) {
setTimeout(() => {
this.id = window.__rpcId;
this.ipc.on(this.id, this.ipcListener);
this.emitter.emit('ready');
}, 0);
} else {
this.ipc.on('init', (ev, uid) => {
// we cache so that if the object
// gets re-instantiated we don't
// wait for a `init` event
window.__rpcId = uid;
this.id = uid;
this.ipc.on(uid, this.ipcListener);
this.emitter.emit('ready');
});
}
}
ipcListener (event, { ch, data }) {
this.emitter.emit(ch, data);
}
on (ev, fn) {
this.emitter.on(ev, fn);
}
once (ev, fn) {
this.emitter.once(ev, fn);
}
emit (ev, data) {
if (!this.id) throw new Error('Not ready');
this.ipc.send(this.id, { ev, data });
}
removeListener (ev, fn) {
this.emitter.removeListener(ev, fn);
}
removeAllListeners () {
this.emitter.removeAllListeners();
}
destroy () {
this.removeAllListeners();
this.ipc.removeAllListeners();
}
}