跳到主要内容
版本:2.0.0

命令行执行插件

定义

命名空间: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(ISocketClient socketClient,int a, int b)
{
this.logger.Info($"{socketClient.IP}:{socketClient.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>();
});

//载入配置
service.Setup(config);

//启动
service.Start();

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数据格式即可。

本文示例Demo