From 5dfabf794891afd558182faeda9023ad3cd29413 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 22 Nov 2019 11:15:45 -0500 Subject: handle streamer disconnects --- teleterm-web/src/lib.rs | 4 +++ teleterm-web/src/model.rs | 4 +++ teleterm-web/src/protocol.rs | 1 + teleterm/src/web.rs | 5 +++ teleterm/static/teleterm_web.js | 68 +++++++++++++++++------------------ teleterm/static/teleterm_web_bg.wasm | Bin 673461 -> 675320 bytes 6 files changed, 48 insertions(+), 34 deletions(-) diff --git a/teleterm-web/src/lib.rs b/teleterm-web/src/lib.rs index 118ab2f..2ff1514 100644 --- a/teleterm-web/src/lib.rs +++ b/teleterm-web/src/lib.rs @@ -62,6 +62,10 @@ fn update( crate::protocol::Message::TerminalOutput { data } => { model.process(&data); } + crate::protocol::Message::Disconnected => { + model.disconnect_watch(); + orders.perform_cmd(model.list()); + } } } ws::WebSocketEvent::Error(e) => { diff --git a/teleterm-web/src/model.rs b/teleterm-web/src/model.rs index f83036b..dfaccc8 100644 --- a/teleterm-web/src/model.rs +++ b/teleterm-web/src/model.rs @@ -60,6 +60,10 @@ impl Model { self.watch_conn.is_some() } + pub fn disconnect_watch(&mut self) { + self.watch_conn = None; + } + pub fn process(&mut self, bytes: &[u8]) { if let Some(conn) = &mut self.watch_conn { conn.term.process(bytes); diff --git a/teleterm-web/src/protocol.rs b/teleterm-web/src/protocol.rs index d9f3a8e..af40891 100644 --- a/teleterm-web/src/protocol.rs +++ b/teleterm-web/src/protocol.rs @@ -4,4 +4,5 @@ #[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)] pub enum Message { TerminalOutput { data: Vec }, + Disconnected, } diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs index c1e0e18..b01480d 100644 --- a/teleterm/src/web.rs +++ b/teleterm/src/web.rs @@ -377,6 +377,11 @@ impl .context(crate::error::SerializeMessage)?; Ok(Some(tungstenite::Message::Text(json))) } + crate::protocol::Message::Disconnected => { + let json = serde_json::to_string(msg) + .context(crate::error::SerializeMessage)?; + Ok(Some(tungstenite::Message::Text(json))) + } _ => Ok(None), } } diff --git a/teleterm/static/teleterm_web.js b/teleterm/static/teleterm_web.js index 83f0d90..c8d3f28 100644 --- a/teleterm/static/teleterm_web.js +++ b/teleterm/static/teleterm_web.js @@ -18,31 +18,31 @@ function addHeapObject(obj) { return idx; } function __wbg_elem_binding0(arg0, arg1, arg2) { - wasm.__wbg_function_table.get(55)(arg0, arg1, addHeapObject(arg2)); + wasm.__wbg_function_table.get(56)(arg0, arg1, addHeapObject(arg2)); } -function __wbg_elem_binding1(arg0, arg1, arg2) { - wasm.__wbg_function_table.get(55)(arg0, arg1, addHeapObject(arg2)); +function __wbg_elem_binding1(arg0, arg1) { + wasm.__wbg_function_table.get(221)(arg0, arg1); } function __wbg_elem_binding2(arg0, arg1, arg2) { - wasm.__wbg_function_table.get(55)(arg0, arg1, addHeapObject(arg2)); + wasm.__wbg_function_table.get(291)(arg0, arg1, addHeapObject(arg2)); } function __wbg_elem_binding3(arg0, arg1, arg2) { - wasm.__wbg_function_table.get(59)(arg0, arg1, arg2); + wasm.__wbg_function_table.get(60)(arg0, arg1, arg2); } function __wbg_elem_binding4(arg0, arg1, arg2) { - wasm.__wbg_function_table.get(55)(arg0, arg1, addHeapObject(arg2)); + wasm.__wbg_function_table.get(56)(arg0, arg1, addHeapObject(arg2)); } -function __wbg_elem_binding5(arg0, arg1) { - wasm.__wbg_function_table.get(218)(arg0, arg1); +function __wbg_elem_binding5(arg0, arg1, arg2) { + wasm.__wbg_function_table.get(56)(arg0, arg1, addHeapObject(arg2)); } function __wbg_elem_binding6(arg0, arg1, arg2) { - wasm.__wbg_function_table.get(288)(arg0, arg1, addHeapObject(arg2)); + wasm.__wbg_function_table.get(56)(arg0, arg1, addHeapObject(arg2)); } function __wbg_elem_binding7(arg0, arg1, arg2, arg3, arg4) { - wasm.__wbg_function_table.get(315)(arg0, arg1, addHeapObject(arg2), arg3, addHeapObject(arg4)); + wasm.__wbg_function_table.get(318)(arg0, arg1, addHeapObject(arg2), arg3, addHeapObject(arg4)); } function __wbg_elem_binding8(arg0, arg1, arg2, arg3) { - wasm.__wbg_function_table.get(319)(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); + wasm.__wbg_function_table.get(322)(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); } /** */ @@ -884,16 +884,16 @@ function init(module) { imports.wbg.__wbindgen_throw = function(arg0, arg1) { throw new Error(getStringFromWasm(arg0, arg1)); }; - imports.wbg.__wbindgen_closure_wrapper252 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper618 = function(arg0, arg1, arg2) { const state = { a: arg0, b: arg1, cnt: 1 }; - const real = (arg0) => { + const real = () => { state.cnt++; const a = state.a; state.a = 0; try { - return __wbg_elem_binding1(a, state.b, arg0); + return __wbg_elem_binding1(a, state.b, ); } finally { - if (--state.cnt === 0) wasm.__wbg_function_table.get(56)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(222)(a, state.b); else state.a = a; } } @@ -902,16 +902,16 @@ function init(module) { const ret = real; return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper254 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper241 = function(arg0, arg1, arg2) { const state = { a: arg0, b: arg1, cnt: 1 }; const real = (arg0) => { state.cnt++; const a = state.a; state.a = 0; try { - return __wbg_elem_binding4(a, state.b, arg0); + return __wbg_elem_binding3(a, state.b, arg0); } finally { - if (--state.cnt === 0) wasm.__wbg_function_table.get(56)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(57)(a, state.b); else state.a = a; } } @@ -920,16 +920,16 @@ function init(module) { const ret = real; return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper246 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper243 = function(arg0, arg1, arg2) { const state = { a: arg0, b: arg1, cnt: 1 }; const real = (arg0) => { state.cnt++; const a = state.a; state.a = 0; try { - return __wbg_elem_binding2(a, state.b, arg0); + return __wbg_elem_binding4(a, state.b, arg0); } finally { - if (--state.cnt === 0) wasm.__wbg_function_table.get(56)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(57)(a, state.b); else state.a = a; } } @@ -938,16 +938,16 @@ function init(module) { const ret = real; return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper615 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper239 = function(arg0, arg1, arg2) { const state = { a: arg0, b: arg1, cnt: 1 }; - const real = () => { + const real = (arg0) => { state.cnt++; const a = state.a; state.a = 0; try { - return __wbg_elem_binding5(a, state.b, ); + return __wbg_elem_binding0(a, state.b, arg0); } finally { - if (--state.cnt === 0) wasm.__wbg_function_table.get(219)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(57)(a, state.b); else state.a = a; } } @@ -956,16 +956,16 @@ function init(module) { const ret = real; return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper1026 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper1029 = function(arg0, arg1, arg2) { const state = { a: arg0, b: arg1, cnt: 1 }; const real = (arg0) => { state.cnt++; const a = state.a; state.a = 0; try { - return __wbg_elem_binding6(a, state.b, arg0); + return __wbg_elem_binding2(a, state.b, arg0); } finally { - if (--state.cnt === 0) wasm.__wbg_function_table.get(289)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(292)(a, state.b); else state.a = a; } } @@ -974,16 +974,16 @@ function init(module) { const ret = real; return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper250 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper247 = function(arg0, arg1, arg2) { const state = { a: arg0, b: arg1, cnt: 1 }; const real = (arg0) => { state.cnt++; const a = state.a; state.a = 0; try { - return __wbg_elem_binding0(a, state.b, arg0); + return __wbg_elem_binding5(a, state.b, arg0); } finally { - if (--state.cnt === 0) wasm.__wbg_function_table.get(56)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(57)(a, state.b); else state.a = a; } } @@ -992,16 +992,16 @@ function init(module) { const ret = real; return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper248 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper245 = function(arg0, arg1, arg2) { const state = { a: arg0, b: arg1, cnt: 1 }; const real = (arg0) => { state.cnt++; const a = state.a; state.a = 0; try { - return __wbg_elem_binding3(a, state.b, arg0); + return __wbg_elem_binding6(a, state.b, arg0); } finally { - if (--state.cnt === 0) wasm.__wbg_function_table.get(56)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(57)(a, state.b); else state.a = a; } } diff --git a/teleterm/static/teleterm_web_bg.wasm b/teleterm/static/teleterm_web_bg.wasm index f90031f..3f66d8e 100644 Binary files a/teleterm/static/teleterm_web_bg.wasm and b/teleterm/static/teleterm_web_bg.wasm differ -- cgit v1.2.3-54-g00ecf