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 { while !Task.isCancelled {
try await sendHeartbeat() try await sendHeartbeat()
try await Task.sleep(for: .milliseconds(helloMessage.heartbeat_interval)) try await Task.sleep(for: .milliseconds(helloMessage.heartbeat_interval))
if await !hbAck {
// haven't heard back
await ws.cancel()
}
} }
} catch { } catch {
print("Heartbeat task canceled") print("Heartbeat task canceled")
@@ -127,7 +132,8 @@ actor GatewayClient {
private func attemptResume() async throws { private func attemptResume() async throws {
guard 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 resumeURL = resumeURL,
let sessionID = sessionID, let sessionID = sessionID,
let sequenceNum = sequenceNum let sequenceNum = sequenceNum
@@ -164,10 +170,6 @@ actor GatewayClient {
hbAck = false hbAck = false
let hbMessage = "{\"op\":1,\"d\":\(sequenceNum == nil ? "null" : String(sequenceNum!))}" let hbMessage = "{\"op\":1,\"d\":\(sequenceNum == nil ? "null" : String(sequenceNum!))}"
try await ws.send(.string(hbMessage)) 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> { var events: AsyncStream<GatewayPayload> {
+8
View File
@@ -23,7 +23,11 @@ struct Zundamon {
try await bot.connect() 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 { for await event in await bot.events {
print(i)
switch event { switch event {
case .messageCreate(let event): case .messageCreate(let event):
try await MessageHandler(ctx: event, client: bot.client).handle() try await MessageHandler(ctx: event, client: bot.client).handle()
@@ -31,6 +35,10 @@ struct Zundamon {
continue continue
} }
} }
}
}
}
print("bottom of main") print("bottom of main")
} }
} }