更新文档

This commit is contained in:
若汝棋茗
2024-06-24 22:57:59 +08:00
parent 76b6e314fb
commit 3cef61eede
26 changed files with 220 additions and 299 deletions

View File

@@ -97,10 +97,10 @@ service.Received = (client, e) =>
};
service.Setup(new TouchSocketConfig()//载入配置
await service.SetupAsync(new TouchSocketConfig()//载入配置
.SetListenIPHosts(new IPHost[] { new IPHost(7790) })
.SetDataHandlingAdapter(() => { return new MyBigFixedHeaderCustomDataHandlingAdapter(); }));//配置适配器
service.Start();//启动
await service.StartAsync();//启动
```

View File

@@ -128,11 +128,11 @@ service.Received = (client, e) =>
return EasyTask.CompletedTask;
};
service.Setup(new TouchSocketConfig()//载入配置
await service.SetupAsync(new TouchSocketConfig()//载入配置
.SetListenIPHosts(new IPHost[] { new IPHost(7790) })
.SetTcpDataHandlingAdapter(() => { return new MyCustomUnfixedHeaderDataHandlingAdapter(); }));//配置适配器
service.Start();//启动
await service.StartAsync();//启动
```
:::tip 提示

View File

@@ -271,8 +271,8 @@ private static TcpDmtpService GetTcpDmtpService()
VerifyToken = "Channel"//连接验证口令。
});
service.Setup(config);
service.Start();
await service.SetupAsync(config);
await service.StartAsync();
service.Logger.Info("服务器成功启动");
return service;
}

View File

@@ -57,13 +57,13 @@ Dmtp客户端对应的也有不同协议的版本。各个版本之间功能
```csharp showLineNumbers
var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
client.Connect();
await client.ConnectAsync();
```
### 4.2 UdpDmtp
@@ -73,7 +73,7 @@ client.Connect();
```csharp {1,4-6,11} showLineNumbers
var client = new UdpDmtp();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7797")
.UseUdpReceive()
.SetDmtpOption(new DmtpOption()
@@ -101,13 +101,13 @@ var client = new UdpDmtp();
```csharp showLineNumbers
var client = new HttpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
client.Connect();
await client.ConnectAsync();
```
### 4.4 WebSocketDmtpClient
@@ -184,13 +184,13 @@ finally
```csharp showLineNumbers
var client = new NamedPipeDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetPipeName("TouchSocketPipe")//设置管道名称
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
client.Connect();
await client.ConnectAsync();
```
[基于NamedPipe的Dmtp示例Demo](https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/Dmtp/NamedPipeDmtpConsoleApp)

View File

@@ -464,8 +464,8 @@ private static TcpDmtpService GetTcpDmtpService()
VerifyToken = "Dmtp"//连接验证口令。
});
service.Setup(config);
service.Start();
await service.SetupAsync(config);
await service.StartAsync();
service.Logger.Info("服务器成功启动");
return service;
}

View File

@@ -97,9 +97,9 @@ var config = new TouchSocketConfig()//配置
VerifyToken = "Rpc"//连接验证口令。
});
service.Setup(config);
await service.SetupAsync(config);
service.Start();
await service.StartAsync();
service.Logger.Info($"{service.GetType().Name}已启动");
```
@@ -114,7 +114,7 @@ service.Logger.Info($"{service.GetType().Name}已启动");
```csharp showLineNumbers
var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.ConfigurePlugins(a =>
{
@@ -124,7 +124,7 @@ client.Setup(new TouchSocketConfig()
{
VerifyToken = "Rpc"//连接验证口令。
}));
client.Connect();
await client.ConnectAsync();
bool result =(bool) client.GetDmtpRpcActor().Invoke(typeof(bool),"Login", InvokeOption.WaitInvoke, "123", "abc");
```
@@ -255,7 +255,7 @@ namespace RpcProxy
```csharp showLineNumbers
var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.ConfigurePlugins(a =>
{
@@ -265,7 +265,7 @@ client.Setup(new TouchSocketConfig()
{
VerifyToken = "Rpc"//连接验证口令。
}));
client.Connect();
await client.ConnectAsync();
bool result = client.GetDmtpRpcActor().Login("123", "abc", InvokeOption.WaitInvoke);//Login是生成的代理扩展方法。可能需要额外添加命名空间。
```
@@ -306,7 +306,7 @@ public partial class ReverseCallbackServer : RpcServer
```csharp showLineNumbers
var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
@@ -327,7 +327,7 @@ client.Setup(new TouchSocketConfig()
{
VerifyToken = "Rpc"//连接验证口令。
}));
client.Connect();
await client.ConnectAsync();
client.Logger.Info($"连接成功Id={client.Id}");
```
@@ -572,7 +572,7 @@ public class MySerializationSelector : SerializationSelector
```csharp {10}
var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
@@ -591,7 +591,7 @@ client.Setup(new TouchSocketConfig()
{
VerifyToken = "Rpc"//连接验证口令。
}));
client.Connect();
await client.ConnectAsync();
```
:::caution 注意
@@ -856,7 +856,7 @@ class MyDmtpRpcActor : DmtpRpcActor, IRpcClient1, IRpcClient2
```csharp {6}
var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigurePlugins(a =>
{
a.UseDmtpRpc()
@@ -867,7 +867,7 @@ client.Setup(new TouchSocketConfig()
{
VerifyToken = "Rpc"//连接验证口令。
}));
client.Connect();
await client.ConnectAsync();
```
最后在获得RpcActor时就可以按接口获取。然后配合服务器代码接口约束就可以实现我们所期望的功能。

View File

@@ -74,9 +74,9 @@ var config = new TouchSocketConfig()//配置
VerifyToken = "Dmtp"//设定连接口令,作用类似账号密码
});
service.Setup(config);
await service.SetupAsync(config);
service.Start();
await service.StartAsync();
service.Logger.Info($"{service.GetType().Name}已启动");
```
@@ -124,9 +124,9 @@ var config = new TouchSocketConfig()//配置
VerifyToken = "Dmtp"
});
service.Setup(config);
await service.SetupAsync(config);
service.Start();
await service.StartAsync();
service.Logger.Info($"{service.GetType().Name}已启动");
```
@@ -240,9 +240,9 @@ var config = new TouchSocketConfig()//配置
VerifyToken = "Dmtp"//设定连接口令,作用类似账号密码
});
service.Setup(config);
await service.SetupAsync(config);
service.Start();
await service.StartAsync();
service.Logger.Info($"{service.GetType().Name}已启动");
```

View File

@@ -98,9 +98,9 @@ var config = new TouchSocketConfig()//配置
{
VerifyToken = "Rpc"//连接验证口令。
});
service.Setup(config);
await service.SetupAsync(config);
service.Start();
await service.StartAsync();
service.Logger.Info($"{service.GetType().Name}已启动");
```
@@ -111,13 +111,13 @@ service.Logger.Info($"{service.GetType().Name}已启动");
```csharp {8}
TcpTouchRpcClient client = new TcpTouchRpcClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Rpc"//连接验证口令。
}));
client.Connect();
await client.ConnectAsync();
//Loging即为在RpcClassLibrary中自动生成的项目
var response = client.Login(new RpcClassLibrary.Models.LoginRequest() { Account= "Account",Password= "Account" });

View File

@@ -24,9 +24,9 @@ config.SetListenIPHosts(new IPHost[] { new IPHost(7789) })
});
service.Setup(config);
await service.SetupAsync(config);
service.Start();
await service.StartAsync();
Console.WriteLine("Http服务器已启动");
```

View File

@@ -110,7 +110,7 @@ JsonRpc支持多个基本协议的服务器所以下面将一一介绍。
```csharp showLineNumbers
var service = new TcpService();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
.SetListenIPHosts(7705)
.ConfigureContainer(a =>
{
@@ -129,7 +129,7 @@ service.Setup(new TouchSocketConfig()
a.UseTcpJsonRpc();
}));
service.Start();
await service.StartAsync();
```
:::caution 注意
@@ -146,7 +146,7 @@ service.Start();
```csharp showLineNumbers
var service = new HttpService();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
.SetListenIPHosts(7706)
.ConfigureContainer(a =>
{
@@ -161,7 +161,7 @@ service.Setup(new TouchSocketConfig()
.SetJsonRpcUrl("/jsonRpc");
}));
service.Start();
await service.StartAsync();
```
### 4.3 使用WebSocket协议服务器
@@ -171,7 +171,7 @@ service.Start();
```csharp showLineNumbers
var service = new HttpService();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
.SetListenIPHosts(7707)
.ConfigureContainer(a =>
{
@@ -194,7 +194,7 @@ service.Setup(new TouchSocketConfig()
});
}));
service.Start();
await service.StartAsync();
```
:::tip 提示
@@ -241,34 +241,34 @@ service.Start();
### 6.1 Tcp协议
```csharp showLineNumbers
var jsonRpcClient = new TcpJsonRpcClient();
jsonRpcClient.Setup(new TouchSocketConfig()
var client = new TcpJsonRpcClient();
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7705"));
jsonRpcClient.Connect();
await client.ConnectAsync();
string result = jsonRpcClient.InvokeT<string>("TestJsonRpc", InvokeOption.WaitInvoke, "RRQM");
string result = client.InvokeT<string>("TestJsonRpc", InvokeOption.WaitInvoke, "RRQM");
```
### 6.2 Http协议
```csharp showLineNumbers
var jsonRpcClient = new HttpJsonRpcClient();
jsonRpcClient.Setup(new TouchSocketConfig()
var client = new HttpJsonRpcClient();
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("http://127.0.0.1:7706/jsonrpc"));
jsonRpcClient.Connect();
await client.ConnectAsync();
string result = jsonRpcClient.InvokeT<string>("TestJsonRpc", InvokeOption.WaitInvoke, "RRQM");
string result = client.InvokeT<string>("TestJsonRpc", InvokeOption.WaitInvoke, "RRQM");
```
### 6.3 Websocket协议
```csharp showLineNumbers
var jsonRpcClient = new WebSocketJsonRpcClient();
jsonRpcClient.Setup(new TouchSocketConfig()
var client = new WebSocketJsonRpcClient();
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("ws://127.0.0.1:7707/ws"));//此url就是能连接到websocket的路径。
jsonRpcClient.Connect();
await client.ConnectAsync();
string result = jsonRpcClient.InvokeT<string>("TestJsonRpc", InvokeOption.WaitInvoke, "RRQM");
string result = client.InvokeT<string>("TestJsonRpc", InvokeOption.WaitInvoke, "RRQM");
```
### 6.4 生成代理调用
@@ -304,28 +304,27 @@ var sum3 = client.TestJsonRpc("RRQM");
/// 新建一个类继承JsonRpcDispatchProxy亦或者RpcDispatchProxy基类。
/// 然后实现抽象方法主要是能获取到调用的IRpcClient派生接口。
/// </summary>
class MyJsonRpcDispatchProxy : JsonRpcDispatchProxy
internal class MyJsonRpcDispatchProxy : JsonRpcDispatchProxy
{
private readonly IJsonRpcClient m_client;
public MyJsonRpcDispatchProxy()
{
this.m_client = CreateJsonRpcClientByTcp();
this.m_client = CreateJsonRpcClientByTcp().GetFalseAwaitResult();
}
public override IJsonRpcClient GetClient()
{
return this.m_client;
}
private static IJsonRpcClient CreateJsonRpcClientByTcp()
private static async Task<IJsonRpcClient> CreateJsonRpcClientByTcp()
{
var client = new TcpJsonRpcClient();
client.Setup(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7705")
.SetTcpDataHandlingAdapter(() => new TerminatorPackageAdapter("\r\n")));
client.Connect();
Console.WriteLine("连接成功");
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7705")
.SetTcpDataHandlingAdapter(() => new TerminatorPackageAdapter("\r\n")));
await client.ConnectAsync();
return client;
}
}
@@ -380,8 +379,8 @@ public partial class ReverseJsonRpcServer : RpcServer
然后在插件注册全局`RpcStore`。并注册服务。
```csharp showLineNumbers
var jsonRpcClient = new WebSocketJsonRpcClient();
jsonRpcClient.Setup(new TouchSocketConfig()
var client = new WebSocketJsonRpcClient();
await client.SetupAsync(new TouchSocketConfig()
.ConfigurePlugins(a =>
{
a.UseGlobalRpcStore()
@@ -391,7 +390,7 @@ jsonRpcClient.Setup(new TouchSocketConfig()
});
})
.SetRemoteIPHost("ws://127.0.0.1:7707/ws"));//此url就是能连接到websocket的路径。
jsonRpcClient.Connect();
await client.ConnectAsync();
```
在服务器端中拿到IHttpSessionClient对象。然后调用GetJsonRpcActionClient扩展方法获取到jsonRpcClient。然后调用Invoke等。
@@ -406,9 +405,9 @@ class MyPluginClass : PluginBase, IWebSocketHandshakedPlugin<IHttpSessionClient>
try
{
//获取JsonRpcActionClient用于执行反向Rpc
var jsonRpcClient = client.GetJsonRpcActionClient();
var client = client.GetJsonRpcActionClient();
var result = await jsonRpcClient.InvokeTAsync<int>("Add", InvokeOption.WaitInvoke, 10, 20);
var result = await client.InvokeTAsync<int>("Add", InvokeOption.WaitInvoke, 10, 20);
Console.WriteLine(result);
}
catch (Exception ex)

View File

@@ -48,84 +48,60 @@ import Tag from "@site/src/components/Tag.js";
#### 6.1 创建ModbusTcpMaster
```csharp showLineNumbers
public IModbusTcpMaster GetMaster()
{
var master = new ModbusTcpMaster();
master.Connect("127.0.0.1:502");
return master;
}
var client = new ModbusTcpMaster();
await client.ConnectAsync("127.0.0.1:502");
```
#### 6.2 创建ModbusUdpMaster
```csharp showLineNumbers
public IModbusMaster GetMaster()
{
var master = new ModbusUdpMaster();
master.Setup(new TouchSocketConfig()
.UseUdpReceive()
.SetRemoteIPHost("127.0.0.1:502"));
master.Start();
return master;
}
var client = new ModbusUdpMaster();
await client.SetupAsync(new TouchSocketConfig()
.UseUdpReceive()
.SetRemoteIPHost("127.0.0.1:502"));
await client.StartAsync();
```
#### 6.3 创建ModbusRtuMaster
```csharp showLineNumbers
public IModbusMaster GetMaster()
{
var master = new ModbusRtuMaster();
master.Setup(new TouchSocketConfig()
.SetSerialPortOption(new SerialPortOption()
{
BaudRate = 9600,
DataBits = 8,
Parity = System.IO.Ports.Parity.Even,
PortName = "COM2",
StopBits = System.IO.Ports.StopBits.One
}));
master.Connect();
return master;
}
var client = new ModbusRtuMaster();
await client.SetupAsync(new TouchSocketConfig()
.SetSerialPortOption(new SerialPortOption()
{
BaudRate = 9600,
DataBits = 8,
Parity = System.IO.Ports.Parity.Even,
PortName = "COM2",
StopBits = System.IO.Ports.StopBits.One
}));
await client.ConnectAsync();
```
#### 6.4 创建ModbusRtuOverTcpMaster
```csharp showLineNumbers
public IModbusMaster GetMaster()
{
var master = new ModbusRtuOverTcpMaster();
master.Connect("127.0.0.1:502");
return master;
}
var client = new ModbusRtuOverTcpMaster();
await client.ConnectAsync("127.0.0.1:502");
```
#### 6.5 创建ModbusRtuOverUdpMaster
```csharp showLineNumbers
public IModbusMaster GetMaster()
{
var master = new ModbusRtuOverUdpMaster();
master.Setup(new TouchSocketConfig()
.UseUdpReceive()
.SetRemoteIPHost("127.0.0.1:502"));
master.Start();
return master;
}
var client = new ModbusRtuOverUdpMaster();
await client.SetupAsync(new TouchSocketConfig()
.UseUdpReceive()
.SetRemoteIPHost("127.0.0.1:502"));
await client.StartAsync();
```
## 七、读写操作
### 7.1 原生接口操作
所有的Modbus主站都支持以下两种原生接口操作:
所有的`Modbus`主站都支持以下原生接口操作:
```csharp showLineNumbers
//同步发送Modbus请求并等待响应
IModbusResponse SendModbusRequest(ModbusRequest request, int millisecondsTimeout, CancellationToken token);
//异步发送Modbus请求并等待响应
Task<IModbusResponse> SendModbusRequestAsync(ModbusRequest request, int millisecondsTimeout, CancellationToken token);
```
@@ -139,7 +115,7 @@ modbusRequest.SetStartingAddress(0);//设置起始
modbusRequest.SetQuantity(1);//设置数量
//modbusRequest.SetValue(false);//如果是写入类操作,可以直接设定值
var response = master.SendModbusRequest(modbusRequest, 1000, CancellationToken.None);
var response =await master.SendModbusRequestAsync(modbusRequest, 1000, CancellationToken.None);
bool[] bools = response.CreateReader().ToBoolensFromBit().ToArray();
```
@@ -151,19 +127,19 @@ bool[] bools = response.CreateReader().ToBoolensFromBit().ToArray();
读取线圈FC1
```csharp showLineNumbers
bool[] bools = master.ReadCoils(0, 1);
bool[] bools =await master.ReadCoilsAsync(0, 1);
```
读取离散输入FC2
```csharp showLineNumbers
bool[] bools = master.ReadDiscreteInputs(0, 1);
bool[] bools =await master.ReadDiscreteInputsAsync(0, 1);
```
读取保持寄存器FC3
```csharp showLineNumbers
var response = master.ReadHoldingRegisters(0, 1);
var response =await master.ReadHoldingRegistersAsync(0, 1);
var reader = response.CreateReader();
var value=reader.ReadInt16();
```
@@ -171,7 +147,7 @@ var value=reader.ReadInt16();
读取输入寄存器FC4
```csharp showLineNumbers
var response = master.ReadInputRegisters(0, 1);
var response =await master.ReadInputRegistersAsync(0, 1);
var reader = response.CreateReader();
var value=reader.ReadInt16();
```
@@ -179,19 +155,19 @@ var value=reader.ReadInt16();
写入单个线圈FC5
```csharp showLineNumbers
master.WriteSingleCoil(0, true);
await master.WriteSingleCoilAsync(0, true);
```
写入单个寄存器FC6
```csharp showLineNumbers
master.WriteSingleRegister(0, (short)100);
await master.WriteSingleRegisterAsync(0, (short)100);
```
写入多个线圈FC15
```csharp showLineNumbers
master.WriteMultipleCoils(0, new bool[] { true, false, true });
await master.WriteMultipleCoilsAsync(0, new bool[] { true, false, true });
```
写入多个寄存器FC16
@@ -204,7 +180,7 @@ using (var writer = new ValueByteBlock(1024))
writer.Write(long.MaxValue, EndianType.BigSwap);//BADC端序 8字节
writer.Write(double.MaxValue, EndianType.LittleSwap);//CDAB端序 8字节
master.WriteMultipleRegisters(0, writer.ToArray());
await master.WriteMultipleRegistersAsync(0, writer.ToArray());
}
```
@@ -223,7 +199,7 @@ using (var writer = new ValueByteBlock(1024))
```csharp showLineNumbers
//读取寄存器
var response = master.ReadHoldingRegisters(1, 0, 10);//站点1从0开始读取10个寄存器
var response =await master.ReadHoldingRegistersAsync(1, 0, 10);//站点1从0开始读取10个寄存器
//创建一个读取器
var reader = response.CreateReader();
@@ -251,7 +227,7 @@ using (var valueByteBlock = new ValueByteBlock(1024))
valueByteBlock.Write(long.MaxValue, EndianType.LittleSwap);//CDAB端序
//写入到寄存器
master.WriteMultipleRegisters(1, 0, valueByteBlock.ToArray());
await master.WriteMultipleRegistersAsync(1, 0, valueByteBlock.ToArray());
}
```
@@ -259,7 +235,7 @@ using (var valueByteBlock = new ValueByteBlock(1024))
```csharp showLineNumbers
//读取寄存器
var response = master.ReadHoldingRegisters(1, 0, 1 + 1 + 2 + 4);
var response =await master.ReadHoldingRegistersAsync(1, 0, 1 + 1 + 2 + 4);
//创建一个读取器
var reader = response.CreateReader();
@@ -280,11 +256,11 @@ using (var valueByteBlock = new ValueByteBlock(1024))
valueByteBlock.Write("Hello");
//写入到寄存器
master.WriteMultipleRegisters(1, 0, valueByteBlock.ToArray());
await master.WriteMultipleRegistersAsync(1, 0, valueByteBlock.ToArray());
}
//读取寄存器
var response = master.ReadHoldingRegisters(1, 0, 5);//5个长度10字节
var response =await master.ReadHoldingRegistersAsync(1, 0, 5);//5个长度10字节
//创建一个读取器
var reader = response.CreateReader();
@@ -300,11 +276,11 @@ using (var valueByteBlock = new ValueByteBlock(1024))
valueByteBlock.WriteObject(new MyClass() { P1 = 1, P2 = 2 }, SerializationType.Json);
//写入到寄存器
master.WriteMultipleRegisters(1, 0, valueByteBlock.ToArray());
await master.WriteMultipleRegistersAsync(1, 0, valueByteBlock.ToArray());
}
//读取寄存器
var response = master.ReadHoldingRegisters(1, 0, 10);//无法确定长度的话,可以估算一下,尽可能大即可
var response =await master.ReadHoldingRegistersAsync(1, 0, 10);//无法确定长度的话,可以估算一下,尽可能大即可
//创建一个读取器
var reader = response.CreateReader();

View File

@@ -49,7 +49,7 @@ Modbus是主从通讯的。所以我们开发了Modbus服务器组件方便
static ModbusTcpSlave CreateModbusTcpSlave()
{
var service = new ModbusTcpSlave();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
//监听端口
.SetListenIPHosts(7808)
.ConfigurePlugins(a =>
@@ -60,7 +60,7 @@ static ModbusTcpSlave CreateModbusTcpSlave()
.SetModbusDataLocater(new ModbusDataLocater(10,10,10,10));//设置数据区
})
);
service.Start();
await service.StartAsync();
Console.WriteLine("服务已启动");
return service;
}
@@ -72,7 +72,7 @@ static ModbusTcpSlave CreateModbusTcpSlave()
static ModbusUdpSlave CreateModbusUdpSlave()
{
var service = new ModbusUdpSlave();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
//监听端口
.SetBindIPHost(7809)
.ConfigurePlugins(a =>
@@ -83,7 +83,7 @@ static ModbusUdpSlave CreateModbusUdpSlave()
.SetModbusDataLocater(new ModbusDataLocater(10, 10, 10, 10));//设置数据区
})
);
service.Start();
await service.StartAsync();
Console.WriteLine("服务已启动");
return service;
}
@@ -95,7 +95,7 @@ static ModbusUdpSlave CreateModbusUdpSlave()
static ModbusRtuSlave CreateModbusRtuSlave()
{
var service = new ModbusRtuSlave();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
//设置串口
.SetSerialPortOption(new SerialPortOption()
{
@@ -125,7 +125,7 @@ static ModbusRtuSlave CreateModbusRtuSlave()
static ModbusRtuOverTcpSlave CreateModbusRtuOverTcpSlave()
{
var service = new ModbusRtuOverTcpSlave();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
//监听端口
.SetListenIPHosts(7810)
.ConfigurePlugins(a =>
@@ -136,7 +136,7 @@ static ModbusRtuOverTcpSlave CreateModbusRtuOverTcpSlave()
.SetModbusDataLocater(new ModbusDataLocater(10, 10, 10, 10));//设置数据区
})
);
service.Start();
await service.StartAsync();
Console.WriteLine("服务已启动");
return service;
}
@@ -148,7 +148,7 @@ static ModbusRtuOverTcpSlave CreateModbusRtuOverTcpSlave()
static ModbusRtuOverUdpSlave CreateModbusRtuOverUdpSlave()
{
var service = new ModbusRtuOverUdpSlave();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
//监听端口
.SetBindIPHost(7811)
.ConfigurePlugins(a =>
@@ -159,7 +159,7 @@ static ModbusRtuOverUdpSlave CreateModbusRtuOverUdpSlave()
.SetModbusDataLocater(new ModbusDataLocater(10, 10, 10, 10));//设置数据区
})
);
service.Start();
await service.StartAsync();
Console.WriteLine("服务已启动");
return service;
}
@@ -175,7 +175,7 @@ static ModbusRtuOverUdpSlave CreateModbusRtuOverUdpSlave()
static ModbusTcpSlave CreateModbusTcpSlave()
{
var service = new ModbusTcpSlave();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
//监听端口
.SetListenIPHosts(7808)
.ConfigurePlugins(a =>
@@ -202,7 +202,7 @@ static ModbusTcpSlave CreateModbusTcpSlave()
});
})
);
service.Start();
await service.StartAsync();
Console.WriteLine("服务已启动");
return service;
}

View File

@@ -28,8 +28,8 @@ static void Main(string[] args)
var config = new TouchSocketConfig();
config.SetListenIPHosts(new IPHost[] { new IPHost(7788) });
service.Setup(config);
service.Start();
await service.SetupAsync(config);
await service.StartAsync();
Console.WriteLine("转发服务器已启动。已将7788端口转发到127.0.0.1:7789与127.0.0.1:7790地址");
}

View File

@@ -41,10 +41,10 @@ config.SetListenIPHosts(new IPHost[] { new IPHost("127.0.0.1:7789"), new IPHost(
.SetDataHandlingAdapter(() => new PipelineDataHandlingAdapter());//配置适配器为Pipeline
//载入配置
service.Setup(config);
await service.SetupAsync(config);
//启动
service.Start();
await service.StartAsync();
```

View File

@@ -77,8 +77,8 @@ title: 生成、获取代理
VerifyToken = "Rpc"//连接验证口令。
});
service.Setup(config);
service.Start();
await service.SetupAsync(config);
await service.StartAsync();
```
:::tip
@@ -504,7 +504,7 @@ class MyDmtpRpcDispatchProxy : DmtpRpcDispatchProxy
private static TcpDmtpClient GetTcpDmtpClient()
{
var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
@@ -518,7 +518,7 @@ class MyDmtpRpcDispatchProxy : DmtpRpcDispatchProxy
{
VerifyToken = "Dmtp"//连接验证口令。
}));
client.Connect();
await client.ConnectAsync();
client.Logger.Info($"连接成功Id={client.Id}");
return client;
}
@@ -610,7 +610,7 @@ class MyDmtpRpcRealityProxy<T> : DmtpRpcRealityProxy<T>
private static TcpDmtpClient GetTcpDmtpClient()
{
var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
@@ -624,7 +624,7 @@ class MyDmtpRpcRealityProxy<T> : DmtpRpcRealityProxy<T>
{
VerifyToken = "Dmtp"
}));
client.Connect();
await client.ConnectAsync();
client.Logger.Info($"连接成功Id={client.Id}");
return client;
}

View File

@@ -85,7 +85,7 @@ client.Received = async (c, e) =>
await Console.Out.WriteLineAsync(Encoding.UTF8.GetString(e.ByteBlock,0,e.ByteBlock.Len));
};
client.Setup(new TouchSocket.Core.TouchSocketConfig()
await client.SetupAsync(new TouchSocket.Core.TouchSocketConfig()
.SetSerialPortOption(new SerialPortOption()
{
BaudRate = 9600,//波特率
@@ -95,7 +95,7 @@ client.Setup(new TouchSocket.Core.TouchSocketConfig()
StopBits = System.IO.Ports.StopBits.One//停止位
}));
client.Connect();
await client.ConnectAsync();
Console.WriteLine("连接成功");
```
@@ -120,7 +120,7 @@ class MySerialClient : SerialPortClientBase
```csharp showLineNumbers
var client = new MySerialClient();
client.Setup(new TouchSocket.Core.TouchSocketConfig()
await client.SetupAsync(new TouchSocket.Core.TouchSocketConfig()
.SetSerialPortOption(new SerialPortOption()
{
BaudRate = 9600,//波特率
@@ -129,7 +129,7 @@ client.Setup(new TouchSocket.Core.TouchSocketConfig()
PortName = "COM1",//COM
StopBits = System.IO.Ports.StopBits.One//停止位
}));
client.Connect();//调用连接,当连接不成功时,会抛出异常。
await client.ConnectAsync();//调用连接,当连接不成功时,会抛出异常。
```
## 七、接收数据
@@ -157,7 +157,7 @@ client.Received = (client, e) =>
在使用串口时可能更需要同步Read的情况。所以此处提供了异步读取方法。
```csharp showLineNumbers
client.Connect();
await client.ConnectAsync();
using (var receiver = client.CreateReceiver())
{
@@ -179,7 +179,7 @@ using (var receiver = client.CreateReceiver())
带有接收超时的情况:
```csharp {6} showLineNumbers
client.Connect();
await client.ConnectAsync();
using (var receiver = client.CreateReceiver())
{
while (true)
@@ -238,7 +238,7 @@ public class MyPlugin : PluginBase, ISerialReceivedPlugin<ISerialPortClient>
```csharp {13} showLineNumbers
var client = new SerialPortClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetSerialPortOption(new SerialPortOption()
{
BaudRate = 9600,//波特率
@@ -252,7 +252,7 @@ client.Setup(new TouchSocketConfig()
a.Add<MyPlugin>();
}));
client.Connect();
await client.ConnectAsync();
```
## 八、发送数据
@@ -287,7 +287,7 @@ public virtual Task SendAsync(byte[] buffer, int offset, int length);
WaitingClient是TouchSocket提供的一个等待客户端发送数据的客户端。例如串口客户端发送一个Hello等待对方回信Hi此时即可使用WaitingClient。
```csharp showLineNumbers
client.Connect();
await client.ConnectAsync();
//调用CreateWaitingClient获取到IWaitingClient的对象。
var waitClient = client.CreateWaitingClient(new WaitingOptions()

View File

@@ -21,7 +21,7 @@ Swagger是一个用于生成、描述和调用RESTful接口的Web服务。通俗
```csharp {14-15}
var service = new HttpService();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
.SetListenIPHosts(new IPHost[] { new IPHost(7789) })
.ConfigurePlugins(a =>
{
@@ -40,7 +40,7 @@ service.Setup(new TouchSocketConfig()
a.UseDefaultHttpServicePlugin();
}));
service.Start();
await service.StartAsync();
Console.WriteLine("测试swagger http://127.0.0.1:7789/swagger/index.html");
```

View File

@@ -156,7 +156,7 @@ class CloseException : Exception
```csharp {3}
var service = new TcpService();
service.Setup(new TouchSocketConfig()//载入配置
await service.SetupAsync(new TouchSocketConfig()//载入配置
.SetContainer(new MyContainer())
.SetListenIPHosts("tcp://127.0.0.1:7789", 7790)//同时监听两个地址
.ConfigureContainer(a =>//容器的配置顺序应该在最前面
@@ -172,7 +172,7 @@ service.Setup(new TouchSocketConfig()//载入配置
//a.Add();//此处可以添加插件
}));
service.Start();//启动
await service.StartAsync();//启动
```
:::info 提示

View File

@@ -86,10 +86,10 @@ config.SetListenIPHosts(new IPHost[] { new IPHost("127.0.0.1:7789"), new IPHost(
});
//载入配置
service.Setup(config);
await service.SetupAsync(config);
//启动
service.Start();
await service.StartAsync();
service.Logger.Info("服务器成功启动。");
service.Logger.Info("使用“Add 10 20”测试");

View File

@@ -231,7 +231,7 @@ private static void Main(string[] args)
//服务器
var service = new TcpService();
service.Setup(new TouchSocketConfig()//载入配置
await service.SetupAsync(new TouchSocketConfig()//载入配置
.SetListenIPHosts(new IPHost[] { new IPHost("127.0.0.1:7789"), new IPHost(7790) })//同时监听两个地址
.SetTcpDataHandlingAdapter(() => new MyFixedHeaderDataHandlingAdapter())
.ConfigureContainer(a =>
@@ -243,7 +243,7 @@ private static void Main(string[] args)
a.Add<HeartbeatAndReceivePlugin>();
}));
service.Start();//启动
await service.StartAsync();//启动
service.Logger.Info("服务器成功启动");
//客户端

View File

@@ -34,60 +34,11 @@ public partial class ApiServer : RpcServer
this.m_logger = logger;
}
[Router("[api]/[action]ab")]//此路由会以"/Server/Sumab"实现
[Router("[api]/[action]")]//此路由会以"/Server/Sum"实现
[WebApi(HttpMethodType.GET)]
public int Sum(int a, int b)
{
return a + b;
}
[WebApi(HttpMethodType.POST)]
public int TestPost(MyClass myClass)
{
return myClass.A + myClass.B;
}
/// <summary>
/// 使用调用上下文,响应文件下载。
/// </summary>
/// <param name="callContext"></param>
[WebApi(HttpMethodType.GET)]
public Task<string> DownloadFile(IWebApiCallContext callContext, string id)
{
if (id == "rrqm")
{
callContext.HttpContext.Response.FromFile(@"D:\System\Windows.iso", callContext.HttpContext.Request);
return Task.FromResult("ok");
}
return Task.FromResult("id不正确。");
}
/// <summary>
/// 使用调用上下文,获取实际请求体。
/// </summary>
/// <param name="callContext"></param>
[WebApi(HttpMethodType.POST)]
[Router("[api]/[action]")]
public Task<string> PostContent(IWebApiCallContext callContext)
{
if (callContext.Caller is ITcpSessionClient SessionClient)
{
this.m_logger.Info($"IP:{SessionClient.IP},Port:{SessionClient.Port}");//获取Ip和端口
}
if (callContext.HttpContext.Request.TryGetContent(out var content))
{
this.m_logger.Info($"共计:{content.Length}");
}
return Task.FromResult("ok");
}
}
public class MyClass
{
public int A { get; set; }
public int B { get; set; }
}
```
@@ -96,36 +47,30 @@ public class MyClass
更多注册Rpc的方法请看[注册Rpc服务](./rpcregister.mdx)
```csharp showLineNumbers
var service = new HttpService();
service.Setup(new TouchSocketConfig()
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
a.AddRpcStore(store =>
{
store.RegisterServer<ApiServer>();//注册服务
var service = new HttpService();
await service.SetupAsync(new TouchSocketConfig()
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
a.AddRpcStore(store =>
{
store.RegisterServer<ApiServer>();//注册服务
});
})
.ConfigurePlugins(a =>
{
a.UseCheckClear();
#if DEBUG
//下列代码,会生成客户端的调用代码。
var codeString = store.GetProxyCodes("WebApiProxy", typeof(WebApiAttribute));
File.WriteAllText("../../../WebApiProxy.cs", codeString);
#endif
});
})
.ConfigurePlugins(a =>
{
a.UseCheckClear();
a.UseWebApi();
a.UseWebApi();
//此插件是http的兜底插件应该最后添加。作用是当所有路由不匹配时返回404.且内部也会处理Option请求。可以更好的处理来自浏览器的跨域探测。
a.UseDefaultHttpServicePlugin();
}));
await service.StartAsync();
//此插件是http的兜底插件应该最后添加。作用是当所有路由不匹配时返回404.且内部也会处理Option请求。可以更好的处理来自浏览器的跨域探测。
a.UseDefaultHttpServicePlugin();
}));
service.Start();
Console.WriteLine("以下连接用于测试webApi");
Console.WriteLine($"使用http://127.0.0.1:7789/ApiServer/Sum?a=10&b=20");
Console.WriteLine("以下连接用于测试webApi");
Console.WriteLine($"使用http://127.0.0.1:7789/ApiServer/Sum?a=10&b=20");
```
@@ -133,7 +78,7 @@ public class MyClass
### 5.1 Get规则
使用Get进行请求时服务方法可以声明多个参数但是每个参数都必须是基础类型或者字符串类型
使用Get进行请求时服务方法可以声明多个参数但是每个参数都必须是**简单类型**包括字符串、DateTime等
```csharp showLineNumbers
[WebApi(HttpMethodType.GET)]
@@ -257,7 +202,7 @@ http://127.0.0.1:7789/ApiServer/Sum?a=10&b=20
private static WebApiClient CreateWebApiClient()
{
var client = new WebApiClient();
client.Connect("127.0.0.1:7789");
await client.ConnectAsync("127.0.0.1:7789");
Console.WriteLine("连接成功");
return client;
}
@@ -281,7 +226,7 @@ Dotnet自带HttpClient则是通过连接池的方式访问。详情看[HttpClien
private static WebApiClientSlim CreateWebApiClientSlim()
{
var client = new WebApiClientSlim(new System.Net.Http.HttpClient());
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("http://127.0.0.1:7789")
.ConfigurePlugins(a =>
{
@@ -358,13 +303,13 @@ class MyWebApiDispatchProxy : WebApiDispatchProxy
private static WebApiClient CreateWebApiClient()
{
var client = new WebApiClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.ConfigurePlugins(a =>
{
a.UseReconnection();
}));
client.Connect();
await client.ConnectAsync();
Console.WriteLine("连接成功");
return client;
}

View File

@@ -29,13 +29,13 @@ import Tag from "@site/src/components/Tag.js";
```csharp showLineNumbers
var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("ws://127.0.0.1:7789/ws")
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
}));
client.Connect();
await client.ConnectAsync();
client.Logger.Info("连接成功");
```
@@ -52,7 +52,7 @@ wss://127.0.0.1:7789/ws
```csharp showLineNumbers
var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost(new IPHost("wss://127.0.0.1:7789/ws"))
.SetClientSslOption(
new ClientSslOption()
@@ -63,7 +63,7 @@ client.Setup(new TouchSocketConfig()
CertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true; }
}));
client.Connect();
await client.ConnectAsync();
Console.WriteLine("连接成功");
```
@@ -84,13 +84,13 @@ WebSessionClient可以使用默认配置直接连接到服务器同时也支
```csharp showLineNumbers
var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.SetRemoteIPHost("ws://127.0.0.1:7789/ws"));
client.Connect();
await client.ConnectAsync();
client.Logger.Info("通过ws://127.0.0.1:7789/ws连接成功");
```
@@ -101,13 +101,13 @@ client.Logger.Info("通过ws://127.0.0.1:7789/ws连接成功");
```csharp showLineNumbers
var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.SetRemoteIPHost("ws://127.0.0.1:7789/wsquery?token=123456"));
client.Connect();
await client.ConnectAsync();
client.Logger.Info("通过ws://127.0.0.1:7789/wsquery?token=123456连接成功");
@@ -119,7 +119,7 @@ client.Logger.Info("通过ws://127.0.0.1:7789/wsquery?token=123456连接成功")
```csharp showLineNumbers
var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
@@ -133,7 +133,7 @@ client.Setup(new TouchSocketConfig()
});
})
.SetRemoteIPHost("ws://127.0.0.1:7789/wsheader"));
client.Connect();
await client.ConnectAsync();
client.Logger.Info("通过ws://127.0.0.1:7789/wsheader连接成功");
```
@@ -150,7 +150,7 @@ WebSocket默认情况下是基于GET方式连接的但是在一些更特殊
```csharp showLineNumbers
using var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
@@ -164,7 +164,7 @@ client.Setup(new TouchSocketConfig()
});
})
.SetRemoteIPHost("ws://127.0.0.1:7789/postws"));
client.Connect();
await client.ConnectAsync();
client.Logger.Info("通过ws://127.0.0.1:7789/postws连接成功");
```
@@ -306,7 +306,7 @@ public class MyWebSocketPlugin : PluginBase, IWebSocketReceivedPlugin
```csharp {10}
var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("ws://127.0.0.1:7789/ws")
.ConfigureContainer(a =>
{
@@ -316,7 +316,7 @@ client.Setup(new TouchSocketConfig()
{
a.Add<MyWebSocketPlugin>();
}));
client.Connect();
await client.ConnectAsync();
```
### 6.3 使用WebSocket显式ReadAsync

View File

@@ -20,7 +20,7 @@ Websocket拥有自己的心跳数据格式和响应心跳格式专业名
```csharp {12}
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
await service.SetupAsync(new TouchSocketConfig()//加载配置
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
@@ -33,7 +33,7 @@ service.Setup(new TouchSocketConfig()//加载配置
.UseAutoPong();//当收到ping报文时自动回应pong
}));
service.Start();
await service.StartAsync();
```
:::tip 提示
@@ -46,7 +46,7 @@ service.Start();
```csharp {10-11}
var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("ws://127.0.0.1:7789/ws")
.ConfigureContainer(a =>
{
@@ -57,7 +57,7 @@ client.Setup(new TouchSocketConfig()
a.UseWebSocketHeartbeat()//使用心跳插件
.SetTick(TimeSpan.FromSeconds(1));//每5秒ping一次。
}));
client.Connect();
await client.ConnectAsync();
```
## 三、直接发送心跳

View File

@@ -35,7 +35,7 @@ title: 创建WebSocket服务器
```csharp showLineNumbers
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
await service.SetupAsync(new TouchSocketConfig()//加载配置
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
@@ -48,7 +48,7 @@ service.Setup(new TouchSocketConfig()//加载配置
.UseAutoPong();//当收到ping报文时自动回应pong
}));
service.Start();
await service.StartAsync();
service.Logger.Info("服务器已启动");
```
@@ -59,7 +59,7 @@ service.Logger.Info("服务器已启动");
```csharp showLineNumbers
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
await service.SetupAsync(new TouchSocketConfig()//加载配置
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
@@ -72,7 +72,7 @@ service.Setup(new TouchSocketConfig()//加载配置
.UseAutoPong();//当收到ping报文时自动回应pong
}));
service.Start();
await service.StartAsync();
service.Logger.Info("服务器已启动");
```
@@ -134,7 +134,7 @@ private static bool VerifyConnection(IHttpSessionClient client, HttpContext cont
```csharp showLineNumbers
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
await service.SetupAsync(new TouchSocketConfig()//加载配置
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
@@ -149,7 +149,7 @@ service.Setup(new TouchSocketConfig()//加载配置
});
}));
service.Start();
await service.StartAsync();
service.Logger.Info("服务器已启动");
```
@@ -284,7 +284,7 @@ public class MyWebSocketPlugin : PluginBase, IWebSocketReceivedPlugin
```csharp {12}
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
await service.SetupAsync(new TouchSocketConfig()//加载配置
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
@@ -297,7 +297,7 @@ service.Setup(new TouchSocketConfig()//加载配置
a.Add<MyWebSocketPlugin>();//自定义插件。
}));
service.Start();
await service.StartAsync();
```
:::tip 提示
@@ -361,7 +361,7 @@ class MyReadWebSocketPlugin : PluginBase, IWebSocketHandshakedPlugin
private static HttpService CreateHttpService()
{
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
await service.SetupAsync(new TouchSocketConfig()//加载配置
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
@@ -376,7 +376,7 @@ private static HttpService CreateHttpService()
a.Add<MyReadWebSocketPlugin>();
}));
service.Start();
await service.StartAsync();
service.Logger.Info("服务器已启动");
service.Logger.Info("直接连接地址=>ws://127.0.0.1:7789/ws");

View File

@@ -51,7 +51,7 @@ public class MyWSCommandLinePlugin : WebSocketCommandLinePlugin
```csharp {14}
var service = new HttpService();
service.Setup(new TouchSocketConfig()//加载配置
await service.SetupAsync(new TouchSocketConfig()//加载配置
.SetListenIPHosts(7789)
.ConfigureContainer(a =>
{
@@ -66,7 +66,7 @@ service.Setup(new TouchSocketConfig()//加载配置
a.Add<MyWSCommandLinePlugin>();
}));
service.Start();
await service.StartAsync();
```
### 3.2 调用
@@ -77,7 +77,7 @@ service.Start();
```csharp {18}
var client = new WebSessionClient();
client.Setup(new TouchSocketConfig()
await client.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
@@ -91,7 +91,7 @@ client.Setup(new TouchSocketConfig()
});
})
.SetRemoteIPHost("ws://127.0.0.1:7789/ws"));
client.Connect();
await client.ConnectAsync();
client.SendWithWS("Add 10 20");
```

View File

@@ -57,7 +57,7 @@ public class MyClass
```csharp showLineNumbers
var service = new HttpService();
service.Setup(new TouchSocketConfig()
await service.SetupAsync(new TouchSocketConfig()
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
@@ -77,7 +77,7 @@ service.Setup(new TouchSocketConfig()
.SetXmlRpcUrl("/xmlRpc");
})
.SetListenIPHosts(7789));
service.Start();
await service.StartAsync();
service.Logger.Info("服务器已启动");
```
@@ -118,9 +118,9 @@ service.Logger.Info("服务器已启动");
使用客户端调用则是使用RPC的范式进行调用使用比较简单。
```csharp showLineNumbers
private static void Main(string[] args)
private static async Task Main(string[] args)
{
var client = GetXmlRpcClient();
var client =await GetXmlRpcClientAsync();
//直接调用
var result1 = client.InvokeT<int>("Sum", InvokeOption.WaitInvoke, 10, 20);
@@ -132,10 +132,10 @@ private static void Main(string[] args)
Console.ReadKey();
}
private static XmlRpcClient GetXmlRpcClient()
private static async Task<XmlRpcClient> GetXmlRpcClientAsync()
{
var jsonRpcClient = new XmlRpcClient();
jsonRpcClient.Connect("http://127.0.0.1:7789/xmlRpc");
await jsonRpcClient.ConnectAsync("http://127.0.0.1:7789/xmlRpc");
Console.WriteLine("连接成功");
return jsonRpcClient;
}
@@ -145,7 +145,7 @@ private static XmlRpcClient GetXmlRpcClient()
在服务器端,注册完服务后,就可以生成客户端调用代码了。详细的操作可以查看[服务端代理生成](./rpcgenerateproxy.mdx)
```csharp {8-9}
```csharp {6-7}
a.AddRpcStore(store =>
{
store.RegisterServer<XmlServer>();
@@ -174,23 +174,24 @@ var sum3 = client.Sum(10,20);
/// 新建一个类继承XmlRpcDispatchProxy亦或者RpcDispatchProxy基类。
/// 然后实现抽象方法主要是能获取到调用的IRpcClient派生接口。
/// </summary>
class MyXmlRpcDispatchProxy : XmlRpcDispatchProxy
internal class MyXmlRpcDispatchProxy : XmlRpcDispatchProxy
{
private readonly IXmlRpcClient m_client;
public MyXmlRpcDispatchProxy()
{
this.m_client = GetXmlRpcClient();
this.m_client = GetXmlRpcClientAsync().GetFalseAwaitResult();
}
public override IXmlRpcClient GetClient()
{
return this.m_client;
}
private static XmlRpcClient GetXmlRpcClient()
private static async Task<XmlRpcClient> GetXmlRpcClientAsync()
{
var jsonRpcClient = new XmlRpcClient();
jsonRpcClient.Connect("http://127.0.0.1:7789/xmlRpc");
await jsonRpcClient.ConnectAsync("http://127.0.0.1:7789/xmlRpc");
Console.WriteLine("连接成功");
return jsonRpcClient;
}