server/rwhod: varlink shenanigans
Some checks failed
Build and test / check (push) Failing after 1m19s
Build and test / build (push) Successful in 1m24s
Build and test / test (push) Successful in 2m47s
Build and test / docs (push) Successful in 3m2s

This commit is contained in:
2026-01-05 16:48:06 +09:00
parent 4f78b1ed1e
commit 0defac7a9f
6 changed files with 448 additions and 12 deletions

View File

@@ -4,8 +4,10 @@ use std::{
sync::Arc,
};
use anyhow::Context;
use roowho2_lib::server::rwhod::{
RWHOD_BROADCAST_PORT, rwhod_packet_receiver_task, rwhod_packet_sender_task,
RWHOD_BROADCAST_PORT, rwhod_client_server_task, rwhod_packet_receiver_task,
rwhod_packet_sender_task,
};
use tokio::sync::RwLock;
use tracing_subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt};
@@ -18,15 +20,26 @@ async fn main() -> anyhow::Result<()> {
.init();
let addr = SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, RWHOD_BROADCAST_PORT);
tracing::info!("Binding RWHOD socket to {}", addr);
let socket = Arc::new(tokio::net::UdpSocket::bind(addr).await?);
socket.set_broadcast(true)?;
tracing::debug!("Binding RWHOD socket to {}", addr);
let socket = tokio::net::UdpSocket::bind(addr)
.await
.context("Failed to bind RWHOD UDP socket")
.and_then(|socket| {
socket.set_broadcast(true)?;
Ok(socket)
})
.context("Failed to enable broadcast on RWHOD UDP socket")
.map(Arc::new)?;
let interfaces = roowho2_lib::server::rwhod::determine_relevant_interfaces()?;
let sender_task = rwhod_packet_sender_task(socket.clone(), interfaces);
let status_store = Arc::new(RwLock::new(HashMap::new()));
let receiver_task = rwhod_packet_receiver_task(socket.clone(), status_store);
let receiver_task = rwhod_packet_receiver_task(socket.clone(), status_store.clone());
tracing::debug!("Binding RWHOD client-server socket at /run/roowho2/rwhod.socket");
let client_server_socket = zlink::unix::bind("/run/roowho2/rwhod.varlink")?;
let client_server_task = rwhod_client_server_task(client_server_socket, status_store.clone());
tokio::select! {
res = sender_task => {
@@ -39,6 +52,11 @@ async fn main() -> anyhow::Result<()> {
eprintln!("RWHOD receiver task error: {}", err);
}
}
res = client_server_task => {
if let Err(err) = res {
eprintln!("RWHOD client-server task error: {}", err);
}
}
_ = tokio::signal::ctrl_c() => {
println!("Received Ctrl-C, shutting down.");
}

View File

@@ -1,4 +1,5 @@
use clap::Parser;
use roowho2_lib::server::rwhod::RwhodClientProxy;
/// Check who is logged in on local machines.
///
@@ -20,7 +21,18 @@ pub struct Args {
json: bool,
}
fn main() {
let _args = Args::parse();
unimplemented!()
#[tokio::main]
async fn main() {
let args = Args::parse();
let mut conn = zlink::unix::connect("/run/roowho2/rwhod.varlink")
.await
.expect("Failed to connect to rwhod server");
let reply = conn
.rwho(args.all)
.await
.expect("Failed to send rwho request");
println!("{:?}", reply);
}