chiark / gitweb /
server: wip, all_clients plumbing
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 18:49:36 +0000 (19:49 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 18:50:05 +0000 (19:50 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/server.rs

index 442698731b099803ae65d40bddbf8e79b4d35c67..96ccb9e9c66a511a6db9ddfd2a4bf64b4b6decde 100644 (file)
@@ -27,9 +27,8 @@ struct WebRequest {
 }
 
 async fn handle(
-//    context: (),
-//    addr: SocketAddr,
-    req: hyper::Request<hyper::Body>
+  _all_clients: Arc<AllClients>,
+  req: hyper::Request<hyper::Body>
 ) -> Result<hyper::Response<hyper::Body>, 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")?