命令行执行插件
定义
命名空间:TouchSocket.Sockets
程序集:TouchSocket.dll
一、说明
TcpCommandLinePlugin命令行执行插件,是用于TCP的快捷事务实现。该类是抽象类,必须通过继承,在继承类中,声明的具的公共的且名称以Command结尾的方法,均可被快捷执行。
二、创建快捷执行插件
/// <summary>
/// 命令执行插件。方法必须以Command结尾。
/// </summary>
class MyCommandLinePlugin : TcpCommandLinePlugin
{
private readonly ILog logger;
public MyCommandLinePlugin(ILog logger) : base(logger)
{
this.ReturnException = true;//表示执行异常的时候,是否返回异常信息
this.logger = logger;
}
/// <summary>
/// 加法
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public int AddCommand(int a, int b)
{
this.logger.Info($"执行{nameof(AddCommand)}");
return a + b;
}
/// <summary>
/// 乘法,并且获取调用者信息
/// </summary>
/// <param name=""></param>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public int MULCommand(ITcpSessionClient SessionClient,int a, int b)
{
this.logger.Info($"{SessionClient.IP}:{SessionClient.Port}执行{nameof(MULCommand)}");
return a * b;
}
/// <summary>
/// 测试异常
/// </summary>
/// <exception cref="Exception"></exception>
public void ExcCommand()
{
throw new Exception("我异常了");
}
}
三、创建服务器
TcpService service = new TcpService();
var config = new TouchSocketConfig();
config.SetListenIPHosts(new IPHost[] { new IPHost("127.0.0.1:7789"), new IPHost(7790) }) //同时监听两个地址
.SetDataHandlingAdapter(() =>
{
//return new TerminatorPackageAdapter(1024, "\r\n");//命令行中使用\r\n结尾
return new NormalDataHandlingAdapter();//亦或者省略\r\n,但此时调用方不能高速调用,会 粘包
})
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.ConfigurePlugins(a =>
{
a.Add<MyCommandLinePlugin>();
});
//载入配置
await service.SetupAsync(config);
//启动
await service.StartAsync();
service.Logger.Info("服务器成功启动。");
service.Logger.Info("使用:“Add 10 20”测试");
service.Logger.Info("使用:“MUL 10 20”测试");
service.Logger.Info("使用:“Exc”测试异常");
四、调用
上述快捷执行插件,即可被普通tcp客户端,或cmd/telnet等便捷调用。
调用数据格式:
Add 10 20 /r/n
/r/n非必须,但是当适配器选为终止字符分割适配器时,则必须。不然,则不可连续调用,会粘包。
提示
调用的参数也支持自定义实体类,届时参数使用Json数据格式即可。