blob: eeba28fa97293cd4f97540b253220e228b7857f1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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(())
}
|