diff options
-rw-r--r-- | Cargo.lock | 142 | ||||
-rw-r--r-- | Cargo.toml | 3 | ||||
-rw-r--r-- | Makefile | 10 | ||||
-rw-r--r-- | teleterm-web/Cargo.toml | 13 | ||||
-rw-r--r-- | teleterm-web/src/lib.rs | 49 |
5 files changed, 214 insertions, 3 deletions
@@ -25,6 +25,12 @@ dependencies = [ ] [[package]] +name = "anyhow" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57114fc2a6cc374bce195d3482057c846e706d252ff3604363449695684d7a0d" + +[[package]] name = "arc-swap" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -177,6 +183,12 @@ dependencies = [ ] [[package]] +name = "bumpalo" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad807f2fc2bf185eeb98ff3a901bd46dc5ad58163d0fa4577ba0d25674d71708" + +[[package]] name = "byte-tools" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -785,6 +797,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1de41fb8dba9714efd92241565cdff73f78508c95697dd56787d3cba27e2353" [[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +dependencies = [ + "unicode-segmentation", +] + +[[package]] name = "hermit-abi" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -942,6 +963,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" [[package]] +name = "js-sys" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8657b7ca06a6044ece477f6900bf7670f8b5fd0cce177a1d7094eef51e0adf4" +dependencies = [ + "wasm-bindgen", +] + +[[package]] name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1888,6 +1918,12 @@ dependencies = [ ] [[package]] +name = "sourcefile" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bf77cb82ba8453b42b6ae1d692e4cdc92f9a47beaf89a847c8be83f4e328ad3" + +[[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1991,6 +2027,14 @@ dependencies = [ ] [[package]] +name = "teleterm-web" +version = "0.1.0" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] name = "tempdir" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2473,6 +2517,12 @@ dependencies = [ ] [[package]] +name = "unicode-segmentation" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" + +[[package]] name = "unicode-width" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2627,6 +2677,89 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" [[package]] +name = "wasm-bindgen" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4568ae1b4e07ca907b1a4de41174eaa3e5be4066c024475586b7842725f69a9" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a00cfdce37367770062065fd3abb9278cbae86a0d918cacd0978a7acd51b481" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2 1.0.6", + "quote 1.0.2", + "syn 1.0.7", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c568f4d3cf6d7c1d72b165daf778fb0d6e09a24f96ac14fc8c4f66a96e86b72" +dependencies = [ + "quote 1.0.2", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "430d12539ae324d16097b399e9d07a6d5ce0173b2a61a2d02346ca7c198daffe" +dependencies = [ + "proc-macro2 1.0.6", + "quote 1.0.2", + "syn 1.0.7", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae7167f0bbffd7fac2b12da0fa1f834c1d84671a1ae3c93ac8bde2e97179c39" + +[[package]] +name = "wasm-bindgen-webidl" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3021567c515a746a64ad0b269d120d46e687c0c95702a4750623db935ae6b5e7" +dependencies = [ + "anyhow", + "heck", + "log", + "proc-macro2 1.0.6", + "quote 1.0.2", + "syn 1.0.7", + "wasm-bindgen-backend", + "weedle", +] + +[[package]] +name = "web-sys" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8e893e021539beb87de8f06e77bdb390a3ab0db4cfeb569c4e377b55ed20de" +dependencies = [ + "anyhow", + "js-sys", + "sourcefile", + "wasm-bindgen", + "wasm-bindgen-webidl", +] + +[[package]] name = "webpki" version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2637,6 +2770,15 @@ dependencies = [ ] [[package]] +name = "weedle" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bb43f70885151e629e2a19ce9e50bd730fd436cfd4b666894c9ce4de9141164" +dependencies = [ + "nom", +] + +[[package]] name = "winapi" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1,2 +1,3 @@ [workspace] -members = ["teleterm"] +members = ["teleterm", "teleterm-web"] +default-members = ["teleterm"] @@ -1,5 +1,5 @@ -NAME = $(shell cargo read-manifest | jq -r '.name') -VERSION = $(shell cargo read-manifest | jq -r '.version') +NAME = $(shell cargo metadata --no-deps --format-version 1 --manifest-path teleterm/Cargo.toml | jq -r '.name') +VERSION = $(shell cargo metadata --no-deps --format-version 1 --manifest-path teleterm/Cargo.toml | jq -r '.version') INTERACTIVE_SUBCOMMANDS = stream watch record play NONINTERACTIVE_SUBCOMMANDS = server @@ -94,3 +94,9 @@ publish-arch: test pkg/$(ARCH_PACKAGE) pkg/$(ARCH_PACKAGE).minisig release-dir-a install-arch: pkg/$(ARCH_PACKAGE) @sudo pacman -U pkg/$(ARCH_PACKAGE) .PHONY: install-arch + +wasm: target/wasm/teleterm_web_bg.wasm +.PHONY: wasm + +target/wasm/teleterm_web_bg.wasm: teleterm-web/Cargo.toml teleterm-web/src/lib.rs + @wasm-pack build --no-typescript --target web --out-dir ../target/wasm 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 <doy@tozt.net>"] +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<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(()) +} |