diff --git a/ShhShell/SSH/SSHHandler.swift b/ShhShell/SSH/SSHHandler.swift index fd68dce..a199d71 100644 --- a/ShhShell/SSH/SSHHandler.swift +++ b/ShhShell/SSH/SSHHandler.swift @@ -17,7 +17,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject { @Published var title: String = "" @Published var state: SSHState = .idle var connected: Bool { - return checkConnected(state) + return ssh_channel_is_open(channel) == 1 && checkConnected(state) } @Published var testSuceeded: Bool? = nil @@ -46,7 +46,6 @@ class SSHHandler: @unchecked Sendable, ObservableObject { func go() { guard !connected else { - withAnimation { state = .idle } disconnect() return } diff --git a/ShhShell/Views/Terminal/SSHTerminalView.swift b/ShhShell/Views/Terminal/SSHTerminalView.swift index fa03a8c..50fa4d1 100644 --- a/ShhShell/Views/Terminal/SSHTerminalView.swift +++ b/ShhShell/Views/Terminal/SSHTerminalView.swift @@ -28,19 +28,16 @@ final class SSHTerminalView: TerminalView, Sendable, @preconcurrency TerminalVie sshQueue.async { Task { guard let handler = await self.handler else { return } - while handler.connected { if let read = handler.readFromChannel() { -// Task { [weak self] in -// guard let self else { return } - Task { @MainActor in - self.feed(text: read) - } -// } + Task { @MainActor in + self.feed(text: read) + } } else { - try? await Task.sleep(nanoseconds: 10_000_000) //10ms + Task {try? await Task.sleep(nanoseconds: 10_000_000) } //10ms } } + handler.disconnect() } } }