plugin_interfaces/
handler.rs

1use crate::callbacks::HostCallbacks;
2use crate::metadata::{PluginInstanceContext, PluginMetadata};
3use crate::pluginui::{Context, Ui};
4
5/// 插件处理器 trait
6/// 定义了插件的生命周期方法,使用上下文传递模式
7pub trait PluginHandler: Send + Sync {
8    /// 插件初始化时调用(在挂载之前,用于创建插件上下文)
9    /// 返回插件实例上下文,包含所有实例相关的状态
10    fn initialize(
11        &mut self,
12        callbacks: HostCallbacks,
13        metadata: PluginMetadata,
14    ) -> Result<PluginInstanceContext, Box<dyn std::error::Error>> {
15        // 创建插件实例上下文
16        let instance_id = metadata
17            .instance_id
18            .as_ref()
19            .ok_or("Instance ID is required for plugin initialization")?
20            .clone();
21
22        let mut context = PluginInstanceContext::new(instance_id, metadata);
23        context.set_callbacks(callbacks);
24
25        Ok(context)
26    }
27
28    /// 更新UI(事件驱动)
29    /// 当前端用户交互或需要更新UI时调用
30    fn update_ui(&mut self, ctx: &Context, ui: &mut Ui, plugin_ctx: &PluginInstanceContext);
31
32    /// 插件挂载时调用
33    fn on_mount(
34        &mut self,
35        plugin_ctx: &PluginInstanceContext,
36    ) -> Result<(), Box<dyn std::error::Error>>;
37
38    /// 插件卸载时调用
39    fn on_dispose(
40        &mut self,
41        plugin_ctx: &PluginInstanceContext,
42    ) -> Result<(), Box<dyn std::error::Error>>;
43
44    /// 连接时调用
45    fn on_connect(
46        &mut self,
47        plugin_ctx: &PluginInstanceContext,
48    ) -> Result<(), Box<dyn std::error::Error>>;
49
50    /// 断开连接时调用
51    fn on_disconnect(
52        &mut self,
53        plugin_ctx: &PluginInstanceContext,
54    ) -> Result<(), Box<dyn std::error::Error>>;
55
56    /// 处理消息
57    fn handle_message(
58        &mut self,
59        message: &str,
60        plugin_ctx: &PluginInstanceContext,
61    ) -> Result<String, Box<dyn std::error::Error>>;
62
63    /// 获取插件元数据
64    fn get_metadata<'a>(&self, plugin_ctx: &'a PluginInstanceContext) -> &'a PluginMetadata {
65        plugin_ctx.get_metadata()
66    }
67}