Don't spam reconnects on error
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user