Files
wcs/货架标准上位机/WebSocket.cs
hehaibing-1996 d283924ae1 提交代码
2024-05-03 11:04:59 +08:00

100 lines
3.1 KiB
C#

using HandyControl.Controls;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Core;
using TouchSocket.Http.WebSockets;
using TouchSocket.Sockets;
namespace
{
public static class WebSocket
{
public static void InitWebSocket()
{
var client = new WebSocketClient();
client.Setup(new TouchSocketConfig()
.SetRemoteIPHost("ws://127.0.0.1:7789/ws")
.ConfigureContainer(a =>
{
a.AddConsoleLogger();
})
.ConfigurePlugins(a =>
{
a.Add<WebSocketClientPlugin>();
//配置心跳
a.UseWebSocketHeartbeat()//使用心跳插件
.SetTick(TimeSpan.FromSeconds(5));//每5秒ping一次。
//配置断线重连
a.UseReconnection(-1, true, 1000);//-1表示一直重连
}));
client.Connect();
}
}
public class WebSocketClientPlugin : PluginBase, IWebSocketReceivedPlugin
{
private readonly ILog m_logger;
public WebSocketClientPlugin(ILog logger)
{
this.m_logger = logger;
}
public async Task OnWebSocketReceived(IWebSocket client, WSDataFrameEventArgs e)
{
switch (e.DataFrame.Opcode)
{
case WSDataType.Cont:
m_logger.Info($"收到中间数据,长度为:{e.DataFrame.PayloadLength}");
return;
case WSDataType.Text:
m_logger.Info(e.DataFrame.ToText());
if (!client.Client.IsClient)
{
client.Send("已收到");
}
//返回的报警信息 出入库盘点等日志信息
else
{
TextBoxLog.AddLog(e.DataFrame.ToText(), "InstoreLog", DateTime.Now);
}
return;
case WSDataType.Binary:
if (e.DataFrame.FIN)
{
m_logger.Info($"收到二进制数据,长度为:{e.DataFrame.PayloadLength}");
}
else
{
m_logger.Info($"收到未结束的二进制数据,长度为:{e.DataFrame.PayloadLength}");
}
return;
case WSDataType.Close:
{
m_logger.Info("远程请求断开");
client.Close("断开");
}
return;
case WSDataType.Ping:
client.Pong();
break;
case WSDataType.Pong:
break;
default:
break;
}
await e.InvokeNext();
}
}
}