Files
ShowenV2/plugin-sdk/README.md
showen 7135f28545 feat: 实现动态插件系统 (6阶段完成)
- 阶段1: 消息类型序列化 (Serialize/Deserialize, &'static str → String)
- 阶段2: FFI 边界类型 + Plugin SDK (plugin_abi, showen-plugin-sdk crate)
- 阶段3: PluginLoader + DynamicPlugin (libloading 动态加载 .so)
- 阶段4: 版本管理 + 错误策略 (VersionManager, PluginState, 自动回退)
- 阶段5: 远程仓库客户端 (HTTP 下载 + tar.gz 安装)
- 阶段6: 示例插件 + HTTP 管理 API + 全目录 README 文档

54/54 测试通过,0 warnings。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 03:38:08 +08:00

46 lines
1.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ShowenV2 Plugin SDK
插件开发者使用此 SDK 编写动态插件(`.so` 文件),运行时由主程序动态加载。
## 核心接口
- **`ShowenPlugin` trait**: 插件作者实现的高级接口init / start / handle_message / stop
- **`MessageSender`**: 封装 FFI SendCallback插件通过它向主程序发送消息
- **`export_plugin!` 宏**: 自动生成 `extern "C"` 胶水代码,导出 `PluginVTable`
## 类型
SDK 独立定义了与主程序 JSON 兼容的消息类型:
- `PluginInfo`, `Envelope`, `Destination`, `Message`
## 用法
```rust
use showen_plugin_sdk::{export_plugin, ShowenPlugin, MessageSender, PluginInfo, Message};
struct MyPlugin { sender: Option<MessageSender> }
impl ShowenPlugin for MyPlugin {
fn info(&self) -> PluginInfo { /* ... */ }
fn init(&mut self, config_json: &str, sender: MessageSender) -> Result<(), String> { Ok(()) }
fn start(&mut self) -> Result<(), String> { Ok(()) }
fn handle_message(&mut self, msg_json: &str) -> Result<(), String> { Ok(()) }
fn stop(&mut self) -> Result<(), String> { Ok(()) }
}
export_plugin!(MyPlugin, MyPlugin::new);
```
## 编译
```bash
cd plugin-sdk
cargo build
```
插件项目在 `Cargo.toml` 中依赖此 SDK
```toml
[dependencies]
showen-plugin-sdk = { path = "../plugin-sdk" }
```