mirror of
https://github.com/quine-global/hyper.git
synced 2026-01-12 20:18:41 -09:00
59 lines
1.3 KiB
JavaScript
59 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();
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|