From 439f184ac655eb649f056cdf0b9326dcc0af4648 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 18 May 2025 14:32:55 +0200 Subject: webui ws --- src/main.rs | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 0bba960..f8f4fba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,11 @@ +pub mod api; pub mod helper; pub mod webui; +pub mod webui_ws; pub mod worker_ws; use anyhow::Result; +use api::{api_complete_json, api_loading_json, api_queue_json}; use axum::{Router, routing::get}; use log::{debug, info}; use serde_json::{Map, Value}; @@ -15,9 +18,13 @@ use tokio::{ fs::{File, read_to_string, rename}, io::AsyncWriteExt, net::TcpListener, - sync::{RwLock, mpsc::Sender}, + sync::{ + RwLock, broadcast, + mpsc::{self}, + }, }; use webui::{webui, webui_style}; +use webui_ws::{WebuiEvent, webui_websocket}; use worker_ws::{WorkerID, WorkerResponse, worker_websocket}; pub struct Worker { @@ -25,13 +32,13 @@ pub struct Worker { name: String, task_kinds: Vec, assigned_tasks: HashSet, - send: Sender, + send: mpsc::Sender, } -#[derive(Default)] pub struct State { worker_id_counter: WorkerID, workers: HashMap, + webui_broadcast: broadcast::Sender>, metadata: HashMap>, queue: HashSet, @@ -47,13 +54,31 @@ async fn main() -> Result<()> { let router = Router::new() .route("/", get(webui)) .route("/style.css", get(webui_style)) + .route("/webui_ws", get(webui_websocket)) .route("/worker_ws", get(worker_websocket)) + .route("/api/queue.json", get(api_queue_json)) + .route("/api/complete.json", get(api_complete_json)) + .route("/api/loading.json", get(api_loading_json)) .with_state(Arc::new(RwLock::new(state))); let listener = TcpListener::bind("127.0.0.1:8080").await?; axum::serve(listener, router).await?; Ok(()) } +impl Default for State { + fn default() -> Self { + Self { + worker_id_counter: Default::default(), + workers: Default::default(), + webui_broadcast: broadcast::channel(1024).0, + metadata: Default::default(), + queue: Default::default(), + loading: Default::default(), + complete: Default::default(), + } + } +} + impl State { pub async fn load(&mut self) -> Result<()> { debug!("loading state"); -- cgit v1.2.3-70-g09d2