Skip to main content

插件系统

说明

  • 插件是对TouchSocket产品的横向扩展。

产品特点

  • 简单易用。
  • 易扩展。

产品应用场景

  • TCP基础使用场景。
  • 自定义协议解析场景。

插件特性

【多线程并发】 插件的所有触发,均是同一实例,所以在服务器运行时,几乎都是并发触发的,所有应当考虑并发问题。

【插件先行】 当启用插件时,插件的触发仅次于方法重写,而优于事件。

【执行顺序】 每个插件都有一个Order属性,该属性表示该插件的执行顺序,数值小,越提前执行(Order在Add之前生效,后续修改无效)。

【中断传递】 当某个插件在响应时,如果设置e.Handled=true,则该数据将不会再触发后续的插件、事件、重写方法。

用户自定义插件

用户通过实现框架预设的插件接口,即可接收相应的触发。每个组件都有详细的插件支持说明。

例如:ITcpPluginITokenPluginIProtocolPlugin等。

系统自定义插件

当各位朋友使用TouchSocket封装自己的dll时,可能需要一些定义插件。那么这个需求TouchSocket也能满足大家。

例如:实现基于TCP的特殊信息自定义插件,当收到字母‘A’时,希望触发实现IAPlugin接口插件的GoToA方法。

具体操作如下:

  1. 声明IAPlugin接口,继承IPlugin
  2. 声明GoToA接口方法(该方法必须两个参数,第一参数无要求,一般为触发主体,第二参数必须继承TouchSocketEventArgs)。
  3. 在合适时候,判断当前配置是否支持插件,然后使用服务器或客户端的PluginsManager属性调用Raise方法,此处的泛型(IAPlugin)必须为接口类型。
public interface IAPlugin : IPlugin
{
void GoToA(ITcpClientBase client,TouchSocketEventArgs e);
}
public class MyTClient : TcpClient
{
protected override void HandleReceivedData(ByteBlock byteBlock, IRequestInfo requestInfo)
{
if (this.UsePlugin)
{
if (byteBlock.ToString()=="A")
{
this.PluginsManager.Raise<IAPlugin>("GoToA",this,new TouchSocketEventArgs());
}
}
}
}