UNPKG

selfbot-discord

Version:
91 lines (82 loc) • 2.17 kB
const EventEmitter = require('events').EventEmitter; const Constants = require('../../util/Constants'); const WebSocketConnection = require('./WebSocketConnection'); /** * WebSocket Manager of the client. * @private */ class WebSocketManager extends EventEmitter { constructor(client) { super(); /** * The client that instantiated this WebSocketManager * @type {Client} */ this.client = client; /** * The WebSocket connection of this manager * @type {?WebSocketConnection} */ this.connection = null; } /** * Sends a heartbeat on the available connection. * @returns {void} */ heartbeat() { if (!this.connection) return this.debug('No connection to heartbeat'); return this.connection.heartbeat(); } /** * Emits a debug event. * @param {string} message Debug message * @returns {void} */ debug(message) { return this.client.emit('debug', `[ws] ${message}`); } /** * Destroy the client. * @returns {void} Whether or not destruction was successful */ destroy() { if (!this.connection) { this.debug('Attempted to destroy WebSocket but no connection exists!'); return false; } return this.connection.destroy(); } /** * Send a packet on the available WebSocket. * @param {Object} packet Packet to send * @returns {void} */ send(packet) { if (!this.connection) { this.debug('No connection to websocket'); return; } this.connection.send(packet); } /** * Connects the client to a gateway. * @param {string} gateway The gateway to connect to * @returns {boolean} */ connect(gateway) { if (!this.connection) { this.connection = new WebSocketConnection(this, gateway); return true; } switch (this.connection.status) { case Constants.Status.IDLE: case Constants.Status.DISCONNECTED: this.connection.connect(gateway, 5500); return true; default: this.debug(`Couldn't connect to ${gateway} as the websocket is at state ${this.connection.status}`); return false; } } } module.exports = WebSocketManager;