voice: more debug information

#3074, #2979, #3044
This commit is contained in:
Amish Shah
2019-02-10 20:18:08 +00:00
parent 793341dbb4
commit aab3523fb5
4 changed files with 24 additions and 2 deletions

View File

@@ -72,6 +72,8 @@ class ClientVoiceManager {
reject(reason);
});
connection.on('debug', msg => this.client.emit('debug', `[VOICE (${channel.guild.id})]: ${msg}`));
connection.once('authenticated', () => {
connection.once('ready', () => {
resolve(connection);

View File

@@ -396,6 +396,8 @@ class VoiceConnection extends EventEmitter {
const { ws, udp } = this.sockets;
ws.on('debug', msg => this.emit('debug', msg));
udp.on('debug', msg => this.emit('debug', msg));
ws.on('error', err => this.emit('error', err));
udp.on('error', err => this.emit('error', err));
ws.on('ready', this.onReady.bind(this));
@@ -431,6 +433,7 @@ class VoiceConnection extends EventEmitter {
const dispatcher = this.play(new SingleSilence(), { type: 'opus' });
dispatcher.on('finish', () => {
clearTimeout(this.connectTimeout);
this.emit('debug', `Ready with authentication details: ${JSON.stringify(this.authentication)}`);
/**
* Emitted once the connection is ready, when a promise to join a voice channel resolves,
* the connection will already be ready.

View File

@@ -48,6 +48,7 @@ class VoiceConnectionUDPClient extends EventEmitter {
}
shutdown() {
this.emit('debug', `[UDP] shutdown requested`);
if (this.socket) {
this.socket.removeAllListeners('message');
try {
@@ -77,7 +78,12 @@ class VoiceConnectionUDPClient extends EventEmitter {
if (!this.socket) throw new Error('UDP_SEND_FAIL');
if (!this.discordAddress || !this.discordPort) throw new Error('UDP_ADDRESS_MALFORMED');
this.socket.send(packet, 0, packet.length, this.discordPort, this.discordAddress, error => {
if (error) reject(error); else resolve(packet);
if (error) {
this.emit('debug', `[UDP] >> ERROR: ${error}`);
reject(error);
} else {
resolve(packet);
}
});
});
}
@@ -85,13 +91,14 @@ class VoiceConnectionUDPClient extends EventEmitter {
createUDPSocket(address) {
this.discordAddress = address;
const socket = this.socket = udp.createSocket('udp4');
this.emit('debug', `[UDP] created socket`);
socket.once('message', message => {
// Stop if the sockets have been deleted because the connection has been closed already
if (!this.voiceConnection.sockets.ws) return;
const packet = parseLocalPacket(message);
if (packet.error) {
this.emit('debug', `[UDP] ERROR: ${packet.error}`);
this.emit('error', packet.error);
return;
}
@@ -111,6 +118,8 @@ class VoiceConnectionUDPClient extends EventEmitter {
},
});
this.emit('debug', `[UDP] << ${JSON.stringify(packet)}`);
socket.on('message', buffer => this.voiceConnection.receiver.packets.push(buffer));
});

View File

@@ -39,6 +39,7 @@ class VoiceWebSocket extends EventEmitter {
}
shutdown() {
this.emit('debug', `[WS] shutdown requested`);
this.dead = true;
this.reset();
}
@@ -47,6 +48,7 @@ class VoiceWebSocket extends EventEmitter {
* Resets the current WebSocket.
*/
reset() {
this.emit('debug', `[WS] reset requested`);
if (this.ws) {
if (this.ws.readyState !== WebSocket.CLOSED) this.ws.close();
this.ws = null;
@@ -58,6 +60,7 @@ class VoiceWebSocket extends EventEmitter {
* Starts connecting to the Voice WebSocket Server.
*/
connect() {
this.emit('debug', `[WS] connect requested`);
if (this.dead) return;
if (this.ws) this.reset();
if (this.attempts >= 5) {
@@ -66,6 +69,7 @@ class VoiceWebSocket extends EventEmitter {
}
this.attempts++;
this.emit('debug', `[WS] connecting with ${this.attempts} attempts`);
/**
* The actual WebSocket used to connect to the Voice WebSocket Server.
@@ -84,6 +88,7 @@ class VoiceWebSocket extends EventEmitter {
* @returns {Promise<string>}
*/
send(data) {
this.emit('debug', `[WS] >> ${data}`);
return new Promise((resolve, reject) => {
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error('WS_NOT_OPEN', data);
this.ws.send(data, null, error => {
@@ -110,6 +115,7 @@ class VoiceWebSocket extends EventEmitter {
* Called whenever the WebSocket opens.
*/
onOpen() {
this.emit('debug', `[WS] opened at gateway ${this.connection.authentication.endpoint}`);
this.sendPacket({
op: OPCodes.DISPATCH,
d: {
@@ -140,6 +146,7 @@ class VoiceWebSocket extends EventEmitter {
* Called whenever the connection to the WebSocket server is lost.
*/
onClose() {
this.emit('debug', `[WS] closed`);
if (!this.dead) this.client.setTimeout(this.connect.bind(this), this.attempts * 1000);
}
@@ -156,6 +163,7 @@ class VoiceWebSocket extends EventEmitter {
* @param {Object} packet The received packet
*/
onPacket(packet) {
this.emit('debug', `[WS] << ${JSON.stringify(packet)}`);
switch (packet.op) {
case VoiceOPCodes.HELLO:
this.setHeartbeat(packet.d.heartbeat_interval);