feat: 支持自定义心跳间隔

This commit is contained in:
hstyi
2025-01-02 15:52:06 +08:00
committed by hstyi
parent db3e15508c
commit 38496b9f1b
7 changed files with 17 additions and 3 deletions

View File

@@ -31,6 +31,7 @@ class EditHostOptionsPane(private val host: Host) : HostOptionsPane() {
terminalOption.charsetComboBox.selectedItem = host.options.encoding terminalOption.charsetComboBox.selectedItem = host.options.encoding
terminalOption.environmentTextArea.text = host.options.env terminalOption.environmentTextArea.text = host.options.env
terminalOption.startupCommandTextField.text = host.options.startupCommand terminalOption.startupCommandTextField.text = host.options.startupCommand
terminalOption.heartbeatIntervalTextField.value = host.options.heartbeatInterval
tunnelingOption.tunnelings.addAll(host.tunnelings) tunnelingOption.tunnelings.addAll(host.tunnelings)
} }

View File

@@ -58,6 +58,10 @@ data class Options(
* 连接成功后立即发送命令 * 连接成功后立即发送命令
*/ */
val startupCommand: String = StringUtils.EMPTY, val startupCommand: String = StringUtils.EMPTY,
/**
* SSH 心跳间隔
*/
val heartbeatInterval: Int = 30
) { ) {
companion object { companion object {
val Default = Options() val Default = Options()

View File

@@ -67,7 +67,8 @@ open class HostOptionsPane : OptionsPane() {
val options = Options.Default.copy( val options = Options.Default.copy(
encoding = terminalOption.charsetComboBox.selectedItem as String, encoding = terminalOption.charsetComboBox.selectedItem as String,
env = terminalOption.environmentTextArea.text, env = terminalOption.environmentTextArea.text,
startupCommand = terminalOption.startupCommandTextField.text startupCommand = terminalOption.startupCommandTextField.text,
heartbeatInterval = (terminalOption.heartbeatIntervalTextField.value ?: 30) as Int,
) )
return Host( return Host(
@@ -508,6 +509,7 @@ open class HostOptionsPane : OptionsPane() {
protected inner class TerminalOption : JPanel(BorderLayout()), Option { protected inner class TerminalOption : JPanel(BorderLayout()), Option {
val charsetComboBox = JComboBox<String>() val charsetComboBox = JComboBox<String>()
val startupCommandTextField = OutlineTextField() val startupCommandTextField = OutlineTextField()
val heartbeatIntervalTextField = IntSpinner(30, minimum = 3, maximum = Int.MAX_VALUE)
val environmentTextArea = FixedLengthTextArea(2048) val environmentTextArea = FixedLengthTextArea(2048)
@@ -563,7 +565,7 @@ open class HostOptionsPane : OptionsPane() {
private fun getCenterComponent(): JComponent { private fun getCenterComponent(): JComponent {
val layout = FormLayout( val layout = FormLayout(
"left:pref, $formMargin, default:grow, $formMargin, default:grow", "left:pref, $formMargin, default:grow, $formMargin, default:grow",
"pref, $formMargin, pref, $formMargin, pref, $formMargin" "pref, $formMargin, pref, $formMargin, pref, $formMargin, pref"
) )
var rows = 1 var rows = 1
@@ -571,6 +573,8 @@ open class HostOptionsPane : OptionsPane() {
val panel = FormBuilder.create().layout(layout) val panel = FormBuilder.create().layout(layout)
.add("${I18n.getString("termora.new-host.terminal.encoding")}:").xy(1, rows) .add("${I18n.getString("termora.new-host.terminal.encoding")}:").xy(1, rows)
.add(charsetComboBox).xy(3, rows).apply { rows += step } .add(charsetComboBox).xy(3, rows).apply { rows += step }
.add("${I18n.getString("termora.new-host.terminal.heartbeat-interval")}:").xy(1, rows)
.add(heartbeatIntervalTextField).xy(3, rows).apply { rows += step }
.add("${I18n.getString("termora.new-host.terminal.startup-commands")}:").xy(1, rows) .add("${I18n.getString("termora.new-host.terminal.startup-commands")}:").xy(1, rows)
.add(startupCommandTextField).xy(3, rows).apply { rows += step } .add(startupCommandTextField).xy(3, rows).apply { rows += step }
.add("${I18n.getString("termora.new-host.terminal.env")}:").xy(1, rows) .add("${I18n.getString("termora.new-host.terminal.env")}:").xy(1, rows)

View File

@@ -19,6 +19,7 @@ import org.eclipse.jgit.transport.sshd.ProxyData
import java.net.InetSocketAddress import java.net.InetSocketAddress
import java.net.Proxy import java.net.Proxy
import java.time.Duration import java.time.Duration
import kotlin.math.max
object SshClients { object SshClients {
private val timeout = Duration.ofSeconds(30) private val timeout = Duration.ofSeconds(30)
@@ -83,7 +84,8 @@ object SshClients {
} }
val sshClient = builder.build() as JGitSshClient val sshClient = builder.build() as JGitSshClient
CoreModuleProperties.HEARTBEAT_INTERVAL.set(sshClient, timeout) val heartbeatInterval = max(host.options.heartbeatInterval, 3)
CoreModuleProperties.HEARTBEAT_INTERVAL.set(sshClient, Duration.ofSeconds(heartbeatInterval.toLong()))
sshClient.setKeyPasswordProviderFactory { IdentityPasswordProvider(CredentialsProvider.getDefault()) } sshClient.setKeyPasswordProviderFactory { IdentityPasswordProvider(CredentialsProvider.getDefault()) }
if (host.proxy.type != ProxyType.No) { if (host.proxy.type != ProxyType.No) {

View File

@@ -127,6 +127,7 @@ termora.new-host.proxy=Proxy
termora.new-host.terminal=${termora.settings.terminal} termora.new-host.terminal=${termora.settings.terminal}
termora.new-host.terminal.encoding=Encoding termora.new-host.terminal.encoding=Encoding
termora.new-host.terminal.heartbeat-interval=Heartbeat Interval
termora.new-host.terminal.startup-commands=Startup Command termora.new-host.terminal.startup-commands=Startup Command
termora.new-host.terminal.env=Environment termora.new-host.terminal.env=Environment

View File

@@ -118,6 +118,7 @@ termora.new-host.proxy=代理
termora.new-host.terminal=${termora.settings.terminal} termora.new-host.terminal=${termora.settings.terminal}
termora.new-host.terminal.encoding=编码 termora.new-host.terminal.encoding=编码
termora.new-host.terminal.heartbeat-interval=心跳间隔
termora.new-host.terminal.startup-commands=启动命令 termora.new-host.terminal.startup-commands=启动命令
termora.new-host.terminal.env=环境 termora.new-host.terminal.env=环境

View File

@@ -116,6 +116,7 @@ termora.new-host.proxy=代理
termora.new-host.terminal=${termora.settings.terminal} termora.new-host.terminal=${termora.settings.terminal}
termora.new-host.terminal.encoding=編碼 termora.new-host.terminal.encoding=編碼
termora.new-host.terminal.startup-commands=啟動命令 termora.new-host.terminal.startup-commands=啟動命令
termora.new-host.terminal.heartbeat-interval=心跳間隔
termora.new-host.terminal.env=環境 termora.new-host.terminal.env=環境
termora.new-host.tunneling=隧道 termora.new-host.tunneling=隧道