4.1 KiB
4.1 KiB
LocalFinder 实现说明
📋 概述
已成功构建 LocalFinder 结构的基础框架,用于 Iroh 的局域网设备发现功能。由于 Iroh v0.97 API 发生重大变更,当前实现为占位符版本。
✅ 已完成的工作
1. 文件结构
创建了以下文件:
src/iroh/local_find.rs- LocalFinder 核心实现src/iroh/mod.rs- Iroh 模块导出- Tauri Commands - 在
handlers/tauri_handlers.rs中添加了 5 个新的命令处理器
2. LocalFinder 结构
pub struct LocalFinder {
node_id: String,
}
已实现的方法:
new()- 创建局域网发现管理器(占位符)local_id()- 获取本地节点 ID
3. Tauri Commands
已添加以下命令供前端调用:
initialize_local_finder()- 初始化局域网发现管理器start_discovery()- 开始设备发现(占位符)stop_discovery()- 停止设备发现(占位符)get_local_node_id()- 获取本地节点 IDget_discovered_peers()- 获取发现的设备列表(占位符)
4. 集成到应用
- ✅ 更新了
lib.rs导出LocalFinder - ✅ 在 Tauri 应用中注册了
LocalFinder状态管理 - ✅ 将所有新 commands 添加到 invoke_handler
⚠️ 当前限制
Iroh API 变更问题
Iroh v0.97 的 API 与早期版本有很大不同,主要问题包括:
Endpoint::builder()- 现在需要Presettrait 参数SecretKey::generate()- 需要特定类型的 RNGMdnsAddressLookup- MDNS 发现 API 已变更- 依赖冲突 -
rand和rand_core版本兼容性问题
占位符实现
当前代码使用占位符实现,仅用于演示结构和接口设计。
🔧 下一步工作
需要查阅的文档
- Iroh v0.97 官方文档 - https://docs.rs/iroh/latest/iroh/
- Iroh GitHub 仓库 - https://github.com/n0-computer/iroh
- Iroh Examples - 查看最新的示例代码
待实现的功能
-
正确的 Endpoint 初始化
// 需要找到正确的方式 let endpoint = Endpoint::builder(preset).bind().await?; -
SecretKey 生成
// 需要使用正确的 RNG let secret_key = SecretKey::generate(/* correct rng */); -
MDNS 发现集成
// 需要查阅新的 API let mdns = MdnsAddressLookup::new()?; endpoint.discovery().add(mdns)?; -
设备连接和管理
connect_to_peer()- 连接到发现的设备disconnect_peer()- 断开连接get_known_peers()- 获取已知设备列表
📝 使用示例(当前占位符)
Rust 代码
use crate::iroh::LocalFinder;
// 创建 LocalFinder
let finder = LocalFinder::new().await?;
// 获取节点 ID
let node_id = finder.local_id();
println!("Local node ID: {}", node_id);
TypeScript/JavaScript 调用(前端)
// 初始化
const nodeId = await invoke('initialize_local_finder');
console.log(nodeId);
// 获取本地节点 ID
const localId = await invoke('get_local_node_id');
console.log(localId);
// 开始发现(占位符)
await invoke('start_discovery', { durationSecs: 60 });
// 获取发现的设备(占位符)
const peers = await invoke('get_discovered_peers');
console.log(peers);
🎯 建议
由于 Iroh API 频繁变更,建议:
- 暂时移除 Iroh 依赖 - 避免编译错误
- 使用条件编译 - 仅在需要时启用 Iroh 功能
- 关注 Iroh 更新 - 订阅 Iroh 的 release notes
- 考虑替代方案 - 如果 Iroh 不稳定,可以考虑其他 P2P 库
📦 依赖配置
当前 Cargo.toml 中的相关依赖:
[dependencies]
iroh = { version = "0.97", features = ["address-lookup-mdns"] }
iroh-tickets = "0.4"
tokio = "1.50.0"
anyhow = "1.0.102"
📊 项目状态
- ✅ LocalFinder 结构 - 完成
- ✅ Tauri 集成 - 完成
- ✅ Commands 实现 - 完成(占位符)
- ⚠️ 实际功能 - 等待 Iroh API 研究
创建时间: 2026-04-03
最后更新: 2026-04-03
状态: 占位符实现,等待 Iroh API 研究