From: Ian Jackson Date: Sun, 8 Aug 2021 18:49:36 +0000 (+0100) Subject: server: wip, all_clients plumbing X-Git-Tag: hippotat/1.0.0~202 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=3cd9b9cf16ee5bb6613a3ce0db14e1251145547b;p=hippotat.git server: wip, all_clients plumbing Signed-off-by: Ian Jackson --- diff --git a/src/bin/server.rs b/src/bin/server.rs index 4426987..96ccb9e 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -27,9 +27,8 @@ struct WebRequest { } async fn handle( -// context: (), -// addr: SocketAddr, - req: hyper::Request + _all_clients: Arc, + req: hyper::Request ) -> Result, Infallible> { if req.method() == Method::GET { let mut resp = hyper::Response::new(hyper::Body::from("hippotat\r\n")); @@ -96,6 +95,8 @@ async fn handle( let client = str::from_utf8(client).context("client addr utf-8")?; let client: IpAddr = client.parse().context("client address")?; + + eprintln!("boundary={:?} start={} name={:?} client={}", boundary, start, &comp.name, client); @@ -134,7 +135,7 @@ async fn main() { let global = config::InstanceConfigGlobal::from(&ics); let ipif = Ipif::start(&global.ipif, None)?; - let _all_clients: AllClients = ics.into_iter().map(|ic| { + let all_clients: AllClients = ics.into_iter().map(|ic| { let ic = Arc::new(ic); let (web_send, web_recv) = mpsc::channel( @@ -153,12 +154,23 @@ async fn main() { web: web_send, }) }).collect(); - - let make_service = hyper::service::make_service_fn(|_conn| async { - Ok::<_, Infallible>(hyper::service::service_fn(handle)) - }); + let all_clients = Arc::new(all_clients); for addr in &global.addrs { + let all_clients_ = all_clients.clone(); + let make_service = hyper::service::make_service_fn( + move |_conn| { + let all_clients_ = all_clients_.clone(); + async move { + let all_clients_ = all_clients_.clone(); + Ok::<_, Void>(hyper::service::service_fn(move |req| { + let all_clients_ = all_clients_.clone(); + handle(all_clients_, req) + })) + } + } + ); + let addr = SocketAddr::new(*addr, global.port); let server = hyper::Server::try_bind(&addr) .context("bind")?