feat(timer): better subscription update timer after core startup

This commit is contained in:
Tunglies
2025-11-15 21:18:35 +08:00
parent 8654bad6b0
commit e66b8e7894

View File

@@ -1,5 +1,7 @@
use crate::{ use crate::{
config::Config, core::sysopt::Sysopt, feat, logging, logging_error, singleton, config::Config,
core::{CoreManager, manager::RunningMode, sysopt::Sysopt},
feat, logging, logging_error, singleton,
utils::logging::Type, utils::logging::Type,
}; };
use anyhow::{Context as _, Result}; use anyhow::{Context as _, Result};
@@ -392,6 +394,7 @@ impl Timer {
.spawn_async_routine(move || { .spawn_async_routine(move || {
let uid = uid.clone(); let uid = uid.clone();
Box::pin(async move { Box::pin(async move {
Self::wait_untile_core_manager(Duration::from_millis(1000)).await;
Self::wait_until_sysopt(Duration::from_millis(1000)).await; Self::wait_until_sysopt(Duration::from_millis(1000)).await;
Self::async_task(&uid).await; Self::async_task(&uid).await;
}) as Pin<Box<dyn std::future::Future<Output = ()> + Send>> }) as Pin<Box<dyn std::future::Future<Output = ()> + Send>>
@@ -523,10 +526,28 @@ impl Timer {
Self::emit_update_event(uid, false); Self::emit_update_event(uid, false);
} }
async fn wait_untile_core_manager(max_wait: Duration) {
let _ = timeout(max_wait, async {
while *CoreManager::global().get_running_mode() != RunningMode::NotRunning {
logging!(
debug,
Type::Timer,
"Waiting for CoreManager to be initialized..."
);
sleep(Duration::from_millis(30)).await;
}
})
.await;
}
async fn wait_until_sysopt(max_wait: Duration) { async fn wait_until_sysopt(max_wait: Duration) {
let _ = timeout(max_wait, async { let _ = timeout(max_wait, async {
while !Sysopt::global().is_initialed() { while !Sysopt::global().is_initialed() {
logging!(warn, Type::Timer, "Waiting for Sysopt to be initialized..."); logging!(
debug,
Type::Timer,
"Waiting for Sysopt to be initialized..."
);
sleep(Duration::from_millis(30)).await; sleep(Duration::from_millis(30)).await;
} }
}) })