From 27ad93d749799ebaf78da45ad24231b9ed027bc1 Mon Sep 17 00:00:00 2001 From: Micheal Smith Date: Wed, 12 Nov 2025 05:56:07 -0600 Subject: [PATCH] Adding response FIFO. --- Cargo.lock | 13 +++++++++++++ Cargo.toml | 4 ++++ src/event_manager.rs | 24 +++++++++++++++++++++--- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a074606..1eee981 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1401,6 +1401,18 @@ dependencies = [ "tempfile", ] +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags", + "cfg-if", + "cfg_aliases", + "libc", +] + [[package]] name = "nom" version = "7.1.3" @@ -1973,6 +1985,7 @@ dependencies = [ "genai", "human-panic", "irc", + "nix", "rstest", "serde", "serde_json", diff --git a/Cargo.toml b/Cargo.toml index ff168eb..6d1b3e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,10 @@ serde_json = "1.0" tracing = "0.1" tracing-subscriber = "0.3" + [dependencies.nix] + version = "0.30.1" + features = [ "fs" ] + [dependencies.clap] version = "4.5" features = [ "derive" ] diff --git a/src/event_manager.rs b/src/event_manager.rs index 9b7fcf8..eaa0200 100644 --- a/src/event_manager.rs +++ b/src/event_manager.rs @@ -1,9 +1,15 @@ use std::{collections::VecDeque, path::Path, sync::Arc}; use color_eyre::Result; +//use nix::{NixPath, sys::stat, unistd::mkfifo}; use tokio::{ + // fs::File, io::AsyncWriteExt, - net::{UnixListener, UnixStream}, + net::{ + UnixListener, + UnixStream, + // unix::pipe::{self, Receiver}, + }, sync::{RwLock, broadcast}, }; use tracing::{error, info}; @@ -46,8 +52,20 @@ impl EventManager { Ok(()) } - pub async fn start_listening(self: Arc, path: impl AsRef) { - let listener = UnixListener::bind(path).unwrap(); + // NB: This assumes it has exclusive control of the FIFO. + // async fn start_fifo

(path: &P) -> Result<()> + // where + // P: AsRef + NixPath + ?Sized, + // { + // // Just delete the old FIFO if it exists. + // let _ = std::fs::remove_file(path); + // mkfifo(path, stat::Mode::S_IRWXU)?; + + // Ok(()) + // } + + pub async fn start_listening(self: Arc, broadcast_path: impl AsRef) { + let listener = UnixListener::bind(broadcast_path).unwrap(); loop { match listener.accept().await {