feat: 插件动态注册和多架构扩展设计
更新 PLUGIN_DEPENDENCY.md: - 支持多架构并存(WiFi、BLE、Zigbee、LoRa、NFC 等) - 新增动态扩展原则: - 插件动态注册和卸载 - 插件动态安装(从插件市场) - 热插拔(不重启系统) - 版本管理和更新 - 依赖检查 插件动态管理: - 插件生命周期(下载→安装→注册→运行→卸载) - 动态注册 API 设计 - 插件安装/卸载/更新流程 - 插件市场功能设计 - 安全机制(签名验证、沙箱隔离) 通讯插件扩展性: - 有线通讯:以太网、USB、串口、CAN 总线 - 无线通讯:WiFi、BLE、Zigbee、LoRa、NFC、红外 - 网络协议:HTTP、WebSocket、MQTT、CoAP、gRPC - 所有通讯方式都可以作为独立插件 更新 clients/: - 新增开发者工具目录(cli、sdk、plugin-dev) - 客户端类型可无限扩展 - 支持第三方开发者贡献
This commit is contained in:
@@ -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<dyn Plugin>) -> 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<PluginInfo>;
|
||||
|
||||
// 检查插件依赖
|
||||
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. 插件审核机制(官方市场)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -23,6 +23,16 @@
|
||||
- **智能音箱** - `voice/` - 语音控制集成
|
||||
- **智能家居** - `smarthome/` - HomeKit / 米家 / 小度
|
||||
|
||||
### 5. 开发者工具
|
||||
- **CLI 工具** - `cli/` - 命令行控制工具
|
||||
- **SDK** - `sdk/` - 各语言 SDK(Python、JavaScript、Go、Rust)
|
||||
- **插件开发工具** - `plugin-dev/` - 插件开发和调试工具
|
||||
|
||||
**扩展性说明**:
|
||||
- 客户端类型可以无限扩展
|
||||
- 任何能发送 HTTP/WebSocket/BLE 请求的设备都可以作为客户端
|
||||
- 支持第三方开发者贡献新的客户端类型
|
||||
|
||||
## 通信协议
|
||||
|
||||
所有客户端通过以下方式与 ShowenV2 设备通信:
|
||||
|
||||
Reference in New Issue
Block a user