mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-11 00:53:31 +01:00
Add etf encoding support with erlpack (#943)
* the performance from this is astounding * help uws * save 15 bytes in webpacks * update readme * why is markdown like this * optimizations * Update WebSocketManager.js
This commit is contained in:
committed by
Schuyler Cebulskie
parent
58c7c2e7b8
commit
1e5afc1608
@@ -1,6 +1,7 @@
|
||||
const browser = typeof window !== 'undefined';
|
||||
const EventEmitter = require('events').EventEmitter;
|
||||
const Constants = require('../../util/Constants');
|
||||
const convertArrayBuffer = require('../../util/ConvertArrayBuffer');
|
||||
const pako = require('pako');
|
||||
const zlib = require('zlib');
|
||||
const PacketManager = require('./packets/WebSocketPacketManager');
|
||||
@@ -16,6 +17,15 @@ if (browser) {
|
||||
}
|
||||
}
|
||||
|
||||
let erlpack, serialize;
|
||||
try {
|
||||
erlpack = require('erlpack');
|
||||
serialize = erlpack.pack;
|
||||
} catch (err) {
|
||||
erlpack = null;
|
||||
serialize = JSON.stringify;
|
||||
}
|
||||
|
||||
/**
|
||||
* The WebSocket Manager of the Client
|
||||
* @private
|
||||
@@ -100,6 +110,7 @@ class WebSocketManager extends EventEmitter {
|
||||
}
|
||||
|
||||
connect(gateway) {
|
||||
gateway = `${gateway}&encoding=${erlpack ? 'etf' : 'json'}`;
|
||||
if (this.first) {
|
||||
this._connect(gateway);
|
||||
this.first = false;
|
||||
@@ -115,10 +126,10 @@ class WebSocketManager extends EventEmitter {
|
||||
*/
|
||||
send(data, force = false) {
|
||||
if (force) {
|
||||
this._send(JSON.stringify(data));
|
||||
this._send(serialize(data));
|
||||
return;
|
||||
}
|
||||
this._queue.push(JSON.stringify(data));
|
||||
this._queue.push(serialize(data));
|
||||
this.doQueue();
|
||||
}
|
||||
|
||||
@@ -240,9 +251,14 @@ class WebSocketManager extends EventEmitter {
|
||||
* @returns {Object}
|
||||
*/
|
||||
parseEventData(data) {
|
||||
if (data instanceof ArrayBuffer) data = pako.inflate(data, { to: 'string' });
|
||||
else if (data instanceof Buffer) data = zlib.inflateSync(data).toString();
|
||||
return JSON.parse(data);
|
||||
if (erlpack) {
|
||||
if (data instanceof ArrayBuffer) data = convertArrayBuffer(data);
|
||||
return erlpack.unpack(data);
|
||||
} else {
|
||||
if (data instanceof ArrayBuffer) data = pako.inflate(data, { to: 'string' });
|
||||
else if (data instanceof Buffer) data = zlib.inflateSync(data).toString();
|
||||
return JSON.parse(data);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user