From c9c85aacabbb1309cd7871d1e393ce688e6e33f1 Mon Sep 17 00:00:00 2001 From: Fabian Freyer Date: Fri, 29 Mar 2019 10:57:11 -0400 Subject: [PATCH] Handle child death --- src/event.rs | 6 ++++++ src/lib.rs | 13 +++++++++++++ static/term.html | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/src/event.rs b/src/event.rs index 91eb907..83ab380 100644 --- a/src/event.rs +++ b/src/event.rs @@ -66,3 +66,9 @@ impl From<&str> for IO { Self(s.into()) } } + +pub struct ChildDied(); + +impl Message for ChildDied { + type Result = (); +} diff --git a/src/lib.rs b/src/lib.rs index 92076ae..2d8ea03 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -169,6 +169,16 @@ impl StreamHandler for Websocket { } } +impl Handler for Websocket { + type Result = (); + + fn handle(&mut self, _msg: event::ChildDied, ctx: &mut ::Context) { + trace!("Websocket <- ChildDied"); + ctx.close(None); + ctx.stop(); + } +} + /// Represents a PTY backenActix WebSocket actor.d with attached child pub struct Terminal { pty_write: Option, @@ -246,6 +256,9 @@ impl Actor for Terminal { Err(e) => error!("Could not kill child with PID {}: {}", child.id(), e), }; + // Notify the websocket that the child died. + self.ws.do_send(event::ChildDied()); + Running::Stop } diff --git a/static/term.html b/static/term.html index 0d8d8ee..84d3c8c 100644 --- a/static/term.html +++ b/static/term.html @@ -40,6 +40,12 @@ SPDX-License-Identifier: BSD-3-Clause term.fit(); }); + sock.addEventListener('close', function() { + term.writeln(""); + term.writeln("Connection closed."); + term.terminadoDetach(sock); + }); + term.open(document.getElementById('terminal')); window.onresize = function() {term.fit();};