feat(terminal): add WebGL renderer and addon APIs
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
use std::io::{Read, Write};
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use portable_pty::{
|
||||
ChildKiller, CommandBuilder, MasterPty, PtySize, native_pty_system,
|
||||
};
|
||||
use portable_pty::{ChildKiller, CommandBuilder, MasterPty, PtySize, native_pty_system};
|
||||
use tokio::sync::mpsc;
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
@@ -43,9 +41,7 @@ pub struct PtySession {
|
||||
}
|
||||
|
||||
impl PtySession {
|
||||
pub fn spawn(
|
||||
size: TerminalSize,
|
||||
) -> Result<(Self, mpsc::UnboundedReceiver<Vec<u8>>), String> {
|
||||
pub fn spawn(size: TerminalSize) -> Result<(Self, mpsc::UnboundedReceiver<Vec<u8>>), String> {
|
||||
let pty_system = native_pty_system();
|
||||
let pair = pty_system
|
||||
.openpty(size.into_pty_size())
|
||||
@@ -89,9 +85,8 @@ impl PtySession {
|
||||
}
|
||||
}
|
||||
Err(error) => {
|
||||
let _ = tx.send(
|
||||
format!("\r\n[terminal read error] {error}\r\n").into_bytes(),
|
||||
);
|
||||
let _ =
|
||||
tx.send(format!("\r\n[terminal read error] {error}\r\n").into_bytes());
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -103,12 +98,11 @@ impl PtySession {
|
||||
.and_then(|mut child| child.wait().ok())
|
||||
.map(|status| status.exit_code() as i32);
|
||||
|
||||
let payload = serde_json::to_vec(&app::terminal::protocol::ServerTerminalMessage::Exit {
|
||||
code: exit_code,
|
||||
})
|
||||
.unwrap_or_else(|_| {
|
||||
br#"{"type":"exit","code":null}"#.to_vec()
|
||||
});
|
||||
let payload =
|
||||
serde_json::to_vec(&app::terminal::protocol::ServerTerminalMessage::Exit {
|
||||
code: exit_code,
|
||||
})
|
||||
.unwrap_or_else(|_| br#"{"type":"exit","code":null}"#.to_vec());
|
||||
let _ = tx.send(payload);
|
||||
});
|
||||
|
||||
|
||||
@@ -67,8 +67,7 @@ async fn handle_terminal_socket(socket: WebSocket) {
|
||||
match client_message {
|
||||
ClientTerminalMessage::Input { data } => {
|
||||
if let Err(error) = session.write(&data) {
|
||||
let _ = server_tx
|
||||
.send(ServerTerminalMessage::Error { message: error });
|
||||
let _ = server_tx.send(ServerTerminalMessage::Error { message: error });
|
||||
}
|
||||
}
|
||||
ClientTerminalMessage::Resize {
|
||||
@@ -83,8 +82,7 @@ async fn handle_terminal_socket(socket: WebSocket) {
|
||||
pixel_width,
|
||||
pixel_height,
|
||||
}) {
|
||||
let _ = server_tx
|
||||
.send(ServerTerminalMessage::Error { message: error });
|
||||
let _ = server_tx.send(ServerTerminalMessage::Error { message: error });
|
||||
}
|
||||
}
|
||||
ClientTerminalMessage::Ping => {
|
||||
|
||||
Reference in New Issue
Block a user