// nac-multi-jurisdiction/src/discovery.rs // Issue #59: 辖区感知节点发现 use crate::jurisdiction::JurisdictionId; /// 辖区感知节点发现 pub struct NodeDiscovery { known_nodes: Vec, } #[derive(Debug, Clone)] pub struct NodeInfo { pub node_id: [u8; 32], pub jurisdiction_id: JurisdictionId, pub endpoint: String, pub is_active: bool, } impl NodeDiscovery { pub fn new() -> Self { NodeDiscovery { known_nodes: Vec::new() } } /// 注册节点 pub fn register_node(&mut self, info: NodeInfo) { self.known_nodes.push(info); } /// 查找指定辖区的节点 pub fn find_by_jurisdiction(&self, jid: &JurisdictionId) -> Vec<&NodeInfo> { self.known_nodes.iter() .filter(|n| &n.jurisdiction_id == jid && n.is_active) .collect() } /// 获取所有活跃节点数量 pub fn active_count(&self) -> usize { self.known_nodes.iter().filter(|n| n.is_active).count() } } impl Default for NodeDiscovery { fn default() -> Self { Self::new() } } /// 辖区感知路由器 pub struct JurisdictionAwareRouter { discovery: NodeDiscovery, } impl JurisdictionAwareRouter { pub fn new(discovery: NodeDiscovery) -> Self { JurisdictionAwareRouter { discovery } } /// 路由到目标辖区 pub fn route_to(&self, target_jid: &JurisdictionId) -> Option<&NodeInfo> { self.discovery.find_by_jurisdiction(target_jid).into_iter().next() } }