using HandyControl.Controls; using Newtonsoft.Json; using Ping9719.WpfEx; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using TouchSocket.Core; using TouchSocket.Http.WebSockets; using TouchSocket.Sockets; using WCS.Model.WebSocketModel; 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(); //配置心跳 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 { try { var message = e.DataFrame.ToText(); var warning = JsonConvert.DeserializeObject(message); if (warning != null) { //通知类的 if (warning.IsWarning == false) { switch (warning.WarningType) { case WarningTypeEnum.通知刷新出库: OutVentoryView.viewModel.RefreshDataGridItemSource(); client.Send(e.DataFrame.ToText()); break; case WarningTypeEnum.通知刷新盘点: StockTakingView.viewModel.RefreshDataGridItemSource(); client.Send(e.DataFrame.ToText()); break; case WarningTypeEnum.恢复正常: var SolvedGuids = warning.SolvedGuids; SolvedGuids.ForEach(guid => { WarningManager.RemoveWarning(guid); }); TextBoxLog.AddLog(warning.WarningMessage, "InstoreLog", DateTime.Now); client.Send(e.DataFrame.ToText()); break; default: break; } return; } else { Application.Current.Dispatcher.Invoke(() => { WarningManager.AddWarning(warning); TextBoxLog.AddLog(warning.WarningMessage, "InstoreLog", DateTime.Now); }); } } client.Send(e.DataFrame.ToText()); } catch { } } 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(); } } }