mirror of
https://github.com/quine-global/hyper.git
synced 2026-01-13 04:28:41 -09:00
58 lines
1.3 KiB
TypeScript
58 lines
1.3 KiB
TypeScript
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();
|
|
}
|
|
}
|