fix unix listener

This commit is contained in:
Robin Appelman 2026-03-27 21:57:07 +01:00
commit 81ec03a6ec
3 changed files with 40 additions and 10 deletions

View file

@ -5,13 +5,13 @@ mod topic;
use crate::config::{Config, ListenConfig};
use crate::device::{
format_device_state, format_dsmr_state, format_mi_temp_state, format_rf_temp_state, Device,
DeviceStates,
Device, DeviceStates, format_device_state, format_dsmr_state, format_mi_temp_state,
format_rf_temp_state,
};
use crate::mqtt::mqtt_stream;
use crate::topic::Topic;
use clap::Parser;
use color_eyre::{eyre::WrapErr, Result};
use color_eyre::{Result, eyre::WrapErr};
use pin_utils::pin_mut;
use rumqttc::{AsyncClient, Publish, QoS};
@ -20,9 +20,9 @@ use std::pin::Pin;
use std::sync::{Arc, Mutex};
use std::time::Instant;
use tokio::net::UnixListener;
use tokio::signal::ctrl_c;
use tokio::task::spawn;
use tokio::time::{sleep, Duration};
use tokio_stream::wrappers::UnixListenerStream;
use tokio::time::{Duration, sleep};
use tokio_stream::{Stream, StreamExt};
use warp::Filter;
@ -97,14 +97,23 @@ async fn serve(device_states: Arc<Mutex<DeviceStates>>, config: Config) {
response
});
let cancel = async { ctrl_c().await.unwrap() };
match config.listen {
ListenConfig::Ip { address, port } => {
warp::serve(metrics).run((address, port)).await;
warp::serve(metrics)
.bind((address, port))
.await
.graceful(cancel)
.run()
.await;
}
ListenConfig::Unix { socket: path } => {
let listener = UnixListener::bind(path).unwrap();
let incoming = UnixListenerStream::new(listener);
warp::serve(metrics).incoming(incoming);
warp::serve(metrics)
.incoming(listener)
.graceful(cancel)
.run()
.await;
}
}
}