diff --git a/clover-hub/src/server/renderer/mod.rs b/clover-hub/src/server/renderer/mod.rs index 468b1d3..2db0169 100644 --- a/clover-hub/src/server/renderer/mod.rs +++ b/clover-hub/src/server/renderer/mod.rs @@ -16,10 +16,7 @@ use nexus::{ }; use queues::*; use std::sync::Arc; -use system_ui::{ - ExitState, - SystemUIIPC, -}; +use system_ui::SystemUIIPC; use tokio::sync::Mutex; use tokio_util::sync::CancellationToken; @@ -71,10 +68,11 @@ pub async fn renderer_main( display_registration_queue: queue![], }; - for (display_id, display) in store.config.lock().await.renderer.virtual_displays.clone() { + for (_display_id, display) in store.config.lock().await.renderer.virtual_displays.clone() { system_ui_ipc .display_registration_queue - .add(system_ui::AnyDisplayComponent::Virtual(display)); + .add(system_ui::AnyDisplayComponent::Virtual(display)) + .unwrap(); } // TODO: Add this as a CLI/Config option! @@ -99,7 +97,7 @@ pub async fn renderer_main( let ipc_recv_handle = tokio::task::spawn(async move { tokio::select! { _ = ipc_recv_token.cancelled() => { - debug!("ipc_recv exited"); + debug!("ipc_recv exited"); }, _ = handle_ipc_msg(ipc_rx) => {} } @@ -113,7 +111,7 @@ pub async fn renderer_main( info!("Cleaning up displays..."); - let _ = bevy_cancel_tx.send(ExitState::Success); + let _ = bevy_cancel_tx.send(bevy::prelude::AppExit::Success); // TODO: Clean up registered displays when server is shutting down. diff --git a/clover-hub/src/server/renderer/system_ui/mod.rs b/clover-hub/src/server/renderer/system_ui/mod.rs index 4148358..cdb6d0d 100644 --- a/clover-hub/src/server/renderer/system_ui/mod.rs +++ b/clover-hub/src/server/renderer/system_ui/mod.rs @@ -20,19 +20,10 @@ use bevy::{ }; use queues::*; use systems::{ - displays::{ - display_registrar, - vdisplay_registrar, - }, + displays::display_registrar, setup::setup, }; -pub enum ExitState { - Success, -} - -unsafe impl Sync for ExitState {} - #[derive(Debug, Clone)] pub enum AnyDisplayComponent { Physical(PhysicalDisplayComponent), @@ -41,17 +32,30 @@ pub enum AnyDisplayComponent { #[derive(Resource)] pub struct SystemUIIPC { - pub exit_channel: RecvSync, + pub exit_channel: RecvSync, pub display_registration_queue: Queue, } +pub fn shutdown_system( + ipc: Res, + mut app_exit_events: ResMut>, +) { + match ipc.exit_channel.0.try_recv() { + Ok(exit_state) => { + app_exit_events.send(exit_state); + } + Err(_) => {} + } +} + pub fn system_ui_main(custom_bevy_ipc: SystemUIIPC, disable_winit: Option) { let mut app = App::new(); app .insert_resource(custom_bevy_ipc) .add_systems(Startup, setup) - .add_systems(Update, (vdisplay_registrar, display_registrar).chain()); + .add_systems(Update, display_registrar) + .add_systems(Update, shutdown_system); #[cfg(feature = "compositor")] match disable_winit { diff --git a/clover-hub/src/server/renderer/system_ui/systems/displays/mod.rs b/clover-hub/src/server/renderer/system_ui/systems/displays/mod.rs index 61be1fe..30802c3 100644 --- a/clover-hub/src/server/renderer/system_ui/systems/displays/mod.rs +++ b/clover-hub/src/server/renderer/system_ui/systems/displays/mod.rs @@ -19,8 +19,6 @@ use bevy::window::{ use log::warn; use queues::*; -pub fn vdisplay_registrar(mut commands: Commands, mut ipc: ResMut) {} - pub fn display_registrar( mut commands: Commands, mut ipc: ResMut,