@fnlb-project/fnbr
Version:
A library to interact with Epic Games' Fortnite HTTP and XMPP services
74 lines • 2.28 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class WebSocket {
constructor(url, options) {
var _a;
this.listeners = new Map();
const isNode = typeof process !== 'undefined' && ((_a = process.release) === null || _a === void 0 ? void 0 : _a.name) === 'node';
const isBun = typeof Bun !== 'undefined';
if (isNode || isBun) {
this.socket = new globalThis.WebSocket(url, options);
}
else {
this.socket = new globalThis.WebSocket(url);
}
this.socket.onopen = (ev) => this.emit('open', ev);
this.socket.onmessage = (ev) => this.emit('message', ev.data);
this.socket.onerror = (ev) => {
if (!ev.message)
ev.message = 'WebSocket connection failed';
this.emit('error', ev);
};
this.socket.onclose = (ev) => this.emit('close', ev.code, ev.reason);
}
get readyState() {
return this.socket.readyState;
}
send(data) {
this.socket.send(data);
}
close(code, reason) {
this.socket.close(code, reason);
}
on(event, listener) {
if (!this.listeners.has(event))
this.listeners.set(event, new Set());
this.listeners.get(event).add(listener);
return this;
}
once(event, listener) {
const wrapper = (...args) => {
this.off(event, wrapper);
listener(...args);
};
return this.on(event, wrapper);
}
off(event, listener) {
const eventListeners = this.listeners.get(event);
if (eventListeners) {
eventListeners.delete(listener);
}
return this;
}
removeAllListeners(event) {
if (event) {
this.listeners.delete(event);
}
else {
this.listeners.clear();
}
return this;
}
emit(event, ...args) {
const eventListeners = this.listeners.get(event);
if (eventListeners) {
eventListeners.forEach((listener) => listener(...args));
}
}
}
WebSocket.OPEN = 1;
WebSocket.CONNECTING = 0;
WebSocket.CLOSING = 2;
WebSocket.CLOSED = 3;
exports.default = WebSocket;
//# sourceMappingURL=WebSocket.js.map