aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-09-02 18:15:29 -0400
committerJesse Luehrs <doy@tozt.net>2019-09-02 18:15:29 -0400
commit6ca82b84391f5f74e02cfb3a8c2aeae272505090 (patch)
tree533bac073071423006ff2ef0b61bd69d60a520be
parentefed7b2908d404b2f0894cd78a7bda82bcf9a6ae (diff)
downloadteleterm-6ca82b84391f5f74e02cfb3a8c2aeae272505090.tar.gz
teleterm-6ca82b84391f5f74e02cfb3a8c2aeae272505090.zip
respond to heartbeats
-rw-r--r--src/cmd/cast.rs15
-rw-r--r--src/cmd/server.rs5
2 files changed, 19 insertions, 1 deletions
diff --git a/src/cmd/cast.rs b/src/cmd/cast.rs
index c27483b..c4ed386 100644
--- a/src/cmd/cast.rs
+++ b/src/cmd/cast.rs
@@ -5,8 +5,14 @@ pub enum Error {
#[snafu(display("failed to connect: {}", source))]
Connect { source: std::io::Error },
+ #[snafu(display("failed to read message: {}", source))]
+ Read { source: crate::protocol::Error },
+
#[snafu(display("failed to write message: {}", source))]
Write { source: crate::protocol::Error },
+
+ #[snafu(display("failed to read message: unexpected message received"))]
+ UnexpectedMessage,
}
pub type Result<T> = std::result::Result<T, Error>;
@@ -29,5 +35,14 @@ fn run_impl() -> Result<()> {
crate::protocol::Message::heartbeat()
.write(&sock)
.context(Write)?;
+ let res = crate::protocol::Message::read(&sock).context(Read)?;
+ match res {
+ crate::protocol::Message::Heartbeat => {
+ println!("received heartbeat response");
+ }
+ _ => {
+ return Err(Error::UnexpectedMessage);
+ }
+ }
}
}
diff --git a/src/cmd/server.rs b/src/cmd/server.rs
index 218e5a0..d36ac57 100644
--- a/src/cmd/server.rs
+++ b/src/cmd/server.rs
@@ -377,7 +377,10 @@ impl ConnectionHandler {
"got a heartbeat from {}",
meta.username.as_ref().unwrap()
);
- Ok(None)
+ let msg = crate::protocol::Message::heartbeat();
+ Ok(Some(Box::new(move |s| {
+ Box::new(msg.write_async(s).context(WriteMessage))
+ })))
}
crate::protocol::Message::TerminalOutput { data } => {
meta.saved_data.extend_from_slice(&data);