From 2ce185a6964d8cb041253b70cd397e70afb30c6f Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Fri, 16 Apr 2021 19:15:01 +0200 Subject: [PATCH] Update heartbeat.ts --- src/ws/heartbeat.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/ws/heartbeat.ts b/src/ws/heartbeat.ts index 29576ac4c..133b95982 100644 --- a/src/ws/heartbeat.ts +++ b/src/ws/heartbeat.ts @@ -12,20 +12,21 @@ export async function heartbeat(shardId: number, interval: number) { ws.log("HEARTBEATING_DETAILS", { shardId, interval, shard }); + // The first heartbeat is special so we send it without setInterval: https://discord.com/developers/docs/topics/gateway#heartbeating + await delay(Math.floor(shard.heartbeat.interval * Math.random())); + + if (shard.ws.readyState !== WebSocket.OPEN) return; + + shard.ws.send(JSON.stringify({ + op: DiscordGatewayOpcodes.Heartbeat, + d: shard.previousSequenceNumber, + })); + shard.heartbeat.keepAlive = true; shard.heartbeat.acknowledged = false; shard.heartbeat.lastSentAt = Date.now(); shard.heartbeat.interval = interval; - // The first heartbeat is special so we send it without setInterval: https://discord.com/developers/docs/topics/gateway#heartbeating - await delay(Math.floor(shard.heartbeat.interval * Math.random())); - - shard.queue.unshift({ - op: DiscordGatewayOpcodes.Heartbeat, - d: shard.previousSequenceNumber, - }); - ws.processQueue(shard.id); - shard.heartbeat.intervalId = setInterval(() => { ws.log("DEBUG", `Running setInterval in heartbeat file.`); const currentShard = ws.shards.get(shardId); @@ -50,11 +51,11 @@ export async function heartbeat(shardId: number, interval: number) { if (currentShard.ws.readyState !== WebSocket.OPEN) return; + currentShard.heartbeat.acknowledged = false; + currentShard.ws.send(JSON.stringify({ op: DiscordGatewayOpcodes.Heartbeat, d: currentShard.previousSequenceNumber, })); - - currentShard.heartbeat.acknowledged = false; }, shard.heartbeat.interval); }