diff options
Diffstat (limited to 'teleterm/src/web.rs')
-rw-r--r-- | teleterm/src/web.rs | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs index 40f23ce..5531356 100644 --- a/teleterm/src/web.rs +++ b/teleterm/src/web.rs @@ -19,6 +19,7 @@ struct WatchQueryParams { #[derive(Clone, serde::Serialize)] struct Config { title: String, + server_address: (String, std::net::SocketAddr), } pub struct Server { @@ -26,12 +27,19 @@ pub struct Server { } impl Server { - pub fn new<T: std::net::ToSocketAddrs + 'static>(addr: T) -> Self { + pub fn new( + listen_address: std::net::SocketAddr, + server_address: (String, std::net::SocketAddr), + ) -> Self { let data = Config { title: "teleterm".to_string(), + server_address, }; Self { - server: Box::new(gotham::init_server(addr, router(&data))), + server: Box::new(gotham::init_server( + listen_address, + router(&data), + )), } } } @@ -81,11 +89,13 @@ fn router(data: &Config) -> impl gotham::handler::NewHandler { route .get("/teleterm.css") .to(serve_static("text/css", &view::TELETERM_CSS)); - route.get("/list").to(handle_list); + route + .get("/list") + .to_new_handler(serve_dynamic(data, handle_list)); route .get("/watch") .with_query_string_extractor::<WatchQueryParams>() - .to(handle_watch); + .to_new_handler(serve_dynamic(data, handle_watch)); }) } @@ -121,11 +131,25 @@ fn serve_template( } } +fn serve_dynamic( + data: &Config, + handler: fn( + &Config, + gotham::state::State, + ) -> (gotham::state::State, hyper::Response<hyper::Body>), +) -> impl gotham::handler::NewHandler { + let data = data.clone(); + move || { + let data = data.clone(); + Ok(move |state| handler(&data, state)) + } +} + fn handle_list( + config: &Config, state: gotham::state::State, ) -> (gotham::state::State, hyper::Response<hyper::Body>) { - let address = "127.0.0.1:4144"; - let (_, address) = crate::config::to_connect_address(address).unwrap(); + let (_, address) = config.server_address; let connector: crate::client::Connector<_> = Box::new(move || { Box::new( tokio::net::tcp::TcpStream::connect(&address) @@ -249,6 +273,7 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static> } fn handle_watch( + config: &Config, mut state: gotham::state::State, ) -> (gotham::state::State, hyper::Response<hyper::Body>) { let body = hyper::Body::take_from(&mut state); @@ -269,9 +294,7 @@ fn handle_watch( }; let query_params = WatchQueryParams::borrow_from(&state); - let address = "127.0.0.1:4144"; - let (_, address) = - crate::config::to_connect_address(address).unwrap(); + let (_, address) = config.server_address; let connector: crate::client::Connector<_> = Box::new(move || { Box::new( tokio::net::tcp::TcpStream::connect(&address) |