mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-01-22 17:33:19 +01:00
Use smol async for daemon and daemon-user
This commit is contained in:
67
Cargo.lock
generated
67
Cargo.lock
generated
@@ -280,10 +280,8 @@ dependencies = [
|
|||||||
name = "daemon"
|
name = "daemon"
|
||||||
version = "4.1.0"
|
version = "4.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-executor",
|
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"futures",
|
|
||||||
"log",
|
"log",
|
||||||
"logind-zbus",
|
"logind-zbus",
|
||||||
"rog_anime",
|
"rog_anime",
|
||||||
@@ -295,6 +293,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"smol",
|
||||||
"sysfs-class",
|
"sysfs-class",
|
||||||
"toml",
|
"toml",
|
||||||
"udev",
|
"udev",
|
||||||
@@ -307,13 +306,13 @@ name = "daemon-user"
|
|||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dirs",
|
"dirs",
|
||||||
"futures",
|
|
||||||
"rog_anime",
|
"rog_anime",
|
||||||
"rog_dbus",
|
"rog_dbus",
|
||||||
"rog_supported",
|
"rog_supported",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"smol",
|
||||||
"zbus",
|
"zbus",
|
||||||
"zvariant",
|
"zvariant",
|
||||||
"zvariant_derive",
|
"zvariant_derive",
|
||||||
@@ -458,49 +457,12 @@ dependencies = [
|
|||||||
"num-traits",
|
"num-traits",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures"
|
|
||||||
version = "0.3.21"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e"
|
|
||||||
dependencies = [
|
|
||||||
"futures-channel",
|
|
||||||
"futures-core",
|
|
||||||
"futures-executor",
|
|
||||||
"futures-io",
|
|
||||||
"futures-sink",
|
|
||||||
"futures-task",
|
|
||||||
"futures-util",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-channel"
|
|
||||||
version = "0.3.21"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
|
|
||||||
dependencies = [
|
|
||||||
"futures-core",
|
|
||||||
"futures-sink",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-core"
|
name = "futures-core"
|
||||||
version = "0.3.21"
|
version = "0.3.21"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
|
checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-executor"
|
|
||||||
version = "0.3.21"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
|
|
||||||
dependencies = [
|
|
||||||
"futures-core",
|
|
||||||
"futures-task",
|
|
||||||
"futures-util",
|
|
||||||
"num_cpus",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-io"
|
name = "futures-io"
|
||||||
version = "0.3.21"
|
version = "0.3.21"
|
||||||
@@ -522,17 +484,6 @@ dependencies = [
|
|||||||
"waker-fn",
|
"waker-fn",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "futures-macro"
|
|
||||||
version = "0.3.21"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-sink"
|
name = "futures-sink"
|
||||||
version = "0.3.21"
|
version = "0.3.21"
|
||||||
@@ -551,13 +502,9 @@ version = "0.3.21"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
|
checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-io",
|
|
||||||
"futures-macro",
|
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
"memchr",
|
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"pin-utils",
|
"pin-utils",
|
||||||
"slab",
|
"slab",
|
||||||
@@ -821,16 +768,6 @@ dependencies = [
|
|||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num_cpus"
|
|
||||||
version = "1.13.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
|
|
||||||
dependencies = [
|
|
||||||
"hermit-abi",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num_threads"
|
name = "num_threads"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
.detach();
|
.detach();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
future::block_on(executor.tick());
|
smol::block_on(executor.tick());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,4 +29,4 @@ zbus = "^2.2"
|
|||||||
zvariant = "^3.0"
|
zvariant = "^3.0"
|
||||||
zvariant_derive = "^3.0"
|
zvariant_derive = "^3.0"
|
||||||
|
|
||||||
futures = { version = "0.3.19", features = ["executor", "thread-pool"] }
|
smol = "^1.2"
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
use futures::executor::ThreadPool;
|
|
||||||
use rog_dbus::RogDbusClientBlocking;
|
use rog_dbus::RogDbusClientBlocking;
|
||||||
use rog_user::{
|
use rog_user::{
|
||||||
ctrl_anime::{CtrlAnime, CtrlAnimeInner},
|
ctrl_anime::{CtrlAnime, CtrlAnimeInner},
|
||||||
user_config::*,
|
user_config::*,
|
||||||
DBUS_NAME,
|
DBUS_NAME,
|
||||||
};
|
};
|
||||||
|
use smol::Executor;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
use zbus::Connection;
|
use zbus::Connection;
|
||||||
@@ -23,44 +23,48 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
let mut config = UserConfig::new();
|
let mut config = UserConfig::new();
|
||||||
config.load_config()?;
|
config.load_config()?;
|
||||||
|
|
||||||
let anime_config = UserAnimeConfig::load_config(config.active_anime)?;
|
let executor = Executor::new();
|
||||||
let anime = anime_config.create_anime()?;
|
|
||||||
|
|
||||||
let anime_config = Arc::new(Mutex::new(anime_config));
|
|
||||||
let thread_pool = ThreadPool::new().unwrap();
|
|
||||||
|
|
||||||
let early_return = Arc::new(AtomicBool::new(false));
|
let early_return = Arc::new(AtomicBool::new(false));
|
||||||
thread_pool.spawn_ok(async move {
|
// Set up the anime data and run loop/thread
|
||||||
// Create server
|
if supported.anime_ctrl.0 {
|
||||||
let mut connection = Connection::session().await.unwrap();
|
let anime_config = UserAnimeConfig::load_config(config.active_anime)?;
|
||||||
connection.request_name(DBUS_NAME).await.unwrap();
|
let anime = anime_config.create_anime()?;
|
||||||
|
let anime_config = Arc::new(Mutex::new(anime_config));
|
||||||
|
|
||||||
// Set up the anime data and run loop/thread
|
executor
|
||||||
if supported.anime_ctrl.0 {
|
.spawn(async move {
|
||||||
// Inner behind mutex required for thread safety
|
// Create server
|
||||||
let inner = Arc::new(Mutex::new(
|
let mut connection = Connection::session().await.unwrap();
|
||||||
CtrlAnimeInner::new(anime, client, early_return.clone()).unwrap(),
|
connection.request_name(DBUS_NAME).await.unwrap();
|
||||||
));
|
|
||||||
// Need new client object for dbus control part
|
// Inner behind mutex required for thread safety
|
||||||
let (client, _) = RogDbusClientBlocking::new().unwrap();
|
let inner = Arc::new(Mutex::new(
|
||||||
let anime_control =
|
CtrlAnimeInner::new(anime, client, early_return.clone()).unwrap(),
|
||||||
CtrlAnime::new(anime_config, inner.clone(), client, early_return).unwrap();
|
));
|
||||||
anime_control.add_to_server(&mut connection).await;
|
// Need new client object for dbus control part
|
||||||
loop {
|
let (client, _) = RogDbusClientBlocking::new().unwrap();
|
||||||
if let Ok(inner) = inner.clone().try_lock() {
|
let anime_control =
|
||||||
inner.run().ok();
|
CtrlAnime::new(anime_config, inner.clone(), client, early_return).unwrap();
|
||||||
|
anime_control.add_to_server(&mut connection).await;
|
||||||
|
loop {
|
||||||
|
if let Ok(inner) = inner.clone().try_lock() {
|
||||||
|
inner.run().ok();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
}
|
.detach();
|
||||||
// future::ready(())
|
}
|
||||||
});
|
|
||||||
|
|
||||||
// if supported.keyboard_led.per_key_led_mode {}
|
// if supported.keyboard_led.per_key_led_mode {
|
||||||
|
// executor
|
||||||
|
// .spawn(async move {
|
||||||
|
// //
|
||||||
|
// })
|
||||||
|
// .detach();
|
||||||
|
// }
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
std::thread::sleep(std::time::Duration::from_millis(1000));
|
smol::block_on(executor.tick());
|
||||||
// if let Err(err) = server.try_handle_next() {
|
|
||||||
// println!("{}", err);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,8 @@ rog_supported = { path = "../rog-supported" }
|
|||||||
rog_profiles = { path = "../rog-profiles" }
|
rog_profiles = { path = "../rog-profiles" }
|
||||||
rog_dbus = { path = "../rog-dbus" }
|
rog_dbus = { path = "../rog-dbus" }
|
||||||
|
|
||||||
async-executor = "1.4.1"
|
|
||||||
async-trait = "^0.1"
|
async-trait = "^0.1"
|
||||||
futures = { version = "0.3.19", features = ["executor", "thread-pool"] }
|
smol = "^1.2"
|
||||||
|
|
||||||
rusb = "^0.9"
|
rusb = "^0.9"
|
||||||
udev = "^0.6"
|
udev = "^0.6"
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ use std::sync::{Arc, Mutex};
|
|||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use ::zbus::Connection;
|
use ::zbus::Connection;
|
||||||
use futures::executor::ThreadPool;
|
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
use log::{error, info, warn};
|
use log::{error, info, warn};
|
||||||
|
use smol::Executor;
|
||||||
|
|
||||||
use daemon::ctrl_anime::config::AnimeConfig;
|
use daemon::ctrl_anime::config::AnimeConfig;
|
||||||
use daemon::ctrl_anime::zbus::CtrlAnimeZbus;
|
use daemon::ctrl_anime::zbus::CtrlAnimeZbus;
|
||||||
@@ -61,14 +61,14 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
info!(" rog-profiles v{}", rog_profiles::VERSION);
|
info!(" rog-profiles v{}", rog_profiles::VERSION);
|
||||||
info!("rog-supported v{}", rog_supported::VERSION);
|
info!("rog-supported v{}", rog_supported::VERSION);
|
||||||
|
|
||||||
let mut pool = ThreadPool::new()?;
|
let mut executor = Executor::new();
|
||||||
|
|
||||||
futures::executor::block_on(start_daemon(&mut pool))?;
|
smol::block_on(start_daemon(&mut executor))?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The actual main loop for the daemon
|
/// The actual main loop for the daemon
|
||||||
async fn start_daemon(thread_pool: &mut ThreadPool) -> Result<(), Box<dyn Error>> {
|
async fn start_daemon(executor: &mut Executor<'_>) -> Result<(), Box<dyn Error>> {
|
||||||
let supported = SupportedFunctions::get_supported();
|
let supported = SupportedFunctions::get_supported();
|
||||||
print_board_info();
|
print_board_info();
|
||||||
println!("{}", serde_json::to_string_pretty(&supported)?);
|
println!("{}", serde_json::to_string_pretty(&supported)?);
|
||||||
@@ -140,9 +140,11 @@ async fn start_daemon(thread_pool: &mut ThreadPool) -> Result<(), Box<dyn Error>
|
|||||||
zbus.add_to_server(&mut connection).await;
|
zbus.add_to_server(&mut connection).await;
|
||||||
|
|
||||||
let task = CtrlAnimeTask::new(inner);
|
let task = CtrlAnimeTask::new(inner);
|
||||||
thread_pool.spawn_ok(async move {
|
executor
|
||||||
task.do_task().await.ok();
|
.spawn(async move {
|
||||||
});
|
task.do_task().await.ok();
|
||||||
|
})
|
||||||
|
.detach();
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
error!("AniMe control: {}", err);
|
error!("AniMe control: {}", err);
|
||||||
@@ -165,9 +167,11 @@ async fn start_daemon(thread_pool: &mut ThreadPool) -> Result<(), Box<dyn Error>
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let task = CtrlKbdLedTask::new(inner);
|
let task = CtrlKbdLedTask::new(inner);
|
||||||
thread_pool.spawn_ok(async move {
|
executor
|
||||||
task.do_task().await.ok();
|
.spawn(async move {
|
||||||
});
|
task.do_task().await.ok();
|
||||||
|
})
|
||||||
|
.detach();
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
error!("Keyboard control: {}", err);
|
error!("Keyboard control: {}", err);
|
||||||
|
|||||||
Reference in New Issue
Block a user