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