check if dc ack beat

This commit is contained in:
ITOH
2021-04-15 12:01:25 +02:00
parent e8a1bf68f8
commit e95fcc9305

View File

@@ -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,