diff --git a/PLUGIN_DEPENDENCY.md b/PLUGIN_DEPENDENCY.md index 933d620..d385986 100644 --- a/PLUGIN_DEPENDENCY.md +++ b/PLUGIN_DEPENDENCY.md @@ -34,15 +34,15 @@ ## 依赖关系图 ``` -独立插件层(双架构): -┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ -│ screen │ │ wifi │ │ video │ │ ble │ -└─────────┘ └─────────┘ └─────────┘ └─────────┘ - ↑ ↑ ↑ ↑ - │ │ │ │ - │ └────────────┼────────────┘ - │ ↕ │ - │ (双架构通信) │ +独立插件层(多架构并存): +┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ +│ screen │ │ wifi │ │ video │ │ ble │ │ future │ +└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ + ↑ ↑ ↑ ↑ ↑ + │ │ │ │ │ + │ └────────────┼────────────┼────────────┘ + │ ↕ │ ↕ + │ (多架构协作) │ (可扩展) │ │ └─────────────────────────┘ core @@ -58,11 +58,13 @@ core ``` -**双架构说明**: -- WiFi 和 BLE 是两套独立的网络架构 -- BLE 可以配置 WiFi(通过消息通信) -- BLE 也可以独立提供网络功能(不依赖 WiFi) -- 用户可以选择使用 WiFi 或 BLE 进行网络连接 +**多架构说明**: +- **WiFi 架构**:通过 WiFi 连接网络 +- **BLE 架构**:通过蓝牙连接网络 +- **未来架构**:可扩展任何通讯方式(Zigbee、LoRa、NFC、红外、串口等) +- **架构协作**:各架构可以互相配置和协作(通过消息) +- **架构独立**:每个架构都可以独立工作 +- **用户选择**:用户可以选择使用任何一种或多种架构 --- @@ -213,20 +215,38 @@ video_plugin.send(Message::PlayerStatus(status)); // Broadcast ## 未来插件规划 -### Phase 2 独立插件 -- render - 3D 渲染引擎(独立) -- ai_voice - AI 语音识别(独立) -- ai_tts - AI 语音合成(独立) +### Phase 2 独立插件(通讯和控制) +- **render** - 3D 渲染引擎(独立) +- **ai_voice** - AI 语音识别(独立) +- **ai_tts** - AI 语音合成(独立) +- **zigbee** - Zigbee 通讯(独立,智能家居) +- **lora** - LoRa 远程通讯(独立,物联网) +- **nfc** - NFC 近场通讯(独立,快速配对) +- **infrared** - 红外遥控(独立,传统家电控制) +- **serial** - 串口通讯(独立,硬件扩展) +- **mqtt** - MQTT 协议(独立,物联网标准) ### Phase 2 依赖插件 -- vr - VR 输出(依赖 render 或 video) -- ar - AR 输出(依赖 render 或 video) -- ai_assistant - AI 助手(依赖 ai_voice + ai_tts + video) +- **vr** - VR 输出(依赖 render 或 video) +- **ar** - AR 输出(依赖 render 或 video) +- **ai_assistant** - AI 助手(依赖 ai_voice + ai_tts + video) ### Phase 3 依赖插件 -- cloud_sync - 云端同步(依赖 http) -- social - 社交分享(依赖 http + cloud_sync) -- editor - 内容编辑器(依赖 video + render) +- **cloud_sync** - 云端同步(依赖 http 或任何网络插件) +- **social** - 社交分享(依赖 http + cloud_sync) +- **editor** - 内容编辑器(依赖 video + render) + +### 通讯插件扩展性 +ShowenV2 支持任何通讯方式作为独立插件: +- **有线通讯**: 以太网、USB、串口、CAN 总线 +- **无线通讯**: WiFi、BLE、Zigbee、LoRa、NFC、红外 +- **网络协议**: HTTP、WebSocket、MQTT、CoAP、gRPC +- **专有协议**: 自定义协议插件 + +所有通讯插件都是独立的,可以: +- 独立工作(提供通讯能力) +- 互相配置(通过消息协作) +- 并存使用(多种通讯方式同时工作) --- @@ -253,11 +273,18 @@ video_plugin.send(Message::PlayerStatus(status)); // Broadcast - 依赖插件可以集成测试 ### 5. 双架构原则(新增) -- 支持多套独立架构并存(如 WiFi + BLE) +- 支持多套独立架构并存(如 WiFi + BLE + Zigbee + ...) - 架构之间可以协作(通过消息) - 架构之间可以独立工作(不强依赖) - 用户可以选择使用哪套架构 +### 6. 动态扩展原则(新增) +- **插件动态注册**: 插件可以在运行时注册和卸载 +- **插件动态安装**: 支持从插件市场下载安装新插件 +- **热插拔**: 插件可以在不重启系统的情况下加载/卸载 +- **版本管理**: 支持插件版本更新和回滚 +- **依赖检查**: 动态安装时自动检查依赖关系 + --- ## 实现任务 @@ -265,17 +292,116 @@ video_plugin.send(Message::PlayerStatus(status)); // Broadcast ### 架构团队任务 1. 扩展 Plugin trait,添加 dependencies() 方法 2. 实现 ServiceManager 依赖检查和拓扑排序 -3. 编写技术设计文档 +3. **设计插件动态注册机制** +4. **设计插件热加载/卸载机制** +5. **设计插件版本管理系统** +6. 编写技术设计文档 ### 开发团队任务 1. 为现有插件添加 dependencies() 实现 2. 测试启动顺序是否正确 3. 验证消息通信是否正常 +4. **实现插件动态注册 API** +5. **实现插件加载/卸载功能** ### 产品团队任务 1. 梳理 Phase 2/3 插件的依赖关系 2. 确认依赖关系的业务合理性 3. 编写插件依赖的 PRD +4. **设计插件市场功能** +5. **设计插件安装/更新流程** + +--- + +## 插件动态管理 + +### 插件生命周期 +``` +未安装 → 下载 → 安装 → 注册 → 初始化 → 启动 → 运行 + ↓ + 停止 → 卸载 → 删除 +``` + +### 动态注册 API +```rust +// ServiceManager 新增方法 +impl ServiceManager { + // 动态注册插件 + pub fn register_plugin(&mut self, plugin: Box) -> Result<()>; + + // 动态卸载插件 + pub fn unregister_plugin(&mut self, name: &str) -> Result<()>; + + // 重新加载插件 + pub fn reload_plugin(&mut self, name: &str) -> Result<()>; + + // 获取已注册插件列表 + pub fn list_plugins(&self) -> Vec; + + // 检查插件依赖 + pub fn check_dependencies(&self, plugin: &dyn Plugin) -> Result<()>; +} +``` + +### 插件安装流程 +``` +1. 用户从插件市场选择插件 +2. 下载插件包(.so / .dll / .dylib) +3. 验证插件签名和版本 +4. 检查依赖关系 +5. 安装到 plugins/ 目录 +6. 动态加载插件 +7. 注册到 ServiceManager +8. 初始化并启动插件 +``` + +### 插件卸载流程 +``` +1. 检查是否有其他插件依赖 +2. 停止插件运行 +3. 从 ServiceManager 注销 +4. 卸载插件模块 +5. 删除插件文件(可选) +``` + +### 插件更新流程 +``` +1. 检查新版本 +2. 下载新版本插件 +3. 停止旧版本插件 +4. 备份旧版本 +5. 安装新版本 +6. 启动新版本 +7. 验证运行正常 +8. 删除旧版本备份 +``` + +### 插件市场 +``` +功能: +- 浏览插件列表 +- 搜索插件 +- 查看插件详情(功能、依赖、评分、评论) +- 下载/安装插件 +- 更新插件 +- 卸载插件 +- 插件评分和评论 + +技术实现: +- HTTP API 获取插件列表 +- 插件包托管在云端 +- 版本管理和更新检查 +- 插件签名验证 +``` + +### 安全机制 +``` +1. 插件签名验证(防止恶意插件) +2. 沙箱隔离(限制插件权限) +3. 依赖检查(防止依赖冲突) +4. 版本兼容性检查 +5. 插件审核机制(官方市场) +``` --- diff --git a/clients/README.md b/clients/README.md index 7c8fd10..4db31bd 100644 --- a/clients/README.md +++ b/clients/README.md @@ -23,6 +23,16 @@ - **智能音箱** - `voice/` - 语音控制集成 - **智能家居** - `smarthome/` - HomeKit / 米家 / 小度 +### 5. 开发者工具 +- **CLI 工具** - `cli/` - 命令行控制工具 +- **SDK** - `sdk/` - 各语言 SDK(Python、JavaScript、Go、Rust) +- **插件开发工具** - `plugin-dev/` - 插件开发和调试工具 + +**扩展性说明**: +- 客户端类型可以无限扩展 +- 任何能发送 HTTP/WebSocket/BLE 请求的设备都可以作为客户端 +- 支持第三方开发者贡献新的客户端类型 + ## 通信协议 所有客户端通过以下方式与 ShowenV2 设备通信: