DiscordKit: wip gateway events handler
This commit is contained in:
@@ -5,18 +5,38 @@ import FoundationNetworking
|
|||||||
|
|
||||||
struct GatewayClient {
|
struct GatewayClient {
|
||||||
let gatewayURL: URL
|
let gatewayURL: URL
|
||||||
|
let ws: URLSessionWebSocketTask
|
||||||
|
|
||||||
func openConnection() async throws {
|
init(gatewayURL: URL) {
|
||||||
let ws = URLSession.shared.webSocketTask(with: gatewayURL.appending(component: "?v=10&encoding=json"))
|
self.gatewayURL = gatewayURL
|
||||||
|
ws = URLSession.shared.webSocketTask(with: gatewayURL.appending(component: "?v=10&encoding=json"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func openConnection() {
|
||||||
|
listen()
|
||||||
ws.resume()
|
ws.resume()
|
||||||
let message = try await ws.receive()
|
RunLoop.current.run()
|
||||||
guard case .string(let str) = message else { throw GatewayError.invalidMessage }
|
}
|
||||||
print(str)
|
|
||||||
let json = JSONDecoder()
|
func listen() {
|
||||||
let gwMessage = try json.decode(GatewayMessage.self, from: Data(str.utf8))
|
ws.receive { result in
|
||||||
dump(gwMessage)
|
defer { listen() }
|
||||||
guard case .hello(let hello) = gwMessage.d else { print("whoops"); return }
|
do {
|
||||||
dump(hello)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user