From bcaa1d2354649b89c47277cecde55cc57cc7ca73 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Tue, 20 Jun 2023 11:21:07 +0200 Subject: [PATCH] ping: switch to async style because reasons --- damus/Nostr/RelayConnection.swift | 13 ++++++++----- damus/Nostr/WebSocket.swift | 12 ++++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/damus/Nostr/RelayConnection.swift b/damus/Nostr/RelayConnection.swift index 86a4f9fa..478da016 100644 --- a/damus/Nostr/RelayConnection.swift +++ b/damus/Nostr/RelayConnection.swift @@ -56,15 +56,18 @@ final class RelayConnection: ObservableObject { } func ping() { - socket.ping { err in - if err == nil { - self.last_pong = .now - } else { - print("pong failed, reconnecting \(self.url.id)") + Task { + do { + try await socket.ping() + } catch { + print("pong failed (\(error)), reconnecting \(self.url.id)") self.isConnected = false self.isConnecting = false self.reconnect_with_backoff() + return } + + self.last_pong = .now } } diff --git a/damus/Nostr/WebSocket.swift b/damus/Nostr/WebSocket.swift index f25d5ffd..bf58dc12 100644 --- a/damus/Nostr/WebSocket.swift +++ b/damus/Nostr/WebSocket.swift @@ -45,8 +45,16 @@ final class WebSocket: NSObject, URLSessionWebSocketDelegate { self.session = session } - func ping(receiveHandler: @escaping (Error?) -> Void) { - self.webSocketTask.sendPing(pongReceiveHandler: receiveHandler) + func ping() async throws -> () { + return try await withCheckedThrowingContinuation { cont in + self.webSocketTask.sendPing { err in + if let err { + cont.resume(throwing: err) + } else { + cont.resume(returning: ()) + } + } + } } func connect() {