命令行执行插件
定义
一、说明
TcpCommandLinePlugin命令行执行插件,是用于TCP的快捷事务实现。该类是抽象类,必须通过继承使用。在继承类中,声明的公共的且名称以Command结尾的方法,均可被快捷执行。
主要特性
- 自动命令识别:所有以"Command"结尾的公共方法都会自动注册为可执行命令
- 灵活的参数支持:支持基础类型参数和JSON格式的自定义实体类参数
- 上下文访问:命令方法可以通过参数获取当前会话客户端信息
- 异常处理:可配置是否将执行异常返回给客户端
- 数据转换:内置字符串转换器,支持基础类型和JSON数据格式
二、创建快捷执行插件
继承TcpCommandLinePlugin类,并实现您的命令方法。方法必须是公共的,且名称以Command结尾。
🔄 正在加载代码...
命令方法说明
- AddCommand:简单的加法命令,接收两个整数参数并返回结果
- MULCommand:乘法命令,同时演示如何获取调用者会话信息
- 第一个参数
ITcpSessionClient会自动注入当前会话客户端 - 通过会话客户端可获取IP、端口等信息
- 第一个参数
- ExcCommand:演示异常处理的命令
配置说明
- ReturnException:设置为
true时,命令执行出现异常会将异常信息返回给客户端 - Converter:字符串转换器,默认支持基础类型和JSON格式,可自定义扩展
三、创建服务器
配置TCP服务器并添加命令行插件。需要注意数据处理适配器的选择。
🔄 正在加载代码...
配置要点
-
数据处理适配器:
- 使用
TerminatorPackageAdapter时,客户端命令需要以\r\n结尾 - 使用
NormalDataHandlingAdapter时,可省略终止符,但不能高速连续调用(会粘包)
- 使用
-
插件注册:通过
ConfigurePlugins方法添加自定义的命令行插件
四、调用方式
命令行插件可以被普通TCP客户端、命令提示符(cmd)、telnet等工具调用。
调用格式
命令名 参数1 参数2 ... [终止符]
示例
Add 10 20\r\n- 调用加法命令,计算10+20MUL 5 6\r\n- 调用乘法命令,计算56Exc\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