跳到主要内容
版本:3.0

快捷事务命令行

定义

命名空间:TouchSocket.Http.WebSockets
程序集:TouchSocket.Http.dll

一、说明

快捷事务命令行,是用于WebSocket的快捷事务实现,让WS在Text文本中,用最简单的文字消息即可完成相关事务的执行。

二、使用

2.1 声明事务插件

新建类型,继承自WebSocketCommandLinePlugin。然后在里面写一些需要的事务方法。

声明的事务方法必须满足:只能是实例方法、必须是公开方法、方法名以Command结尾。

/// <summary>
/// 命令行插件。
/// 声明的方法必须为公开实例方法、以"Command"结尾,且支持json字符串,参数之间空格隔开。
/// </summary>
public class MyWSCommandLinePlugin : WebSocketCommandLinePlugin
{
public MyWSCommandLinePlugin(ILog logger) : base(logger)
{
}

public int AddCommand(int a, int b)
{
return a + b;
}

//当第一个参数,直接或间接实现ITcpSession接口时,会收集到当前请求的客户端,从而可以获取IP等。
public SumClass SumCommand(IHttpClientBase client, SumClass sumClass)
{
sumClass.Sum = sumClass.A + sumClass.B;
return sumClass;
}
}

3.1 注册使用

直接通过插件添加即可。

var service = new HttpService();
await service.SetupAsync(new TouchSocketConfig()//加载配置
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.ConfigurePlugins(a =>
{
a.UseWebSocket()//添加WebSocket功能
//.SetWSUrl("/ws")//设置url直接可以连接。
.SetVerifyConnection(VerifyConnection)
.UseAutoPong();//当收到ping报文时自动回应pong
a.Add<MyWSCommandLinePlugin>();
}));

await service.StartAsync();

3.2 调用

调用数据格式:

以事务方法的方法名为第一个参数(不包含Command),后续参数直接写,多个参数用空格隔开。例如:Add 10 20

var client = new WebSocketClient();
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.ConfigurePlugins(a =>
{
a.Add(typeof(IWebSocketReceivedPlugin), async (IHttpClientBase c, WSDataFrameEventArgs e) =>
{
client.Logger.Info($"收到Add的计算结果:{e.DataFrame.ToText()}");
await e.InvokeNext();
});
})
.SetRemoteIPHost("ws://127.0.0.1:7789/ws"));
await client.ConnectAsync();

client.SendWithWS("Add 10 20");
提示

快捷事务命令行不仅可以添加在服务器,客户端也可以添加使用。

提示

快捷事务参数支持Json字符串,但是需要注意的是,调用的Json字符串也不能包含空格。

本文示例Demo