DiscordKit: wip gateway events handler

This commit is contained in:
2026-03-13 10:20:27 -04:00
parent 490f1e480d
commit c6b92d968a

View File

@@ -5,18 +5,38 @@ import FoundationNetworking
struct GatewayClient {
let gatewayURL: URL
let ws: URLSessionWebSocketTask
func openConnection() async throws {
let ws = URLSession.shared.webSocketTask(with: gatewayURL.appending(component: "?v=10&encoding=json"))
init(gatewayURL: URL) {
self.gatewayURL = gatewayURL
ws = URLSession.shared.webSocketTask(with: gatewayURL.appending(component: "?v=10&encoding=json"))
}
func openConnection() {
listen()
ws.resume()
let message = try await ws.receive()
guard case .string(let str) = message else { throw GatewayError.invalidMessage }
print(str)
let json = JSONDecoder()
let gwMessage = try json.decode(GatewayMessage.self, from: Data(str.utf8))
dump(gwMessage)
guard case .hello(let hello) = gwMessage.d else { print("whoops"); return }
dump(hello)
RunLoop.current.run()
}
func listen() {
ws.receive { result in
defer { listen() }
do {
if case .failure(let err) = result { throw err }
guard case .success(let message) = result else { return }
guard case .string(let str) = message else { throw GatewayError.invalidMessage }
let json = JSONDecoder()
let gwMessage = try json.decode(GatewayMessage.self, from: Data(str.utf8))
switch gwMessage.d {
case .hello(let hello):
dump(hello)
case .none:
return
}
} catch {
print(error)
}
}
}
}