aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'teleterm/src/server.rs')
-rw-r--r--teleterm/src/server.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/teleterm/src/server.rs b/teleterm/src/server.rs
index 1f8f442..1f565a2 100644
--- a/teleterm/src/server.rs
+++ b/teleterm/src/server.rs
@@ -489,16 +489,17 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static>
let username = conn.state.username().unwrap();
if let Some(stream_conn) = self.connections.get(&id) {
- let data = stream_conn
- .state
- .term()
- .map(|parser| parser.screen().contents_formatted())
- .ok_or_else(|| Error::InvalidWatchId {
- id: id.to_string(),
- })?;
+ let term = stream_conn.state.term().ok_or_else(|| {
+ Error::InvalidWatchId { id: id.to_string() }
+ })?;
+ let (rows, cols) = term.screen().size();
+ let data = term.screen().contents_formatted();
log::info!("{}: watch({}, {})", conn.id, username, id);
conn.state.watch(&id);
+ conn.send_message(crate::protocol::Message::resize(
+ crate::term::Size { rows, cols },
+ ));
conn.send_message(crate::protocol::Message::terminal_output(
&data,
));
@@ -585,6 +586,14 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static>
parser.set_size(size.rows, size.cols);
}
+ for watch_conn in self.watchers_mut() {
+ let watch_id = watch_conn.state.watch_id().unwrap();
+ if conn.id == watch_id {
+ watch_conn
+ .send_message(crate::protocol::Message::resize(size));
+ }
+ }
+
Ok(())
}