use dioxus::prelude::*; use dioxus_liveview::LiveViewPool; use salvo::extra::affix; use salvo::extra::ws::WsHandler; use salvo::prelude::*; use std::net::SocketAddr; use std::sync::Arc; fn app(cx: Scope) -> Element { let mut num = use_state(cx, || 0); cx.render(rsx! { div { "hello salvo! {num}" button { onclick: move |_| num += 1, "Increment" } } }) } #[tokio::main] async fn main() { pretty_env_logger::init(); let addr: SocketAddr = ([127, 0, 0, 1], 3030).into(); let view = LiveViewPool::new(); let router = Router::new() .hoop(affix::inject(Arc::new(view))) .get(index) .push(Router::with_path("ws").get(connect)); println!("Listening on http://{}", addr); Server::new(TcpListener::bind(addr)).serve(router).await; } #[handler] fn index(_depot: &mut Depot, res: &mut Response) { let addr: SocketAddr = ([127, 0, 0, 1], 3030).into(); res.render(Text::Html(format!( r#"