selfbot-discord
Version:
Module discord.js v11 modifié
91 lines (82 loc) • 2.17 kB
JavaScript
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;