Don't spam reconnects on error

This commit is contained in:
William Casarin
2023-05-03 06:36:33 -07:00
parent 91fc0039eb
commit 80ea37a102

View File

@@ -42,6 +42,7 @@ final class RelayConnection {
private(set) var isConnecting = false private(set) var isConnecting = false
private(set) var last_connection_attempt: TimeInterval = 0 private(set) var last_connection_attempt: TimeInterval = 0
private(set) var backoff: TimeInterval = 1.0
private lazy var socket = WebSocket(url.url) private lazy var socket = WebSocket(url.url)
private var subscriptionToken: AnyCancellable? private var subscriptionToken: AnyCancellable?
@@ -96,6 +97,7 @@ final class RelayConnection {
private func receive(event: WebSocketEvent) { private func receive(event: WebSocketEvent) {
switch event { switch event {
case .connected: case .connected:
backoff = 1.0
self.isConnected = true self.isConnected = true
self.isConnecting = false self.isConnecting = false
case .message(let message): case .message(let message):
@@ -111,7 +113,8 @@ final class RelayConnection {
print("⚠️ Warning: RelayConnection (\(self.url)) error: \(error)") print("⚠️ Warning: RelayConnection (\(self.url)) error: \(error)")
isConnected = false isConnected = false
isConnecting = false isConnecting = false
reconnect() backoff *= 1.5
reconnect_in(after: backoff)
} }
self.handleEvent(.ws_event(event)) self.handleEvent(.ws_event(event))
} }
@@ -124,6 +127,12 @@ final class RelayConnection {
connect() connect()
} }
func reconnect_in(after: TimeInterval) {
DispatchQueue.main.asyncAfter(deadline: .now() + after) {
self.reconnect()
}
}
private func receive(message: URLSessionWebSocketTask.Message) { private func receive(message: URLSessionWebSocketTask.Message) {
switch message { switch message {
case .string(let messageString): case .string(let messageString):