diff options
Diffstat (limited to 'teleterm-web/src/ws.rs')
-rw-r--r-- | teleterm-web/src/ws.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/teleterm-web/src/ws.rs b/teleterm-web/src/ws.rs index a0c30a4..c5f9761 100644 --- a/teleterm-web/src/ws.rs +++ b/teleterm-web/src/ws.rs @@ -11,12 +11,14 @@ pub(crate) enum WebSocketEvent { pub(crate) fn connect( url: &str, - msg: fn(WebSocketEvent) -> crate::Msg, + id: &str, + msg: fn(String, WebSocketEvent) -> crate::Msg, orders: &mut impl Orders<crate::Msg>, ) -> WebSocket { let ws = WebSocket::new(url).unwrap(); register_ws_handler( + id, WebSocket::set_onopen, WebSocketEvent::Connected, msg, @@ -24,6 +26,7 @@ pub(crate) fn connect( orders, ); register_ws_handler( + id, WebSocket::set_onclose, WebSocketEvent::Disconnected, msg, @@ -31,6 +34,7 @@ pub(crate) fn connect( orders, ); register_ws_handler( + id, WebSocket::set_onmessage, WebSocketEvent::Message, msg, @@ -38,6 +42,7 @@ pub(crate) fn connect( orders, ); register_ws_handler( + id, WebSocket::set_onerror, WebSocketEvent::Error, msg, @@ -49,9 +54,10 @@ pub(crate) fn connect( } fn register_ws_handler<T, F>( + id: &str, ws_cb_setter: fn(&WebSocket, Option<&js_sys::Function>), msg: F, - ws_msg: fn(WebSocketEvent) -> crate::Msg, + ws_msg: fn(String, WebSocketEvent) -> crate::Msg, ws: &web_sys::WebSocket, orders: &mut impl Orders<crate::Msg>, ) where @@ -60,8 +66,9 @@ fn register_ws_handler<T, F>( { let (app, msg_mapper) = (orders.clone_app(), orders.msg_mapper()); + let id = id.to_string(); let closure = Closure::new(move |data| { - app.update(msg_mapper(ws_msg(msg(data)))); + app.update(msg_mapper(ws_msg(id.clone(), msg(data)))); }); ws_cb_setter(ws, Some(closure.as_ref().unchecked_ref())); |