diff --git a/examples/use_webtransport_with_server/client/src/main.rs b/examples/use_webtransport_with_server/client/src/main.rs index 5c54c23..c7dd8c7 100644 --- a/examples/use_webtransport_with_server/client/src/main.rs +++ b/examples/use_webtransport_with_server/client/src/main.rs @@ -14,6 +14,7 @@ use stream_send::*; #[component] fn Demo() -> impl IntoView { let (datagrams_log, set_datagrams_log) = create_signal(vec![]); + let (bidir_streams, set_bidir_streams) = create_signal(vec![]); let id = store_value(0); @@ -25,6 +26,14 @@ fn Demo() -> impl IntoView { }) .on_close(move || { set_datagrams_log.update(|log| log.push("Connection closed".to_string())) + }) + .on_bidir_stream(move |bidir_stream| { + let i = id.get_value(); + id.set_value(i + 1); + + set_datagrams_log + .update(|log| log.push("Server opened bidirectional stream".to_string())); + set_bidir_streams.update(|s| s.push((i, bidir_stream, "server"))); }), ); @@ -56,8 +65,6 @@ fn Demo() -> impl IntoView { false, ); - let (bidir_streams, set_bidir_streams) = create_signal(vec![]); - let on_open_bidir_stream = { let transport = transport.clone(); @@ -70,7 +77,7 @@ fn Demo() -> impl IntoView { let i = id.get_value(); id.set_value(i + 1); - set_bidir_streams.update(|s| s.push((i, bidir_stream))); + set_bidir_streams.update(|s| s.push((i, bidir_stream, "client"))); } Err(e) => { set_datagrams_log.update(|log| { @@ -95,8 +102,14 @@ fn Demo() -> impl IntoView {

Bidir Streams

} + key=|(i, _, _)| *i + view=move |(i, bidir_stream, opened_by)| view! { + + } /> } } diff --git a/examples/use_webtransport_with_server/client/src/stream_bidir.rs b/examples/use_webtransport_with_server/client/src/stream_bidir.rs index 98fcccc..949d4b7 100644 --- a/examples/use_webtransport_with_server/client/src/stream_bidir.rs +++ b/examples/use_webtransport_with_server/client/src/stream_bidir.rs @@ -1,12 +1,13 @@ use crate::{LogDisplay, StreamSend}; use leptos::*; use leptos_use::core::ConnectionReadyState; -use leptos_use::BidirStream; +use leptos_use::{BidirStream, CloseableStream, StreamState}; #[component] pub fn StreamBidir( #[prop(into)] ready_state: Signal, stream: BidirStream, + opened_by: &'static str, ) -> impl IntoView { let (log, set_log) = create_signal(vec![]); @@ -20,7 +21,7 @@ pub fn StreamBidir( if let Some(bytes) = bytes { set_log.update(|log| { log.push(format!( - "Received datagrams: '{}'", + "Received bidir: '{}'", String::from_utf8(bytes.clone()).expect("valid utf8") )) }); @@ -29,8 +30,20 @@ pub fn StreamBidir( false, ); + let on_close = { + let stream = stream.clone(); + + move |_| { + stream.close(); + } + }; + view! { - +

Opened by {opened_by}

+ + // TODO : make component out of this: +

Stream state: { let stream = stream.clone(); move || format!("{:?}", stream.state().get()) }

+ } } diff --git a/examples/use_webtransport_with_server/client/src/stream_send.rs b/examples/use_webtransport_with_server/client/src/stream_send.rs index dd4f5e9..7cffe86 100644 --- a/examples/use_webtransport_with_server/client/src/stream_send.rs +++ b/examples/use_webtransport_with_server/client/src/stream_send.rs @@ -1,10 +1,11 @@ use leptos::*; use leptos_use::core::ConnectionReadyState; -use leptos_use::SendableStream; +use leptos_use::{SendableStream, StreamState}; #[component] pub fn StreamSend( #[prop(into)] ready_state: Signal, + stream_state: Signal, send_stream: S, on_send: F, ) -> impl IntoView @@ -24,6 +25,6 @@ where view! {