1. #[embassy_executor::task(pool_size = 3)]
  2. pub async fn task(stack: &'static Stack<WifiDevice<'static, WifiStaDevice>>) {
  3. let mut rx_buffer = [0; RX_BUFFER_SIZE];
  4. let mut tx_buffer = [0; TX_BUFFER_SIZE];
  5. let router = Router::new()
  6. .post(("valve", u8::segment()), control_valve)
  7. .get("/panic", || async { panic!("oops") })
  8. .get("/sleep", || async { Timer::after_secs(3).await })
  9. .get("/ping", || async { "pong" })
  10. .with_state(AppState);
  11. loop {
  12. let mut socket = TcpSocket::new(stack, &mut rx_buffer, &mut tx_buffer);
  13. if let Err(e) = socket.accept(80).await {
  14. log::warn!("accept error: {:?}", e);
  15. continue;
  16. }
  17. if let Some(IpEndpoint { addr, port }) = socket.remote_endpoint() {
  18. log::info!("connection from: {addr}:{port}");
  19. }
  20. let (read, write) = socket.split();
  21. if let Err(err) = router.serve(read, write).await {
  22. log::warn!("failed to serve request: {err:?}");
  23. };
  24. socket.flush().await.log_ignore();
  25. socket.close();
  26. Timer::after(Duration::from_millis(100)).await;
  27. socket.abort();
  28. }
  29. }