mirror of
https://github.com/danbulant/discord.js
synced 2026-05-27 14:02:02 +00:00
Optimise websocket events
This commit is contained in:
parent
0d754d1fbb
commit
a4193553e2
1 changed files with 34 additions and 15 deletions
|
|
@ -129,9 +129,7 @@ class WebSocketManager extends EventEmitter {
|
||||||
const item = this._queue[0];
|
const item = this._queue[0];
|
||||||
if (this.ws.readyState === WebSocket.OPEN && item) {
|
if (this.ws.readyState === WebSocket.OPEN && item) {
|
||||||
if (this._remaining === 0) {
|
if (this._remaining === 0) {
|
||||||
this.client.setTimeout(() => {
|
this.client.setTimeout(this.doQueue.bind(this), 1000);
|
||||||
this.doQueue();
|
|
||||||
}, 1000);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._remaining--;
|
this._remaining--;
|
||||||
|
|
@ -214,21 +212,42 @@ class WebSocketManager extends EventEmitter {
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
eventMessage(event) {
|
eventMessage(event) {
|
||||||
let packet = event.data;
|
const data = this.tryParseEventData(event.data);
|
||||||
try {
|
if (data === null) {
|
||||||
if (typeof packet !== 'string') {
|
this.eventError(new Error(Constants.Errors.BAD_WS_MESSAGE));
|
||||||
if (packet instanceof ArrayBuffer) packet = convertArrayBuffer(packet);
|
return false;
|
||||||
packet = inflate(packet).toString();
|
|
||||||
}
|
|
||||||
packet = JSON.parse(packet);
|
|
||||||
} catch (e) {
|
|
||||||
return this.eventError(new Error(Constants.Errors.BAD_WS_MESSAGE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.client.emit('raw', packet);
|
this.client.emit('raw', data);
|
||||||
|
|
||||||
if (packet.op === Constants.OPCodes.HELLO) this.client.manager.setupKeepAlive(packet.d.heartbeat_interval);
|
if (data.op === Constants.OPCodes.HELLO) this.client.manager.setupKeepAlive(data.d.heartbeat_interval);
|
||||||
return this.packetManager.handle(packet);
|
return this.packetManager.handle(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses the raw data from a websocket event, inflating it if necessary
|
||||||
|
* @param {*} data Event data
|
||||||
|
* @returns {Object}
|
||||||
|
*/
|
||||||
|
parseEventData(data) {
|
||||||
|
if (typeof data !== 'string') {
|
||||||
|
if (data instanceof ArrayBuffer) data = convertArrayBuffer(data);
|
||||||
|
data = inflate(data).toString();
|
||||||
|
}
|
||||||
|
return JSON.parse(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tries to call `parseEventData()` and return its result, or returns `null` upon thrown errors.
|
||||||
|
* @param {*} data Event data
|
||||||
|
* @returns {?Object}
|
||||||
|
*/
|
||||||
|
tryParseEventData(data) {
|
||||||
|
try {
|
||||||
|
return this.parseEventData(data);
|
||||||
|
} catch (err) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue