6 个版本 (3 个破坏性更新)
0.4.1 | 2023 年 1 月 29 日 |
---|---|
0.4.0 | 2023 年 1 月 27 日 |
0.3.1 | 2023 年 1 月 25 日 |
0.2.0 | 2023 年 1 月 24 日 |
0.1.0 | 2023 年 1 月 23 日 |
在 命令行界面 中排名 750
每月下载 23 次
40KB
919 行
ssh_ui
ssh_ui
帮助您轻松地将基于 cursive 的终端用户界面 (TUI) 转换为可以通过 ssh 访问的应用程序。设计用于简化 BBS 系统或基于 ssh 的游戏的创建,ssh_ui
以最小意见的方法打开 TUI 以进行远程连接,而无需您使用 cursive
。ssh 服务器实现由 russh 提供。
最简单的基于 ssh_ui
的应用程序的 main
函数看起来像这样
#[tokio::main]
async fn main() {
let key_pair = KeyPair::generate_rsa(3072, SignatureHash::SHA2_256).unwrap();
let mut server = AppServer::new_with_port(2222);
let app = DialogApp {};
server.run(&[key_pair], Arc::new(app)).await.unwrap();
}
首先,它生成一个新的密钥对(但您应该从磁盘加载几个用于面向用户的安装)。然后,它在端口 2222 上初始化一个新的 AppServer
和一个新的 DialogApp 实例,然后调用
AppServer::run
以在指定的端口上监听传入的连接。接下来,让我们看看是什么让 AppServer
运行起来。
struct DialogApp {}
impl App for DialogApp {
fn on_load(&mut self) -> Result<(), Box<dyn Error>> {
Ok(())
}
fn new_session(&self) -> Box<dyn AppSession> {
Box::new(DialogAppSession::new())
}
}
这里所做的只是当有新的 ssh 连接传入时提供一个新的 DialogAppSession
。DialogAppSession
如下实现
struct DialogAppSession {}
impl DialogAppSession {
pub fn new() -> Self {
Self {}
}
}
impl AppSession for DialogAppSession {
fn on_start(
&mut self,
_siv: &mut Cursive,
_session_handle: SessionHandle,
_pub_key: PublicKey,
_force_refresh_sender: Sender<()>,
) -> Result<Box<dyn cursive::View>, Box<dyn Error>> {
println!("on_start");
Ok(Box::new(
Dialog::around(TextView::new("Hello over ssh!"))
.title("ssh_ui")
.button("Quit", |s| s.quit()),
))
}
}
这里是实际创建并返回给 ssh_ui
的 cursive
TUI。您可以返回任何 TUI,而 ssh_ui
将负责将其提供给客户端。
贡献
如果您想使用 ssh_ui
但它并不完全符合您的需求,请随时在 GitHub 仓库 上打开一个问题或拉取请求。
依赖项
~21–36MB
~601K SLoC