use worker_lib::spawn_rhai_worker; use rhai::Engine; use tokio::sync::mpsc; use tokio::signal; use log::info; #[tokio::main] async fn main() -> Result<(), Box> { // Initialize the logger env_logger::init(); let redis_url = "redis://127.0.0.1/"; let circle_name = "default".to_string(); let mut engine = Engine::new(); // Create a new, simple Rhai engine // Register a simple 'ping' function for the readiness check. engine.register_fn("ping", || -> String { "pong".to_string() }); // Create a channel for the shutdown signal let (shutdown_tx, shutdown_rx) = mpsc::channel(1); info!("Spawning Rhai worker for circle: {}", circle_name); // Spawn the worker let worker_handle = spawn_rhai_worker( 1, // circle_id circle_name.clone(), engine, redis_url.to_string(), shutdown_rx, false, // preserve_tasks ); info!("Worker spawned. Press Ctrl+C to shut down."); // Wait for Ctrl+C signal::ctrl_c().await?; info!("Ctrl+C received. Sending shutdown signal to worker."); let _ = shutdown_tx.send(()).await; // Wait for the worker to finish if let Err(e) = worker_handle.await? { eprintln!("Worker process finished with an error: {:?}", e); } info!("Worker has shut down gracefully."); Ok(()) }