From 009454efadc2f3ab6e965cfb6045693cdc7b5021 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 15 Nov 2019 13:31:52 -0500 Subject: add basic websocket client --- teleterm-web/Cargo.toml | 13 +++++++++++++ teleterm-web/src/lib.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 teleterm-web/Cargo.toml create mode 100644 teleterm-web/src/lib.rs (limited to 'teleterm-web') diff --git a/teleterm-web/Cargo.toml b/teleterm-web/Cargo.toml new file mode 100644 index 0000000..1793db3 --- /dev/null +++ b/teleterm-web/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "teleterm-web" +version = "0.1.0" +authors = ["Jesse Luehrs "] +edition = "2018" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +wasm-bindgen = "0.2" +web-sys = { version = "0.3", features = ["ErrorEvent", "MessageEvent", +"WebSocket"]} diff --git a/teleterm-web/src/lib.rs b/teleterm-web/src/lib.rs new file mode 100644 index 0000000..eeba28f --- /dev/null +++ b/teleterm-web/src/lib.rs @@ -0,0 +1,49 @@ +use wasm_bindgen::prelude::*; +use wasm_bindgen::JsCast as _; + +#[wasm_bindgen] +extern "C" { + #[wasm_bindgen(js_namespace = console)] + fn log(s: &str); +} + +#[wasm_bindgen(start)] +pub fn main() -> Result<(), JsValue> { + log("loaded"); + + let ws = web_sys::WebSocket::new("ws://127.0.0.1:4145/ws")?; + + let msg_cb = Closure::wrap(Box::new(move |event: web_sys::MessageEvent| { + log(&format!("message {:?}", event)); + }) as Box); + ws.set_onmessage(Some(msg_cb.as_ref().unchecked_ref())); + msg_cb.forget(); + + let err_cb = Closure::wrap(Box::new(move |event: web_sys::ErrorEvent| { + log(&format!("error {:?}", event)); + }) as Box); + ws.set_onerror(Some(err_cb.as_ref().unchecked_ref())); + err_cb.forget(); + + let cloned_ws = ws.clone(); + let open_cb = Closure::wrap(Box::new(move |_| { + log("opened"); + match cloned_ws.send_with_str("ping1") { + Ok(_) => log("sent ping1 successfully"), + Err(e) => { + log(&format!("error sending ping: {:?}", e)); + return; + } + } + match cloned_ws.send_with_str("ping2") { + Ok(_) => log("sent ping2 successfully"), + Err(e) => { + log(&format!("error sending ping: {:?}", e)); + } + } + }) as Box); + ws.set_onopen(Some(open_cb.as_ref().unchecked_ref())); + open_cb.forget(); + + Ok(()) +} -- cgit v1.2.3-54-g00ecf