//! `brahman-demo-broker` — broker standalone para demos. //! //! ente-zero (PID 1) es el broker "real" pero pesa toneladas //! (kernel surface, child subreaper, bus, brain, audit, etc). Este //! binario sólo arma `brahman_handshake::Server::bind` con un broker //! configurado, escucha en el socket default, y corre forever. //! //! Suficiente para que el script de bootstrap (y los 4 explorers) //! tengan algo a qué conectarse sin necesitar el bootstrap PID 1 //! completo. //! //! Variables de entorno respetadas: //! - `BRAHMAN_INIT_SOCKET` — path del Unix socket. Default: el //! resuelto por `brahman_handshake::transport::default_socket_path`. //! - `BRAHMAN_BROKER_CONTEXT` — context bias del broker (igual que //! ente-zero); afecta priority_contexts si las Cards lo declaran. //! - `RUST_LOG` — filtro de tracing (default `info`). use std::sync::Arc; use brahman_broker::{Broker, BrokerConfig, MatchStrategy}; use brahman_handshake::server::{Server, ServerConfig}; use brahman_handshake::transport; use tokio::sync::Mutex; #[tokio::main(flavor = "current_thread")] async fn main() -> std::io::Result<()> { tracing_subscriber::fmt() .with_env_filter( tracing_subscriber::EnvFilter::try_from_default_env() .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")), ) .init(); let context = std::env::var("BRAHMAN_BROKER_CONTEXT").ok(); let broker = Arc::new(Mutex::new(Broker::new(BrokerConfig { strategy: MatchStrategy::default(), current_context: context.clone(), }))); let socket = transport::default_socket_path(); tracing::info!( socket = %socket.display(), context = ?context, "brahman-demo-broker arranca" ); let server = Server::bind( &socket, ServerConfig { init_attached: false, broker: Some(broker), net: None, policy: None, }, )?; // Loop accept-forever. Cada conexión va a su propia tokio task — // sesiones independientes, ninguna bloquea a las otras. loop { let session = server.accept_one().await?; tokio::spawn(async move { if let Err(e) = session.handle().await { tracing::warn!(?e, "session terminó con error"); } }); } }