dont use multiple threads to respond to messages
This commit is contained in:
@@ -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> {
|
||||||
|
|||||||
Reference in New Issue
Block a user