Reconnect on connection failure
This commit is contained in:
@@ -52,8 +52,7 @@ class HomeAssistantServer: Server
|
||||
|
||||
print("Websocket not running: \(String(describing: websocketTask.error))")
|
||||
} catch {
|
||||
print("Websocket Error: \(error)")
|
||||
self.connectionStatus = .error
|
||||
encounteredWebsocketError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,18 +152,26 @@ class HomeAssistantServer: Server
|
||||
}
|
||||
}
|
||||
|
||||
Task {
|
||||
do {
|
||||
let encodedMessage = try JSONEncoder().encode(message)
|
||||
let jsonString = String(data: encodedMessage, encoding: .utf8)!
|
||||
websocketTask?.send(.string(jsonString)) { error in
|
||||
guard let error else { return }
|
||||
print("Websocket send error: \(error)")
|
||||
}
|
||||
try await websocketTask?.send(.string(jsonString))
|
||||
} catch {
|
||||
print("Error sending message: \(error)")
|
||||
encounteredWebsocketError(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func encounteredWebsocketError(_ error: any Error) {
|
||||
print("Websocket Error: \(error)")
|
||||
self.connectionStatus = .error
|
||||
self.websocketTask?.cancel()
|
||||
self.websocketTask = nil
|
||||
// reconnects the next time we're refreshed.
|
||||
}
|
||||
|
||||
private func decodeEvent(_ data: Data) async {
|
||||
do {
|
||||
@@ -311,9 +318,9 @@ typealias MessageID = Int64?
|
||||
|
||||
extension MessageID
|
||||
{
|
||||
private static var counter: Int64 = 0
|
||||
private static var counter: Int64 = 1
|
||||
static func next() -> Self {
|
||||
Self.counter += 1
|
||||
OSAtomicIncrement64(&Self.counter)
|
||||
return Self.counter
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user