cargo_hax/engine_debug_webapp/
mod.rs1use tiny_http::{Header, Response, Server};
2
3fn get_server() -> Server {
4 let mut port = std::env::var_os("HAX_DEBUGGER_PORT")
5 .and_then(|s| s.into_string().ok())
6 .and_then(|s| s.parse::<u32>().ok())
7 .unwrap_or(8000);
8 loop {
9 if let Ok(server) = Server::http(format!("0.0.0.0:{}", port)) {
10 eprintln!("Hax webapp is available on http://localhost:{:?}", port);
11 return server;
12 }
13 std::thread::sleep(std::time::Duration::from_millis(300));
14 eprintln!("Could not listen to port {:?}, trying another", port);
15 port += 1;
16 }
17}
18
19pub fn run(get_json: impl Fn() -> String) {
20 let server = get_server();
21 let ct_html = Header::from_bytes(&b"Content-Type"[..], &b"text/html"[..]).unwrap();
22 let ct_js = Header::from_bytes(&b"Content-Type"[..], &b"text/javascript"[..]).unwrap();
23 let ct_utf8 = Header::from_bytes(&b"charset"[..], &b"utf-8"[..]).unwrap();
24 for request in server.incoming_requests() {
25 let response = match request.url() {
26 "/" => Response::from_string(include_str!("static/index.html"))
27 .with_header(ct_html.clone())
28 .with_header(ct_utf8.clone()),
29 "/script.js" => Response::from_string(include_str!("static/script.js"))
30 .with_header(ct_js.clone())
31 .with_header(ct_utf8.clone()),
32 path if path.starts_with("/debug-hax-engine.json") => {
33 Response::from_string(get_json()).with_header(ct_utf8.clone())
34 }
35 _ => Response::from_string("Unknown route".to_string()).with_status_code(404),
36 };
37 let _ = request.respond(response);
38 }
39}