1
0
mirror of https://github.com/4yn/slidershim.git synced 2025-02-02 04:27:58 +01:00

integration hell

This commit is contained in:
4yn 2022-02-05 04:45:34 +08:00
parent 786ac83c4c
commit 263d21c0a6
7 changed files with 63 additions and 33 deletions

View File

@ -4,16 +4,16 @@ use std::{io, time::Duration};
use tokio::time::sleep; use tokio::time::sleep;
use slidershim::slider_io::{ // use slidershim::slider_io::{
brokenithm::BrokenithmJob, controller_state::FullState, worker::AsyncWorker, // brokenithm::BrokenithmJob, controller_state::FullState, worker::AsyncWorker,
}; // };
fn main() { fn main() {
env_logger::Builder::new() env_logger::Builder::new()
.filter_level(log::LevelFilter::Debug) .filter_level(log::LevelFilter::Debug)
.init(); .init();
let worker = AsyncWorker::new("brokenithm", BrokenithmJob::new(FullState::new())); // let worker = AsyncWorker::new("brokenithm", BrokenithmJob::new(FullState::new()));
let mut input = String::new(); let mut input = String::new();
let string = io::stdin().read_line(&mut input).unwrap(); let string = io::stdin().read_line(&mut input).unwrap();
} }

View File

@ -29,15 +29,19 @@ fn quit_app() {
} }
fn main() { fn main() {
env_logger::init(); env_logger::Builder::new()
.filter_level(log::LevelFilter::Debug)
.init();
let config = Arc::new(Mutex::new(Some(slider_io::Config::default()))); let config = Arc::new(Mutex::new(Some(slider_io::Config::default())));
let manager: slider_io::Manager; let manager: Arc<Mutex<Option<slider_io::Manager>>> = Arc::new(Mutex::new(None));
{ {
let c = config.lock().unwrap(); let config_handle = config.lock().unwrap();
let cr = c.as_ref().unwrap(); let config_handle_ref = config_handle.as_ref().unwrap();
cr.save(); config_handle_ref.save();
manager = slider_io::Manager::new(cr.clone()); let mut manager_handle = manager.lock().unwrap();
manager_handle.take();
manager_handle.replace(slider_io::Manager::new(config_handle_ref.clone()));
} }
tauri::Builder::default() tauri::Builder::default()
@ -85,13 +89,19 @@ fn main() {
}); });
let config_clone = Arc::clone(&config); let config_clone = Arc::clone(&config);
let manager_clone = Arc::clone(&manager);
app.listen_global("setConfig", move |event| { app.listen_global("setConfig", move |event| {
let payload = event.payload().unwrap(); let payload = event.payload().unwrap();
info!("Config applied {}", payload); info!("Config applied {}", payload);
if let Some(new_config) = slider_io::Config::from_str(payload) { if let Some(new_config) = slider_io::Config::from_str(payload) {
let mut config_handle = config_clone.lock().unwrap(); let mut config_handle = config_clone.lock().unwrap();
config_handle.take();
config_handle.replace(new_config); config_handle.replace(new_config);
config_handle.as_ref().unwrap().save(); let config_handle_ref = config_handle.as_ref().unwrap();
config_handle_ref.save();
let mut manager_handle = manager_clone.lock().unwrap();
manager_handle.take();
manager_handle.replace(slider_io::Manager::new(config_handle_ref.clone()));
} }
}); });

View File

@ -176,8 +176,10 @@ pub struct BrokenithmJob {
} }
impl BrokenithmJob { impl BrokenithmJob {
pub fn new(state: FullState) -> Self { pub fn new(state: &FullState) -> Self {
Self { state } Self {
state: state.clone(),
}
} }
} }

View File

@ -1,14 +1,20 @@
use log::info; use log::info;
use crate::slider_io::{ use crate::slider_io::{
config::Config, controller_state::FullState, device::HidDeviceJob, led::LedJob, brokenithm::BrokenithmJob,
output::OutputJob, worker::ThreadWorker, config::{Config, DeviceMode},
controller_state::FullState,
device::HidDeviceJob,
led::LedJob,
output::OutputJob,
worker::{AsyncWorker, ThreadWorker},
}; };
pub struct Manager { pub struct Manager {
state: FullState, state: FullState,
config: Config, config: Config,
device_worker: ThreadWorker, device_worker: Option<ThreadWorker>,
brokenithm_worker: Option<AsyncWorker>,
output_worker: ThreadWorker, output_worker: ThreadWorker,
led_worker: ThreadWorker, led_worker: ThreadWorker,
} }
@ -21,10 +27,20 @@ impl Manager {
info!("LED config {:?}", config.led_mode); info!("LED config {:?}", config.led_mode);
let state = FullState::new(); let state = FullState::new();
let device_worker = ThreadWorker::new(
let (device_worker, brokenithm_worker) = match &config.device_mode {
DeviceMode::Brokenithm { .. } => (
None,
Some(AsyncWorker::new("brokenithm", BrokenithmJob::new(&state))),
),
other => (
Some(ThreadWorker::new(
"device", "device",
HidDeviceJob::from_config(&state, &config.device_mode), HidDeviceJob::from_config(&state, other),
); )),
None,
),
};
let output_worker = ThreadWorker::new("output", OutputJob::new(&state, &config.output_mode)); let output_worker = ThreadWorker::new("output", OutputJob::new(&state, &config.output_mode));
let led_worker = ThreadWorker::new("led", LedJob::new(&state, &config.led_mode)); let led_worker = ThreadWorker::new("led", LedJob::new(&state, &config.led_mode));
@ -32,6 +48,7 @@ impl Manager {
state, state,
config, config,
device_worker, device_worker,
brokenithm_worker,
output_worker, output_worker,
led_worker, led_worker,
} }

View File

@ -1,11 +1,11 @@
mod config; mod config;
mod utils; mod utils;
pub mod worker; mod worker;
pub mod controller_state; mod controller_state;
mod voltex; mod voltex;
pub mod brokenithm; mod brokenithm;
mod gamepad; mod gamepad;
mod keyboard; mod keyboard;

View File

@ -115,19 +115,20 @@ impl Drop for AsyncWorker {
if self.stop_signal.is_some() { if self.stop_signal.is_some() {
let send_stop = self.stop_signal.take().unwrap(); let send_stop = self.stop_signal.take().unwrap();
self.runtime.block_on(async move {
send_stop.send(()).unwrap(); send_stop.send(()).unwrap();
}); // self.runtime.block_on(async move {
// send_stop.send(()).unwrap();
// });
} }
let name = self.name; let name = self.name;
if self.task.is_some() { if self.task.is_some() {
let task = self.task.take().unwrap(); // let task = self.task.take().unwrap();
self.runtime.block_on(async move { // self.runtime.block_on(async move {
task.await; // task.await;
info!("Async worker stopping internal {}", name); // info!("Async worker stopping internal {}", name);
}); // });
} }
} }
} }