mirror of
https://github.com/danbulant/discord.js
synced 2026-06-09 17:52:55 +00:00
Add client ping stuff
This commit is contained in:
parent
2488e1a00f
commit
58c7c2e7b8
3 changed files with 26 additions and 1 deletions
|
|
@ -148,6 +148,13 @@ class Client extends EventEmitter {
|
||||||
*/
|
*/
|
||||||
this.readyAt = null;
|
this.readyAt = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The previous heartbeat pings of the websocket (most recent first, limited to three elements)
|
||||||
|
* @type {number[]}
|
||||||
|
*/
|
||||||
|
this.pings = [];
|
||||||
|
|
||||||
|
this._pingTimestamp = 0;
|
||||||
this._timeouts = new Set();
|
this._timeouts = new Set();
|
||||||
this._intervals = new Set();
|
this._intervals = new Set();
|
||||||
|
|
||||||
|
|
@ -174,6 +181,15 @@ class Client extends EventEmitter {
|
||||||
return this.readyAt ? Date.now() - this.readyAt : null;
|
return this.readyAt ? Date.now() - this.readyAt : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The average heartbeat ping of the websocket
|
||||||
|
* @type {number}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
get ping() {
|
||||||
|
return this.pings.reduce((prev, p) => prev + p, 0) / this.pings.length;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a collection, mapping guild ID to voice connections.
|
* Returns a collection, mapping guild ID to voice connections.
|
||||||
* @type {Collection<string, VoiceConnection>}
|
* @type {Collection<string, VoiceConnection>}
|
||||||
|
|
@ -392,6 +408,11 @@ class Client extends EventEmitter {
|
||||||
this._intervals.delete(interval);
|
this._intervals.delete(interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_pong(startTime) {
|
||||||
|
this.pings.unshift(Date.now() - startTime);
|
||||||
|
if (this.pings.length > 3) this.pings.length = 3;
|
||||||
|
}
|
||||||
|
|
||||||
_setPresence(id, presence) {
|
_setPresence(id, presence) {
|
||||||
if (this.presences.get(id)) {
|
if (this.presences.get(id)) {
|
||||||
this.presences.get(id).update(presence);
|
this.presences.get(id).update(presence);
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ class ClientManager {
|
||||||
setupKeepAlive(time) {
|
setupKeepAlive(time) {
|
||||||
this.heartbeatInterval = this.client.setInterval(() => {
|
this.heartbeatInterval = this.client.setInterval(() => {
|
||||||
this.client.emit('debug', 'Sending heartbeat');
|
this.client.emit('debug', 'Sending heartbeat');
|
||||||
|
this.client._pingTimestamp = Date.now();
|
||||||
this.client.ws.send({
|
this.client.ws.send({
|
||||||
op: Constants.OPCodes.HEARTBEAT,
|
op: Constants.OPCodes.HEARTBEAT,
|
||||||
d: this.client.ws.sequence,
|
d: this.client.ws.sequence,
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,10 @@ class WebSocketPacketManager {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packet.op === Constants.OPCodes.HEARTBEAT_ACK) this.ws.client.emit('debug', 'Heartbeat acknowledged');
|
if (packet.op === Constants.OPCodes.HEARTBEAT_ACK) {
|
||||||
|
this.ws.client._pong(this.ws.client._pingTimestamp);
|
||||||
|
this.ws.client.emit('debug', 'Heartbeat acknowledged');
|
||||||
|
}
|
||||||
|
|
||||||
if (this.ws.status === Constants.Status.RECONNECTING) {
|
if (this.ws.status === Constants.Status.RECONNECTING) {
|
||||||
this.ws.reconnecting = false;
|
this.ws.reconnecting = false;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue