aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'teleterm-web/src/lib.rs')
-rw-r--r--teleterm-web/src/lib.rs49
1 files changed, 49 insertions, 0 deletions
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<dyn FnMut(web_sys::MessageEvent)>);
+ 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<dyn FnMut(web_sys::ErrorEvent)>);
+ 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<dyn FnMut(JsValue)>);
+ ws.set_onopen(Some(open_cb.as_ref().unchecked_ref()));
+ open_cb.forget();
+
+ Ok(())
+}