44 lines
1.3 KiB
Rust
44 lines
1.3 KiB
Rust
use std::{sync::Arc, thread};
|
|
|
|
use crow::*;
|
|
use matchit::Router;
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
let database_context = DatabaseContext::create("./db")?;
|
|
|
|
let server =
|
|
Arc::new(tiny_http::Server::http("localhost:8000").expect("Could not bind localhost:8000"));
|
|
|
|
let mut guards = Vec::with_capacity(4);
|
|
|
|
// router.insert("/upload", &routes::upload::upload_route);
|
|
// router.insert("/image", &routes::image::image_route);
|
|
|
|
for _ in 0..4 {
|
|
let server = server.clone();
|
|
let db = database_context.clone();
|
|
let mut router: Router<&dyn Handler> = Router::new();
|
|
router.insert("/get/:id", &routes::get::GetHandler)?;
|
|
router.insert("/upload", &routes::upload::UploadHandler)?;
|
|
router.insert("/image/upload", &routes::image::ImageUploadHandler)?;
|
|
router.insert("/image/get/:id/:format", &routes::image::ImageGetHandler)?;
|
|
|
|
let guard = thread::spawn(move || loop {
|
|
let request = server.recv().unwrap();
|
|
// i don't like this alloc
|
|
let url = request.url().to_owned();
|
|
|
|
let matched = router.at(&url).unwrap();
|
|
matched.value.respond(request, &db, matched.params).unwrap();
|
|
});
|
|
|
|
guards.push(guard);
|
|
}
|
|
|
|
for guard in guards {
|
|
guard.join().unwrap();
|
|
}
|
|
|
|
Ok(())
|
|
}
|