#![windows_subsystem = "windows"]
extern crate tiny_http;
extern crate tether;
use std::thread;
use tether::{Handler, Window};
use tiny_http::{Header, Method, Response, Server, StatusCode};
fn main() {
let server = Server::http("127.0.0.1:0").unwrap();
let addr = server.server_addr();
thread::spawn(move || {
for req in server.incoming_requests() {
let res = match (req.method(), req.url()) {
(&Method::Get, "/life.wasm") => {
let life = include_bytes!("life.wasm");
Response::new(
StatusCode(200),
vec![
header("Content-Type", "application/wasm"),
header("Access-Control-Allow-Origin", "*"),
],
life as &[u8],
None,
None,
)
},
_ => {
Response::new(
StatusCode(404),
vec![],
&[] as &[u8],
None,
None,
)
}
};
req.respond(res).unwrap();
}
});
tether::builder()
.html(include_str!("binary.html"))
.handler(App { port: addr.port() })
.start();
}
struct App {
port: u16,
}
impl Handler for App {
fn message(&mut self, win: Window, msg: &str) {
match msg {
"load" => {
win.eval(&format!("main({})", self.port));
},
_ => panic!("Unknown message."),
}
}
}
fn header(name: &str, value: &str) -> Header {
Header::from_bytes(name.as_bytes(), value.as_bytes()).unwrap()
}