aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-22 02:42:22 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-22 02:42:22 -0500
commit511a0da5abe7fab32535612ce162614ac9ec0060 (patch)
tree1e555d4f7dec3627f5a0ff99ec4c8a2791d206cb
parent16f9dfd4a1a1989c06d8e5d88a23d306c0813b68 (diff)
downloadteleterm-511a0da5abe7fab32535612ce162614ac9ec0060.tar.gz
teleterm-511a0da5abe7fab32535612ce162614ac9ec0060.zip
refactor a bit
-rw-r--r--teleterm-web/src/lib.rs58
-rw-r--r--teleterm-web/src/ws.rs26
-rw-r--r--teleterm/static/teleterm_web.js18
-rw-r--r--teleterm/static/teleterm_web_bg.wasmbin304649 -> 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<Msg>) -> Init<Model> {
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<Msg>) {
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<crate::Msg>,
) -> 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<T, F>(
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<crate::Msg>,
) 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
--- a/teleterm/static/teleterm_web_bg.wasm
+++ b/teleterm/static/teleterm_web_bg.wasm
Binary files differ