UNPKG

lightweight-socket

Version:

lightweight socket

1 lines 3.85 kB
{"version":3,"sources":["../src/event.ts","../src/client-browser.ts"],"sourcesContent":["export interface EventInterface {\r\n name: string;\r\n payload: Array<string | number | [] | {}>;\r\n}\r\n\r\nexport class Event implements EventInterface {\r\n\r\n public name: EventInterface['name']\r\n\r\n public payload: EventInterface['payload']\r\n\r\n constructor(name: string, payload: EventInterface['payload']) {\r\n this.name = name;\r\n this.payload = payload;\r\n }\r\n\r\n toString() {\r\n return JSON.stringify({ name: this.name, payload: this.payload });\r\n }\r\n}\r\n\r\nexport class Emitter {\r\n\r\n protected listeners: { [event: string]: Function[] } = {};\r\n\r\n public on(event: string, listener: Function) {\r\n if (!this.listeners[event]) {\r\n this.listeners[event] = [];\r\n }\r\n this.listeners[event].push(listener);\r\n }\r\n\r\n public once(event: string, listener: Function) {\r\n const onceListener = (...args: any[]) => {\r\n this.off(event, onceListener);\r\n listener.apply(this, args);\r\n };\r\n this.on(event, onceListener);\r\n }\r\n\r\n public off(event: string, listener: Function) {\r\n if (!this.listeners[event]) return;\r\n this.listeners[event] = this.listeners[event].filter(l => l !== listener);\r\n }\r\n\r\n}\r\n","import {Event, EventInterface} from './event';\r\nimport { Emitter } from './event';\r\n\r\nexport class BrowserClient extends Emitter {\r\n protected socket: WebSocket;\r\n\r\n public id: string;\r\n\r\n constructor(url: string) {\r\n super();\r\n this.socket = new WebSocket(url);\r\n this.init();\r\n this.on('connect', (id) => this.id = id);\r\n }\r\n\r\n public emit(name: string, ...args: any[]) {\r\n const event = new Event(name, args);\r\n const message = event.toString();\r\n this.socket.send(message);\r\n }\r\n\r\n public close() {\r\n this.socket.close();\r\n }\r\n\r\n protected receive(event: MessageEvent) {\r\n const data = event.data;\r\n const parsedEvent = JSON.parse(data) as EventInterface;\r\n if (this.listeners[parsedEvent.name]) {\r\n this.listeners[parsedEvent.name].forEach(listener => listener(...parsedEvent.payload));\r\n }\r\n }\r\n\r\n protected init() {\r\n this.socket.addEventListener('message', this.receive.bind(this));\r\n }\r\n}"],"mappings":";AAKO,IAAM,QAAN,MAAsC;AAAA,EAMzC,YAAY,MAAc,SAAoC;AAC1D,SAAK,OAAO;AACZ,SAAK,UAAU;AAAA,EACnB;AAAA,EAEA,WAAW;AACP,WAAO,KAAK,UAAU,EAAE,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ,CAAC;AAAA,EACpE;AACJ;AAEO,IAAM,UAAN,MAAc;AAAA,EAAd;AAEH,SAAU,YAA6C,CAAC;AAAA;AAAA,EAEjD,GAAG,OAAe,UAAoB;AACzC,QAAI,CAAC,KAAK,UAAU,KAAK,GAAG;AACxB,WAAK,UAAU,KAAK,IAAI,CAAC;AAAA,IAC7B;AACA,SAAK,UAAU,KAAK,EAAE,KAAK,QAAQ;AAAA,EACvC;AAAA,EAEO,KAAK,OAAe,UAAoB;AAC3C,UAAM,eAAe,IAAI,SAAgB;AACrC,WAAK,IAAI,OAAO,YAAY;AAC5B,eAAS,MAAM,MAAM,IAAI;AAAA,IAC7B;AACA,SAAK,GAAG,OAAO,YAAY;AAAA,EAC/B;AAAA,EAEO,IAAI,OAAe,UAAoB;AAC1C,QAAI,CAAC,KAAK,UAAU,KAAK;AAAG;AAC5B,SAAK,UAAU,KAAK,IAAI,KAAK,UAAU,KAAK,EAAE,OAAO,OAAK,MAAM,QAAQ;AAAA,EAC5E;AAEJ;;;AC1CO,IAAM,gBAAN,cAA4B,QAAQ;AAAA,EAKvC,YAAY,KAAa;AACrB,UAAM;AACN,SAAK,SAAS,IAAI,UAAU,GAAG;AAC/B,SAAK,KAAK;AACV,SAAK,GAAG,WAAW,CAAC,OAAO,KAAK,KAAK,EAAE;AAAA,EAC3C;AAAA,EAEO,KAAK,SAAiB,MAAa;AACtC,UAAM,QAAQ,IAAI,MAAM,MAAM,IAAI;AAClC,UAAM,UAAU,MAAM,SAAS;AAC/B,SAAK,OAAO,KAAK,OAAO;AAAA,EAC5B;AAAA,EAEO,QAAQ;AACX,SAAK,OAAO,MAAM;AAAA,EACtB;AAAA,EAEU,QAAQ,OAAqB;AACnC,UAAM,OAAO,MAAM;AACnB,UAAM,cAAc,KAAK,MAAM,IAAI;AACnC,QAAI,KAAK,UAAU,YAAY,IAAI,GAAG;AAClC,WAAK,UAAU,YAAY,IAAI,EAAE,QAAQ,cAAY,SAAS,GAAG,YAAY,OAAO,CAAC;AAAA,IACzF;AAAA,EACJ;AAAA,EAEU,OAAO;AACb,SAAK,OAAO,iBAAiB,WAAW,KAAK,QAAQ,KAAK,IAAI,CAAC;AAAA,EACnE;AACJ;","names":[]}