Reconnect on connection failure

This commit is contained in:
2025-06-19 15:00:19 -07:00
parent 7e10083671
commit 397add6c8c

View File

@@ -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,19 +152,27 @@ class HomeAssistantServer: Server
}
}
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)")
Task {
do {
let encodedMessage = try JSONEncoder().encode(message)
let jsonString = String(data: encodedMessage, encoding: .utf8)!
try await websocketTask?.send(.string(jsonString))
} catch {
print("Error sending message: \(error)")
encounteredWebsocketError(error)
}
} catch {
print("Error sending message: \(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 {
let decoder = JSONDecoder()
@@ -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
}
}