From 511a0da5abe7fab32535612ce162614ac9ec0060 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 22 Nov 2019 02:42:22 -0500 Subject: refactor a bit --- teleterm-web/src/lib.rs | 58 +++++++++++++++++------------------ teleterm-web/src/ws.rs | 26 ++++++++++++---- teleterm/static/teleterm_web.js | 18 +++++------ teleterm/static/teleterm_web_bg.wasm | Bin 304649 -> 304848 bytes 4 files changed, 57 insertions(+), 45 deletions(-) diff --git a/teleterm-web/src/lib.rs b/teleterm-web/src/lib.rs index 8b770a5..99c68f1 100644 --- a/teleterm-web/src/lib.rs +++ b/teleterm-web/src/lib.rs @@ -13,51 +13,49 @@ const WATCH_URL: &str = "ws://127.0.0.1:4145/watch"; #[derive(Clone)] enum Msg { - Connected(JsValue), - Disconnected(JsValue), - Message(MessageEvent), - Error(JsValue), + Watch(ws::WebSocketEvent), } struct Model { - ws: WebSocket, + watch_conn: WebSocket, } fn init(_: Url, orders: &mut impl Orders) -> Init { log("init"); - let ws = ws::connect(WATCH_URL, orders); - log("created ws"); - Init::new(Model { ws }) + let watch_conn = ws::connect(WATCH_URL, Msg::Watch, orders); + Init::new(Model { watch_conn }) } fn update(msg: Msg, model: &mut Model, _orders: &mut impl Orders) { log("update"); match msg { - Msg::Connected(_) => { - log("connected"); - match model.ws.send_with_str("ping1") { - Ok(_) => log("sent ping1 successfully"), - Err(e) => { - log(&format!("error sending ping: {:?}", e)); - return; + Msg::Watch(event) => match event { + ws::WebSocketEvent::Connected(_) => { + log("connected"); + match model.watch_conn.send_with_str("ping1") { + Ok(_) => log("sent ping1 successfully"), + Err(e) => { + log(&format!("error sending ping: {:?}", e)); + return; + } } - } - match model.ws.send_with_str("ping2") { - Ok(_) => log("sent ping2 successfully"), - Err(e) => { - log(&format!("error sending ping: {:?}", e)); + match model.watch_conn.send_with_str("ping2") { + Ok(_) => log("sent ping2 successfully"), + Err(e) => { + log(&format!("error sending ping: {:?}", e)); + } } } - } - Msg::Disconnected(_) => { - log("disconnected"); - } - Msg::Message(msg) => { - log(&format!("message {:?}", msg)); - } - Msg::Error(e) => { - log(&format!("error {:?}", e)); - } + ws::WebSocketEvent::Disconnected(_) => { + log("disconnected"); + } + ws::WebSocketEvent::Message(msg) => { + log(&format!("message {:?}", msg)); + } + ws::WebSocketEvent::Error(e) => { + log(&format!("error {:?}", e)); + } + }, } } diff --git a/teleterm-web/src/ws.rs b/teleterm-web/src/ws.rs index a2ab566..d386651 100644 --- a/teleterm-web/src/ws.rs +++ b/teleterm-web/src/ws.rs @@ -1,33 +1,46 @@ use crate::prelude::*; use wasm_bindgen::JsCast as _; +#[derive(Clone)] +pub(crate) enum WebSocketEvent { + Connected(JsValue), + Disconnected(JsValue), + Message(MessageEvent), + Error(JsValue), +} + pub(crate) fn connect( url: &str, + msg: fn(WebSocketEvent) -> crate::Msg, orders: &mut impl Orders, ) -> WebSocket { let ws = WebSocket::new(url).unwrap(); register_ws_handler( WebSocket::set_onopen, - crate::Msg::Connected, + WebSocketEvent::Connected, + msg, &ws, orders, ); register_ws_handler( WebSocket::set_onclose, - crate::Msg::Disconnected, + WebSocketEvent::Disconnected, + msg, &ws, orders, ); register_ws_handler( WebSocket::set_onmessage, - crate::Msg::Message, + WebSocketEvent::Message, + msg, &ws, orders, ); register_ws_handler( WebSocket::set_onerror, - crate::Msg::Error, + WebSocketEvent::Error, + msg, &ws, orders, ); @@ -38,16 +51,17 @@ pub(crate) fn connect( fn register_ws_handler( ws_cb_setter: fn(&WebSocket, Option<&js_sys::Function>), msg: F, + ws_msg: fn(WebSocketEvent) -> crate::Msg, ws: &web_sys::WebSocket, orders: &mut impl Orders, ) where T: wasm_bindgen::convert::FromWasmAbi + 'static, - F: Fn(T) -> crate::Msg + 'static, + F: Fn(T) -> WebSocketEvent + 'static, { let (app, msg_mapper) = (orders.clone_app(), orders.msg_mapper()); let closure = Closure::new(move |data| { - app.update(msg_mapper(msg(data))); + app.update(msg_mapper(ws_msg(msg(data)))); }); ws_cb_setter(ws, Some(closure.as_ref().unchecked_ref())); diff --git a/teleterm/static/teleterm_web.js b/teleterm/static/teleterm_web.js index b553b27..7eac0ab 100644 --- a/teleterm/static/teleterm_web.js +++ b/teleterm/static/teleterm_web.js @@ -30,13 +30,13 @@ function __wbg_elem_binding3(arg0, arg1, arg2) { wasm.__wbg_function_table.get(23)(arg0, arg1, arg2); } function __wbg_elem_binding4(arg0, arg1, arg2) { - wasm.__wbg_function_table.get(143)(arg0, arg1, addHeapObject(arg2)); + wasm.__wbg_function_table.get(144)(arg0, arg1, addHeapObject(arg2)); } function __wbg_elem_binding5(arg0, arg1, arg2, arg3, arg4) { - wasm.__wbg_function_table.get(170)(arg0, arg1, addHeapObject(arg2), arg3, addHeapObject(arg4)); + wasm.__wbg_function_table.get(171)(arg0, arg1, addHeapObject(arg2), arg3, addHeapObject(arg4)); } function __wbg_elem_binding6(arg0, arg1, arg2, arg3) { - wasm.__wbg_function_table.get(174)(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); + wasm.__wbg_function_table.get(175)(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); } /** */ @@ -811,16 +811,16 @@ function init(module) { const ret = real; return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper159 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper693 = 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_binding4(a, state.b, arg0); } finally { - if (--state.cnt === 0) wasm.__wbg_function_table.get(20)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(145)(a, state.b); else state.a = a; } } @@ -829,16 +829,16 @@ function init(module) { const ret = real; return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper692 = function(arg0, arg1, arg2) { + imports.wbg.__wbindgen_closure_wrapper159 = 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(144)(a, state.b); + if (--state.cnt === 0) wasm.__wbg_function_table.get(20)(a, state.b); else state.a = a; } } diff --git a/teleterm/static/teleterm_web_bg.wasm b/teleterm/static/teleterm_web_bg.wasm index 9070ad9..f3ea767 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