From 1c27a83409a7f51c5d07098cb6ca65bcee870d9c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 17 May 2025 17:23:29 +0200 Subject: a --- src/main.rs | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..a08ae6b --- /dev/null +++ b/src/main.rs @@ -0,0 +1,78 @@ +pub mod ui; +pub mod worker_ws; + +use anyhow::Result; +use axum::{Router, routing::get}; +use serde_json::{Map, Value}; +use std::{ + collections::{HashMap, HashSet}, + sync::Arc, +}; +use tokio::{ + fs::{File, read_to_string, rename}, + io::AsyncWriteExt, + net::TcpListener, + sync::{RwLock, mpsc::Sender}, +}; +use worker_ws::{WorkerID, WorkerResponse, worker_websocket}; + +struct Worker { + accept: usize, + name: String, + sources: Vec, + send: Sender, +} + +#[derive(Default)] +struct State { + worker_id_counter: WorkerID, + workers: HashMap, + + metadata: HashMap>, + queue: HashSet, + loading: HashSet, + complete: HashSet, +} + +#[tokio::main] +async fn main() -> Result<()> { + env_logger::init_from_env("LOG"); + let mut state = State::default(); + state.load().await?; + let router = Router::new() + .route("/", get(async || "Hello world!")) + .route("/worker_ws", get(worker_websocket)) + .with_state(Arc::new(RwLock::new(state))); + let listener = TcpListener::bind("127.0.0.1:8080").await?; + axum::serve(listener, router).await?; + Ok(()) +} + +impl State { + pub async fn load(&mut self) -> Result<()> { + self.metadata = serde_json::from_str(&read_to_string("metadata.json").await?)?; + self.queue = serde_json::from_str(&read_to_string("queue.json").await?)?; + self.complete = serde_json::from_str(&read_to_string("complete.json").await?)?; + Ok(()) + } + pub async fn save(&mut self) -> Result<()> { + File::create("metadata.json~") + .await? + .write_all(&serde_json::to_vec(&self.metadata)?) + .await?; + File::create("queue.json~") + .await? + .write_all(&serde_json::to_vec(&self.queue)?) + .await?; + File::create("complete.json~") + .await? + .write_all(&serde_json::to_vec(&self.complete)?) + .await?; + + rename("metadata.json~", "metadata.json").await?; + rename("queue.json~", "queue.json").await?; + rename("complete.json~", "complete.json").await?; + + Ok(()) + } +} -- cgit v1.2.3-70-g09d2