fix: harden heartbeat acks + gateway reconnect

This commit is contained in:
Peter Steinberger
2025-12-27 20:02:27 +00:00
parent 3a485a14a4
commit 91c9859000
7 changed files with 59 additions and 23 deletions

View File

@@ -182,6 +182,7 @@ final class GatewayProcessManager {
self.existingGatewayDetails = details
self.status = .attachedExisting(details: details)
self.appendLog("[gateway] using existing instance: \(details)\n")
self.refreshControlChannelIfNeeded(reason: "attach existing")
self.refreshLog()
return true
} catch {
@@ -289,6 +290,7 @@ final class GatewayProcessManager {
let instance = await PortGuardian.shared.describe(port: port)
let details = instance.map { "pid \($0.pid)" }
self.status = .running(details: details)
self.refreshControlChannelIfNeeded(reason: "gateway started")
self.refreshLog()
return
} catch {
@@ -307,6 +309,17 @@ final class GatewayProcessManager {
}
}
private func refreshControlChannelIfNeeded(reason: String) {
switch ControlChannel.shared.state {
case .connected, .connecting:
return
case .disconnected, .degraded:
break
}
self.appendLog("[gateway] refreshing control channel (\(reason))\n")
Task { await ControlChannel.shared.configure() }
}
func clearLog() {
self.log = ""
try? FileManager.default.removeItem(atPath: LogLocator.launchdGatewayLogPath)