Files
rolegram/src-tauri/LOCAL_FINDER_IMPLEMENTATION.md

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

已添加以下命令供前端调用:

  1. initialize_local_finder() - 初始化局域网发现管理器
  2. start_discovery() - 开始设备发现(占位符)
  3. stop_discovery() - 停止设备发现(占位符)
  4. get_local_node_id() - 获取本地节点 ID
  5. get_discovered_peers() - 获取发现的设备列表(占位符)

4. 集成到应用

  • 更新了 lib.rs 导出 LocalFinder
  • 在 Tauri 应用中注册了 LocalFinder 状态管理
  • 将所有新 commands 添加到 invoke_handler

⚠️ 当前限制

Iroh API 变更问题

Iroh v0.97 的 API 与早期版本有很大不同,主要问题包括:

  1. Endpoint::builder() - 现在需要 Preset trait 参数
  2. SecretKey::generate() - 需要特定类型的 RNG
  3. MdnsAddressLookup - MDNS 发现 API 已变更
  4. 依赖冲突 - randrand_core 版本兼容性问题

占位符实现

当前代码使用占位符实现,仅用于演示结构和接口设计。

🔧 下一步工作

需要查阅的文档

  1. Iroh v0.97 官方文档 - https://docs.rs/iroh/latest/iroh/
  2. Iroh GitHub 仓库 - https://github.com/n0-computer/iroh
  3. Iroh Examples - 查看最新的示例代码

待实现的功能

  1. 正确的 Endpoint 初始化

    // 需要找到正确的方式
    let endpoint = Endpoint::builder(preset).bind().await?;
    
  2. SecretKey 生成

    // 需要使用正确的 RNG
    let secret_key = SecretKey::generate(/* correct rng */);
    
  3. MDNS 发现集成

    // 需要查阅新的 API
    let mdns = MdnsAddressLookup::new()?;
    endpoint.discovery().add(mdns)?;
    
  4. 设备连接和管理

    • 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 频繁变更,建议:

  1. 暂时移除 Iroh 依赖 - 避免编译错误
  2. 使用条件编译 - 仅在需要时启用 Iroh 功能
  3. 关注 Iroh 更新 - 订阅 Iroh 的 release notes
  4. 考虑替代方案 - 如果 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 研究