mirror of
https://github.com/discordeno/discordeno.git
synced 2026-09-17 08:47:22 +00:00
working finally
This commit is contained in:
+11
-12
@@ -1,6 +1,6 @@
|
||||
import { endpoints } from "../constants/discord.ts"
|
||||
import DiscordRequestManager from "./discord-request-manager.ts"
|
||||
import { DiscordBotGatewayData, DiscordPayload, DiscordHeartbeatPayload, GatewayOpcode, StatusType } from "../types/discord.ts"
|
||||
import { DiscordBotGatewayData, DiscordPayload, DiscordHeartbeatPayload, GatewayOpcode } from "../types/discord.ts"
|
||||
import { spawnShards } from "./sharding-manager.ts"
|
||||
import {
|
||||
connectWebSocket,
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
} from "https://deno.land/std/ws/mod.ts"
|
||||
import { ClientOptions, FulfilledClientOptions } from "../types/options.ts"
|
||||
import { CollectedMessageType } from "../types/message-type.ts"
|
||||
import { sendConstantHeartbeats } from "./gateway.ts"
|
||||
import { send_constant_heartbeats, update_previous_sequence_number } from "./gateway.ts"
|
||||
|
||||
const defaultOptions = {
|
||||
properties: {
|
||||
@@ -50,7 +50,7 @@ class Client {
|
||||
}
|
||||
|
||||
async bootstrap() {
|
||||
const data = await this.discordRequestManager.get(endpoints.GATEWAY_BOT) as DiscordBotGatewayData
|
||||
const data = (await this.discordRequestManager.get(endpoints.GATEWAY_BOT)) as DiscordBotGatewayData
|
||||
const socket = await connectWebSocket(data.url)
|
||||
this.collectMessages(socket)
|
||||
// Intial identify with the gateway
|
||||
@@ -68,13 +68,11 @@ class Client {
|
||||
)
|
||||
|
||||
for await (const message of this.connect(socket, data)) {
|
||||
console.log("mymessage", message)
|
||||
if (message.data?.op === GatewayOpcode.Hello) {
|
||||
await message.action
|
||||
}
|
||||
if (message.data?.op === GatewayOpcode.Hello) await message.action
|
||||
// if (message.data?.op === GatewayOpcode.HeartbeatACK) return this.options.eventHandlers.heartbeat()
|
||||
|
||||
if (message.data?.t === 'READY') {
|
||||
console.log('ready event was received')
|
||||
if (message.data?.t === "READY") {
|
||||
console.log("ready event was received")
|
||||
// this.options.eventHandlers.ready()
|
||||
}
|
||||
}
|
||||
@@ -130,14 +128,15 @@ class Client {
|
||||
}
|
||||
|
||||
handleDiscordPayload(data: DiscordPayload, socket: WebSocket) {
|
||||
// Update the sequence number if it is present so that heartbeating can be accurate
|
||||
if (data.s) update_previous_sequence_number(data.s)
|
||||
|
||||
switch (data.op) {
|
||||
case GatewayOpcode.Hello:
|
||||
sendConstantHeartbeats(socket, (data.d as DiscordHeartbeatPayload).heartbeat_interval, data.s)
|
||||
send_constant_heartbeats(socket, (data.d as DiscordHeartbeatPayload).heartbeat_interval)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
export default Client
|
||||
|
||||
+17
-6
@@ -2,12 +2,23 @@ import { WebSocket } from "https://deno.land/std/ws/mod.ts"
|
||||
import { GatewayOpcode } from "../types/discord.ts"
|
||||
import { delay } from "https://deno.land/std/util/async.ts"
|
||||
|
||||
export const sendConstantHeartbeats = async (socket: WebSocket, interval: number, previousSequenceNumber: number | null = null) => {
|
||||
// Discord requests null if no number has yet been sent by discord
|
||||
let previous_sequence_number: number | null = null
|
||||
|
||||
// TODO: If a client does not receive a heartbeat ack between its attempts at sending heartbeats, it should immediately terminate the connection with a non-1000 close code, reconnect, and attempt to resume.
|
||||
export const send_constant_heartbeats = async (
|
||||
socket: WebSocket,
|
||||
interval: number
|
||||
) => {
|
||||
console.log(interval)
|
||||
await delay(interval)
|
||||
|
||||
if (previousSequenceNumber) previousSequenceNumber += 1
|
||||
|
||||
console.log('past interval')
|
||||
// TODO: If the initial seq num is null, this will make it forever null until a restart. Is this good?
|
||||
socket.send(JSON.stringify({ op: GatewayOpcode.Heartbeat, d: previousSequenceNumber }))
|
||||
sendConstantHeartbeats(socket, interval, previousSequenceNumber)
|
||||
socket.send(JSON.stringify({ op: GatewayOpcode.Heartbeat, d: previous_sequence_number }))
|
||||
console.log(previous_sequence_number, 'previous')
|
||||
send_constant_heartbeats(socket, interval)
|
||||
}
|
||||
|
||||
export const update_previous_sequence_number = (sequence: number) => {
|
||||
previous_sequence_number = sequence
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user