updates
This commit is contained in:
parent
1d4a3f8615
commit
5d390e495c
@ -9,7 +9,7 @@ use tokio::{fs::{OpenOptions}, io::AsyncWriteExt, sync::Mutex};
|
||||
use tokio_stream::{wrappers::ReceiverStream};
|
||||
use tonic::{transport::Server, Request, Response, Status};
|
||||
use anyhow::Context as _;
|
||||
use tracing::{info, trace, warn};
|
||||
use tracing::{info, trace, warn, error};
|
||||
use tracing_subscriber::{filter::EnvFilter, fmt, prelude::*};
|
||||
use tracing_appender::non_blocking;
|
||||
use tracing_appender::non_blocking::WorkerGuard;
|
||||
@ -50,6 +50,32 @@ fn init_tracing() -> anyhow::Result<WorkerGuard> {
|
||||
Ok(guard)
|
||||
}
|
||||
|
||||
async fn open_with_retry(
|
||||
path: &str,
|
||||
retries: usize,
|
||||
delay_ms: u64,
|
||||
) -> anyhow::Result<tokio::fs::File> {
|
||||
for attempt in 0..=retries {
|
||||
match OpenOptions::new()
|
||||
.write(true)
|
||||
.custom_flags(libc::O_NONBLOCK)
|
||||
.open(path)
|
||||
.await
|
||||
{
|
||||
Ok(f) => {
|
||||
info!("✅ opened {path} on attempt #{attempt}");
|
||||
return Ok(f);
|
||||
}
|
||||
Err(e) if attempt < retries => {
|
||||
warn!("🕒 {path} not ready ({e}); retrying… #{attempt}"); // will retry
|
||||
tokio::time::sleep(Duration::from_millis(delay_ms)).await;
|
||||
}
|
||||
Err(e) => return Err(e).with_context(|| format!("giving up on {path}")),
|
||||
}
|
||||
}
|
||||
unreachable!()
|
||||
}
|
||||
|
||||
/*─────────────────── tonic service ─────────────────────*/
|
||||
struct Handler {
|
||||
kb: Arc<Mutex<tokio::fs::File>>,
|
||||
@ -63,14 +89,8 @@ impl Handler {
|
||||
gadget.cycle()?;
|
||||
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||
|
||||
let kb = OpenOptions::new()
|
||||
.write(true).custom_flags(libc::O_NONBLOCK)
|
||||
.open("/dev/hidg0").await
|
||||
.context("opening /dev/hidg0")?;
|
||||
let ms = OpenOptions::new()
|
||||
.write(true).custom_flags(libc::O_NONBLOCK)
|
||||
.open("/dev/hidg1").await
|
||||
.context("opening /dev/hidg1")?;
|
||||
let kb = open_with_retry("/dev/hidg0", 10, 100).await?;
|
||||
let ms = open_with_retry("/dev/hidg1", 10, 100).await?;
|
||||
|
||||
Ok(Self { kb: Arc::new(Mutex::new(kb)),
|
||||
ms: Arc::new(Mutex::new(ms)),
|
||||
@ -219,10 +239,15 @@ async fn main() -> anyhow::Result<()> {
|
||||
// }
|
||||
// });
|
||||
|
||||
println!("🌐 lesavka-server listening on 0.0.0.0:50051");
|
||||
Server::builder()
|
||||
.add_service(RelayServer::new(handler))
|
||||
.serve(([0, 0, 0, 0], 50051).into())
|
||||
.await?;
|
||||
info!("🌐 lesavka‑server listening on 0.0.0.0:50051");
|
||||
|
||||
if let Err(e) = Server::builder()
|
||||
.add_service(RelayServer::new(handler))
|
||||
.serve(([0, 0, 0, 0], 50051).into())
|
||||
.await
|
||||
{
|
||||
error!("💥 gRPC server exited: {e:#}");
|
||||
std::process::exit(1);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user