From e95fcc9305e0ec769c7fe52eb9bf6bed52f91184 Mon Sep 17 00:00:00 2001 From: ITOH <72305210+itohatweb@users.noreply.github.com> Date: Thu, 15 Apr 2021 12:01:25 +0200 Subject: [PATCH] check if dc ack beat --- src/ws/heartbeat.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ws/heartbeat.ts b/src/ws/heartbeat.ts index 2cd43193a..79b010242 100644 --- a/src/ws/heartbeat.ts +++ b/src/ws/heartbeat.ts @@ -1,4 +1,5 @@ import { DiscordGatewayOpcodes } from "../types/codes/gateway_opcodes.ts"; +import { identify } from "./identify.ts"; import { ws } from "./ws.ts"; export function heartbeat(shardId: number, interval: number) { @@ -10,7 +11,7 @@ export function heartbeat(shardId: number, interval: number) { ws.log("HEARTBEATING_DETAILS", { shardId, interval, shard }); shard.heartbeat.keepAlive = true; - shard.heartbeat.acknowledged = false; + shard.heartbeat.acknowledged = true; shard.heartbeat.lastSentAt = Date.now(); shard.heartbeat.interval = interval; @@ -38,6 +39,11 @@ function sendHeartbeat(shardId: number) { return; } + if (!currentShard.heartbeat.acknowledged) { + currentShard.ws.close(1001, "Did not receive an ACK in time."); + return identify(shardId, ws.maxShards); + } + if (currentShard.ws.readyState !== WebSocket.OPEN) { currentShard.heartbeat.timeoutId = setTimeout( () => sendHeartbeat(shardId), @@ -51,6 +57,8 @@ function sendHeartbeat(shardId: number) { d: currentShard.previousSequenceNumber, })); + currentShard.heartbeat.acknowledged = false; + currentShard.heartbeat.timeoutId = setTimeout( () => sendHeartbeat(shardId), currentShard.heartbeat.interval,