diff --git a/package.json b/package.json index 9ab5e3ae5..7bc11e090 100644 --- a/package.json +++ b/package.json @@ -34,11 +34,12 @@ "pako": "^1.0.3", "superagent": "^3.0.0", "tweetnacl": "^0.14.3", - "uws": "^0.11.1" + "ws": "^1.1.1" }, "peerDependencies": { "node-opus": "^0.2.0", - "opusscript": "^0.0.1" + "opusscript": "^0.0.1", + "uws": "^0.11.1" }, "devDependencies": { "bufferutil": "^1.2.1", @@ -55,6 +56,7 @@ "node": ">=6.0.0" }, "browser": { + "ws": false, "uws": false, "opusscript": false, "node-opus": false, diff --git a/src/client/voice/VoiceWebSocket.js b/src/client/voice/VoiceWebSocket.js index 6c7303e27..bafa5dde3 100644 --- a/src/client/voice/VoiceWebSocket.js +++ b/src/client/voice/VoiceWebSocket.js @@ -1,8 +1,14 @@ -const WebSocket = require('uws'); const Constants = require('../../util/Constants'); const SecretKey = require('./util/SecretKey'); const EventEmitter = require('events').EventEmitter; +let WebSocket; +try { + WebSocket = require('uws'); +} catch (err) { + WebSocket = require('ws'); +} + /** * Represents a Voice Connection's WebSocket * @extends {EventEmitter} diff --git a/src/client/websocket/WebSocketManager.js b/src/client/websocket/WebSocketManager.js index 16cd3d69d..6493fc4dc 100644 --- a/src/client/websocket/WebSocketManager.js +++ b/src/client/websocket/WebSocketManager.js @@ -1,10 +1,21 @@ const browser = typeof window !== 'undefined'; -const WebSocket = browser ? window.WebSocket : require('uws'); // eslint-disable-line no-undef const EventEmitter = require('events').EventEmitter; const Constants = require('../../util/Constants'); const pako = require('pako'); +const zlib = require('zlib'); const PacketManager = require('./packets/WebSocketPacketManager'); +let WebSocket; +if (browser) { + WebSocket = window.WebSocket; // eslint-disable-line no-undef +} else { + try { + WebSocket = require('uws'); + } catch (err) { + WebSocket = require('ws'); + } +} + /** * The WebSocket Manager of the Client * @private @@ -230,6 +241,7 @@ class WebSocketManager extends EventEmitter { */ 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); }