use multiple threads to respond to messages

This commit is contained in:
2026-03-25 17:44:34 -04:00
parent a1ed1564b9
commit 32c9f0fd6c
2 changed files with 21 additions and 11 deletions
+7 -5
View File
@@ -44,6 +44,11 @@ actor GatewayClient {
while !Task.isCancelled {
try await sendHeartbeat()
try await Task.sleep(for: .milliseconds(helloMessage.heartbeat_interval))
if await !hbAck {
// haven't heard back
await ws.cancel()
}
}
} catch {
print("Heartbeat task canceled")
@@ -127,7 +132,8 @@ actor GatewayClient {
private func attemptResume() async throws {
guard
ws.closeCode.rawValue != 4004 && ws.closeCode.rawValue < 4010,
ws.closeCode.rawValue != 4004 && ws.closeCode.rawValue != 1000 &&
ws.closeCode.rawValue != 1001 && ws.closeCode.rawValue < 4010,
let resumeURL = resumeURL,
let sessionID = sessionID,
let sequenceNum = sequenceNum
@@ -164,10 +170,6 @@ actor GatewayClient {
hbAck = false
let hbMessage = "{\"op\":1,\"d\":\(sequenceNum == nil ? "null" : String(sequenceNum!))}"
try await ws.send(.string(hbMessage))
try await Task.sleep(for: .seconds(5))
if !hbAck {
ws.cancel(with: .normalClosure, reason: nil)
}
}
var events: AsyncStream<GatewayPayload> {
+8
View File
@@ -23,7 +23,11 @@ struct Zundamon {
try await bot.connect()
await withThrowingTaskGroup(of: Void.self) { group in
for i in 0...5 {
group.addTask {
for await event in await bot.events {
print(i)
switch event {
case .messageCreate(let event):
try await MessageHandler(ctx: event, client: bot.client).handle()
@@ -31,6 +35,10 @@ struct Zundamon {
continue
}
}
}
}
}
print("bottom of main")
}
}