import {EventEmitter} from 'events'; import io from 'socket.io-client'; import {SocketIoParser, allPackets, idFromPacket} from '@avocado/packet'; class SocketClient extends EventEmitter { constructor(address, options = {}) { super(); this.socket = io(address, { parser: SocketIoParser, path: '/avocado', perMessageDeflate: false, ...options, }); this.socket.on('connect', () => { this.emit('connect'); }); for (const Packet of allPackets()) { const id = idFromPacket(Packet); this.socket.on(id, (packet) => { this.emit('packet', packet); }); } } send(packet) { const id = idFromPacket(packet.constructor); this.socket.emit(id, packet.data); } } export function create(address) { return new SocketClient(address); }