UNPKG

lightweight-socket

Version:

lightweight socket

65 lines (64 loc) 1.55 kB
// src/event.ts var Event = class { constructor(name, payload) { this.name = name; this.payload = payload; } toString() { return JSON.stringify({ name: this.name, payload: this.payload }); } }; var Emitter = class { constructor() { this.listeners = {}; } on(event, listener) { if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event].push(listener); } once(event, listener) { const onceListener = (...args) => { this.off(event, onceListener); listener.apply(this, args); }; this.on(event, onceListener); } off(event, listener) { if (!this.listeners[event]) return; this.listeners[event] = this.listeners[event].filter((l) => l !== listener); } }; // src/client-browser.ts var BrowserClient = class extends Emitter { constructor(url) { super(); this.socket = new WebSocket(url); this.init(); this.on("connect", (id) => this.id = id); } emit(name, ...args) { const event = new Event(name, args); const message = event.toString(); this.socket.send(message); } close() { this.socket.close(); } receive(event) { const data = event.data; const parsedEvent = JSON.parse(data); if (this.listeners[parsedEvent.name]) { this.listeners[parsedEvent.name].forEach((listener) => listener(...parsedEvent.payload)); } } init() { this.socket.addEventListener("message", this.receive.bind(this)); } }; export { BrowserClient }; //# sourceMappingURL=client-browser.mjs.map