2023-08-31 20:12:48 +01:00
|
|
|
use crate::{LogDisplay, StreamSend};
|
2024-05-07 12:41:44 +01:00
|
|
|
use leptos::prelude::*;
|
2023-08-31 20:12:48 +01:00
|
|
|
use leptos_use::core::ConnectionReadyState;
|
|
|
|
use leptos_use::BidirStream;
|
|
|
|
|
|
|
|
#[component]
|
|
|
|
pub fn StreamBidir(
|
|
|
|
#[prop(into)] ready_state: Signal<ConnectionReadyState>,
|
|
|
|
stream: BidirStream,
|
|
|
|
) -> impl IntoView {
|
2024-05-07 12:41:44 +01:00
|
|
|
let (log, set_log) = signal(vec![]);
|
2023-08-31 20:12:48 +01:00
|
|
|
|
|
|
|
let on_send = move |msg| {
|
|
|
|
set_log.update(|log| log.push(format!("Sent: '{}'", msg)));
|
|
|
|
};
|
|
|
|
|
2024-08-22 17:47:06 +01:00
|
|
|
Effect::watch(
|
2023-08-31 20:12:48 +01:00
|
|
|
stream.bytes,
|
|
|
|
move |bytes, _, _| {
|
|
|
|
if let Some(bytes) = bytes {
|
|
|
|
set_log.update(|log| {
|
|
|
|
log.push(format!(
|
|
|
|
"Received datagrams: '{}'",
|
|
|
|
String::from_utf8(bytes.clone()).expect("valid utf8")
|
|
|
|
))
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
);
|
|
|
|
|
|
|
|
view! {
|
|
|
|
<StreamSend ready_state=ready_state send_stream=stream.clone() on_send=on_send />
|
|
|
|
<LogDisplay log=log />
|
|
|
|
}
|
|
|
|
}
|