跳到主要内容
版本:4.0

命令行执行插件

定义

命名空间:
TouchSocket
程序集:
安装:
dotnet add package TouchSocket

一、说明

TcpCommandLinePlugin命令行执行插件,是用于TCP的快捷事务实现。该类是抽象类,必须通过继承使用。在继承类中,声明的公共的且名称以Command结尾的方法,均可被快捷执行。

主要特性

  • 自动命令识别:所有以"Command"结尾的公共方法都会自动注册为可执行命令
  • 灵活的参数支持:支持基础类型参数和JSON格式的自定义实体类参数
  • 上下文访问:命令方法可以通过参数获取当前会话客户端信息
  • 异常处理:可配置是否将执行异常返回给客户端
  • 数据转换:内置字符串转换器,支持基础类型和JSON数据格式

二、创建快捷执行插件

继承TcpCommandLinePlugin类,并实现您的命令方法。方法必须是公共的,且名称以Command结尾。

🔄 正在加载代码...

命令方法说明

  1. AddCommand:简单的加法命令,接收两个整数参数并返回结果
  2. MULCommand:乘法命令,同时演示如何获取调用者会话信息
    • 第一个参数ITcpSessionClient会自动注入当前会话客户端
    • 通过会话客户端可获取IP、端口等信息
  3. ExcCommand:演示异常处理的命令

配置说明

  • ReturnException:设置为true时,命令执行出现异常会将异常信息返回给客户端
  • Converter:字符串转换器,默认支持基础类型和JSON格式,可自定义扩展

三、创建服务器

配置TCP服务器并添加命令行插件。需要注意数据处理适配器的选择。

🔄 正在加载代码...

配置要点

  1. 数据处理适配器

    • 使用TerminatorPackageAdapter时,客户端命令需要以\r\n结尾
    • 使用NormalDataHandlingAdapter时,可省略终止符,但不能高速连续调用(会粘包)
  2. 插件注册:通过ConfigurePlugins方法添加自定义的命令行插件

四、调用方式

命令行插件可以被普通TCP客户端、命令提示符(cmd)、telnet等工具调用。

调用格式

命令名 参数1 参数2 ... [终止符]

示例

  • Add 10 20\r\n - 调用加法命令,计算10+20
  • MUL 5 6\r\n - 调用乘法命令,计算56
  • Exc\r\n - 调用异常测试命令
提示
  • 命令名称不需要包含"Command"后缀
  • 终止符\r\n是否必需取决于所选的数据处理适配器
  • 调用参数支持基础类型和JSON格式的自定义实体类
  • 不同适配器下连续调用的性能表现不同,需根据实际场景选择

五、高级用法

自定义数据转换器

如果需要支持更复杂的数据类型转换,可以自定义Converter

public MyCommandLinePlugin(ILog logger) : base(logger)
{
// 自定义转换器逻辑
this.Converter = new MyCustomConverter();
}

使用自定义实体类参数

命令方法支持接收复杂对象,客户端传递JSON格式数据即可:

public class UserInfo
{
public string Name { get; set; }
public int Age { get; set; }
}

public string UserCommand(UserInfo user)
{
return $"Hello {user.Name}, age {user.Age}";
}

调用示例:

User {"Name":"张三","Age":25}\r\n