From ae7e6b3d481e420acf981fabbeff9745d4b5347d Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 11 Apr 2023 07:46:54 +0200 Subject: Implement `subscription::channel` and simplify `unfold` --- examples/websocket/src/echo.rs | 100 +++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 48 deletions(-) (limited to 'examples/websocket') diff --git a/examples/websocket/src/echo.rs b/examples/websocket/src/echo.rs index e74768a6..4fabb660 100644 --- a/examples/websocket/src/echo.rs +++ b/examples/websocket/src/echo.rs @@ -13,63 +13,67 @@ use std::fmt; pub fn connect() -> Subscription { struct Connect; - subscription::unfold( + subscription::channel( std::any::TypeId::of::(), - State::Disconnected, - |state| async move { - match state { - State::Disconnected => { - const ECHO_SERVER: &str = "ws://localhost:3030"; - - match async_tungstenite::tokio::connect_async(ECHO_SERVER) + 100, + |mut output| async move { + let mut state = State::Disconnected; + + loop { + match &mut state { + State::Disconnected => { + const ECHO_SERVER: &str = "ws://localhost:3030"; + + match async_tungstenite::tokio::connect_async( + ECHO_SERVER, + ) .await - { - Ok((websocket, _)) => { - let (sender, receiver) = mpsc::channel(100); - - ( - Some(Event::Connected(Connection(sender))), - State::Connected(websocket, receiver), - ) - } - Err(_) => { - tokio::time::sleep( - tokio::time::Duration::from_secs(1), - ) - .await; + { + Ok((websocket, _)) => { + let (sender, receiver) = mpsc::channel(100); + + let _ = output + .send(Event::Connected(Connection(sender))) + .await; - (Some(Event::Disconnected), State::Disconnected) + state = State::Connected(websocket, receiver); + } + Err(_) => { + tokio::time::sleep( + tokio::time::Duration::from_secs(1), + ) + .await; + + let _ = output.send(Event::Disconnected).await; + } } } - } - State::Connected(mut websocket, mut input) => { - let mut fused_websocket = websocket.by_ref().fuse(); - - futures::select! { - received = fused_websocket.select_next_some() => { - match received { - Ok(tungstenite::Message::Text(message)) => { - ( - Some(Event::MessageReceived(Message::User(message))), - State::Connected(websocket, input) - ) - } - Ok(_) => { - (None, State::Connected(websocket, input)) - } - Err(_) => { - (Some(Event::Disconnected), State::Disconnected) + State::Connected(websocket, input) => { + let mut fused_websocket = websocket.by_ref().fuse(); + + futures::select! { + received = fused_websocket.select_next_some() => { + match received { + Ok(tungstenite::Message::Text(message)) => { + let _ = output.send(Event::MessageReceived(Message::User(message))).await; + } + Err(_) => { + let _ = output.send(Event::Disconnected).await; + + state = State::Disconnected; + } + Ok(_) => continue, } } - } - message = input.select_next_some() => { - let result = websocket.send(tungstenite::Message::Text(message.to_string())).await; + message = input.select_next_some() => { + let result = websocket.send(tungstenite::Message::Text(message.to_string())).await; + + if !result.is_ok() { + let _ = output.send(Event::Disconnected).await; - if result.is_ok() { - (None, State::Connected(websocket, input)) - } else { - (Some(Event::Disconnected), State::Disconnected) + state = State::Disconnected; + } } } } -- cgit From 5908205a62eb160af745039b9ce0aa5329f984ba Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 11 Apr 2023 07:48:30 +0200 Subject: Use `127.0.0.1` instead of `localhost` in `websocket` example --- examples/websocket/src/echo.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'examples/websocket') diff --git a/examples/websocket/src/echo.rs b/examples/websocket/src/echo.rs index 4fabb660..f6c46e95 100644 --- a/examples/websocket/src/echo.rs +++ b/examples/websocket/src/echo.rs @@ -22,7 +22,7 @@ pub fn connect() -> Subscription { loop { match &mut state { State::Disconnected => { - const ECHO_SERVER: &str = "ws://localhost:3030"; + const ECHO_SERVER: &str = "ws://127.0.0.1:3030"; match async_tungstenite::tokio::connect_async( ECHO_SERVER, -- cgit From 0ed54346b0d6271cf5874debef1de57f8322a249 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 11 Apr 2023 07:53:26 +0200 Subject: Use `Result::is_err` in `websocket` example --- examples/websocket/src/echo.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'examples/websocket') diff --git a/examples/websocket/src/echo.rs b/examples/websocket/src/echo.rs index f6c46e95..f9807172 100644 --- a/examples/websocket/src/echo.rs +++ b/examples/websocket/src/echo.rs @@ -69,7 +69,7 @@ pub fn connect() -> Subscription { message = input.select_next_some() => { let result = websocket.send(tungstenite::Message::Text(message.to_string())).await; - if !result.is_ok() { + if result.is_err() { let _ = output.send(Event::Disconnected).await; state = State::Disconnected; -- cgit From f10e936f00d4b83dcacfdebd2727b1a5cd1add95 Mon Sep 17 00:00:00 2001 From: Dan Mishin Date: Fri, 3 Mar 2023 10:01:49 +0300 Subject: Introduce disabled state for `TextInput` --- examples/websocket/src/main.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'examples/websocket') diff --git a/examples/websocket/src/main.rs b/examples/websocket/src/main.rs index e617b8ce..1fda7f18 100644 --- a/examples/websocket/src/main.rs +++ b/examples/websocket/src/main.rs @@ -125,12 +125,9 @@ impl Application for WebSocket { }; let new_message_input = { - let mut input = text_input( - "Type a message...", - &self.new_message, - Message::NewMessageChanged, - ) - .padding(10); + let mut input = text_input("Type a message...", &self.new_message) + .on_change(Message::NewMessageChanged) + .padding(10); let mut button = button( text("Send") -- cgit From e6a93e960c3ac71a74f11555fd2d225c185f6e8c Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 12 Apr 2023 04:13:36 +0200 Subject: Rename `on_change` to `on_input` for `TextInput` --- examples/websocket/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'examples/websocket') diff --git a/examples/websocket/src/main.rs b/examples/websocket/src/main.rs index 1fda7f18..920189f5 100644 --- a/examples/websocket/src/main.rs +++ b/examples/websocket/src/main.rs @@ -126,7 +126,7 @@ impl Application for WebSocket { let new_message_input = { let mut input = text_input("Type a message...", &self.new_message) - .on_change(Message::NewMessageChanged) + .on_input(Message::NewMessageChanged) .padding(10); let mut button = button( -- cgit