mirror of
https://github.com/neon443/ShhShell.git
synced 2026-03-11 13:26:16 +00:00
fix crash when disconnecting, fix close terminal on exit
This commit is contained in:
@@ -17,7 +17,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
|
|||||||
@Published var title: String = ""
|
@Published var title: String = ""
|
||||||
@Published var state: SSHState = .idle
|
@Published var state: SSHState = .idle
|
||||||
var connected: Bool {
|
var connected: Bool {
|
||||||
return checkConnected(state)
|
return ssh_channel_is_open(channel) == 1 && checkConnected(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Published var testSuceeded: Bool? = nil
|
@Published var testSuceeded: Bool? = nil
|
||||||
@@ -46,7 +46,6 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
|
|||||||
|
|
||||||
func go() {
|
func go() {
|
||||||
guard !connected else {
|
guard !connected else {
|
||||||
withAnimation { state = .idle }
|
|
||||||
disconnect()
|
disconnect()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,19 +28,16 @@ final class SSHTerminalView: TerminalView, Sendable, @preconcurrency TerminalVie
|
|||||||
sshQueue.async {
|
sshQueue.async {
|
||||||
Task {
|
Task {
|
||||||
guard let handler = await self.handler else { return }
|
guard let handler = await self.handler else { return }
|
||||||
|
|
||||||
while handler.connected {
|
while handler.connected {
|
||||||
if let read = handler.readFromChannel() {
|
if let read = handler.readFromChannel() {
|
||||||
// Task { [weak self] in
|
Task { @MainActor in
|
||||||
// guard let self else { return }
|
self.feed(text: read)
|
||||||
Task { @MainActor in
|
}
|
||||||
self.feed(text: read)
|
|
||||||
}
|
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
try? await Task.sleep(nanoseconds: 10_000_000) //10ms
|
Task {try? await Task.sleep(nanoseconds: 10_000_000) } //10ms
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
handler.disconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user